func()

in internal/service/content/revision_service.go [107:181]


func (rs *RevisionService) RevisionAudit(ctx context.Context, req *schema.RevisionAuditReq) (err error) {
	revisioninfo, exist, err := rs.revisionRepo.GetRevisionByID(ctx, req.ID)
	if err != nil {
		return
	}
	if !exist {
		return
	}
	if revisioninfo.Status != entity.RevisionUnreviewedStatus {
		return
	}
	if req.Operation == schema.RevisionAuditReject {
		err = rs.revisionRepo.UpdateStatus(ctx, req.ID, entity.RevisionReviewRejectStatus, req.UserID)
		return
	}
	if req.Operation == schema.RevisionAuditApprove {
		objectType, objectTypeerr := obj.GetObjectTypeStrByObjectID(revisioninfo.ObjectID)
		if objectTypeerr != nil {
			return objectTypeerr
		}
		revisionitem := &schema.GetRevisionResp{}
		_ = copier.Copy(revisionitem, revisioninfo)
		rs.parseItem(ctx, revisionitem)
		var saveErr error
		switch objectType {
		case constant.QuestionObjectType:
			if !req.CanReviewQuestion {
				saveErr = errors.BadRequest(reason.RevisionNoPermission)
			} else {
				saveErr = rs.revisionAuditQuestion(ctx, revisionitem)
			}
		case constant.AnswerObjectType:
			if !req.CanReviewAnswer {
				saveErr = errors.BadRequest(reason.RevisionNoPermission)
			} else {
				saveErr = rs.revisionAuditAnswer(ctx, revisionitem)
			}
		case constant.TagObjectType:
			if !req.CanReviewTag {
				saveErr = errors.BadRequest(reason.RevisionNoPermission)
			} else {
				saveErr = rs.revisionAuditTag(ctx, revisionitem)
			}
		}
		if saveErr != nil {
			return saveErr
		}
		err = rs.revisionRepo.UpdateStatus(ctx, req.ID, entity.RevisionReviewPassStatus, req.UserID)
		if err != nil {
			return err
		}
		err = rs.reviewActivity.Review(ctx, &schema.PassReviewActivity{
			UserID:           revisioninfo.UserID,
			TriggerUserID:    req.UserID,
			ObjectID:         revisioninfo.ObjectID,
			OriginalObjectID: "0",
			RevisionID:       revisioninfo.ID,
		})
		if err != nil {
			log.Errorf("add review activity failed: %v", err)
		}

		msg := &schema.NotificationMsg{
			TriggerUserID:  req.UserID,
			ReceiverUserID: revisioninfo.UserID,
			Type:           schema.NotificationTypeAchievement,
			ObjectID:       revisioninfo.ObjectID,
			ObjectType:     objectType,
		}
		rs.notificationQueueService.Send(ctx, msg)
		return
	}

	return nil
}