func()

in internal/service/object_info/object_info.go [62:185]


func (os *ObjService) GetUnreviewedRevisionInfo(ctx context.Context, objectID string) (objInfo *schema.UnreviewedRevisionInfoInfo, err error) {
	objectType, err := obj.GetObjectTypeStrByObjectID(objectID)
	if err != nil {
		return nil, err
	}
	switch objectType {
	case constant.QuestionObjectType:
		questionInfo, exist, err := os.questionRepo.GetQuestion(ctx, objectID)
		if err != nil {
			return nil, err
		}
		if !exist {
			break
		}
		taglist, err := os.tagCommon.GetObjectEntityTag(ctx, objectID)
		if err != nil {
			return nil, err
		}
		os.tagCommon.TagsFormatRecommendAndReserved(ctx, taglist)
		tags, err := os.tagCommon.TagFormat(ctx, taglist)
		if err != nil {
			return nil, err
		}
		objInfo = &schema.UnreviewedRevisionInfoInfo{
			CreatedAt:           questionInfo.CreatedAt.Unix(),
			ObjectID:            questionInfo.ID,
			QuestionID:          questionInfo.ID,
			ObjectType:          objectType,
			ObjectCreatorUserID: questionInfo.UserID,
			Title:               questionInfo.Title,
			Content:             questionInfo.OriginalText,
			Html:                questionInfo.ParsedText,
			AnswerCount:         questionInfo.AnswerCount,
			AnswerAccepted:      !checker.IsNotZeroString(questionInfo.AcceptedAnswerID),
			Tags:                tags,
			Status:              questionInfo.Status,
			ShowStatus:          questionInfo.Show,
		}
	case constant.AnswerObjectType:
		answerInfo, exist, err := os.answerRepo.GetAnswer(ctx, objectID)
		if err != nil {
			return nil, err
		}
		if !exist {
			break
		}

		questionInfo, exist, err := os.questionRepo.GetQuestion(ctx, answerInfo.QuestionID)
		if err != nil {
			return nil, err
		}
		if !exist {
			break
		}
		objInfo = &schema.UnreviewedRevisionInfoInfo{
			CreatedAt:           answerInfo.CreatedAt.Unix(),
			ObjectID:            answerInfo.ID,
			QuestionID:          answerInfo.QuestionID,
			AnswerID:            answerInfo.ID,
			ObjectType:          objectType,
			ObjectCreatorUserID: answerInfo.UserID,
			Title:               questionInfo.Title,
			Content:             answerInfo.OriginalText,
			Html:                answerInfo.ParsedText,
			Status:              answerInfo.Status,
			AnswerAccepted:      questionInfo.AcceptedAnswerID == answerInfo.ID,
		}
	case constant.TagObjectType:
		tagInfo, exist, err := os.tagRepo.GetTagByID(ctx, objectID, true)
		if err != nil {
			return nil, err
		}
		if !exist {
			break
		}
		objInfo = &schema.UnreviewedRevisionInfoInfo{
			CreatedAt:  tagInfo.CreatedAt.Unix(),
			ObjectID:   tagInfo.ID,
			ObjectType: objectType,
			Title:      tagInfo.SlugName,
			Content:    tagInfo.OriginalText,
			Html:       tagInfo.ParsedText,
			Status:     tagInfo.Status,
		}
	case constant.CommentObjectType:
		commentInfo, exist, err := os.commentRepo.GetCommentWithoutStatus(ctx, objectID)
		if err != nil {
			return nil, err
		}
		if !exist {
			break
		}
		objInfo = &schema.UnreviewedRevisionInfoInfo{
			CreatedAt:           commentInfo.CreatedAt.Unix(),
			ObjectID:            commentInfo.ID,
			CommentID:           commentInfo.ID,
			ObjectType:          objectType,
			ObjectCreatorUserID: commentInfo.UserID,
			Content:             commentInfo.OriginalText,
			Html:                commentInfo.ParsedText,
			Status:              commentInfo.Status,
		}
		if len(commentInfo.QuestionID) > 0 {
			questionInfo, exist, err := os.questionRepo.GetQuestion(ctx, commentInfo.QuestionID)
			if err != nil {
				return nil, err
			}
			if exist {
				objInfo.QuestionID = questionInfo.ID
			}
			answerInfo, exist, err := os.answerRepo.GetAnswer(ctx, commentInfo.ObjectID)
			if err != nil {
				return nil, err
			}
			if exist {
				objInfo.AnswerID = answerInfo.ID
			}
		}
	}
	if objInfo == nil {
		err = errors.BadRequest(reason.ObjectNotFound)
	}
	return objInfo, err
}