diff --git a/docs/docs.go b/docs/docs.go index 9de9e8fc..21f184bc 100644 --- a/docs/docs.go +++ b/docs/docs.go @@ -1294,7 +1294,7 @@ const docTemplate = `{ } } }, - "/answer/api/v1/answer/list": { + "/answer/api/v1/answer/page": { "get": { "security": [ { @@ -1314,13 +1314,32 @@ const docTemplate = `{ "summary": "AnswerList", "parameters": [ { - "description": "AnswerListReq", - "name": "data", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/schema.AnswerListReq" - } + "type": "string", + "description": "question_id", + "name": "question_id", + "in": "query", + "required": true + }, + { + "type": "string", + "description": "order", + "name": "order", + "in": "query", + "required": true + }, + { + "type": "string", + "description": "page", + "name": "page", + "in": "query", + "required": true + }, + { + "type": "string", + "description": "page_size", + "name": "page_size", + "in": "query", + "required": true } ], "responses": { @@ -4875,27 +4894,6 @@ const docTemplate = `{ } } }, - "schema.AnswerListReq": { - "type": "object", - "properties": { - "order": { - "description": "1 Default 2 time", - "type": "string" - }, - "page": { - "description": "Query number of pages", - "type": "integer" - }, - "page_size": { - "description": "Search page size", - "type": "integer" - }, - "question_id": { - "description": "question_id", - "type": "string" - } - } - }, "schema.AnswerUpdateReq": { "type": "object", "properties": { diff --git a/docs/swagger.json b/docs/swagger.json index b1eaec18..05fdf0af 100644 --- a/docs/swagger.json +++ b/docs/swagger.json @@ -1282,7 +1282,7 @@ } } }, - "/answer/api/v1/answer/list": { + "/answer/api/v1/answer/page": { "get": { "security": [ { @@ -1302,13 +1302,32 @@ "summary": "AnswerList", "parameters": [ { - "description": "AnswerListReq", - "name": "data", - "in": "body", - "required": true, - "schema": { - "$ref": "#/definitions/schema.AnswerListReq" - } + "type": "string", + "description": "question_id", + "name": "question_id", + "in": "query", + "required": true + }, + { + "type": "string", + "description": "order", + "name": "order", + "in": "query", + "required": true + }, + { + "type": "string", + "description": "page", + "name": "page", + "in": "query", + "required": true + }, + { + "type": "string", + "description": "page_size", + "name": "page_size", + "in": "query", + "required": true } ], "responses": { @@ -4863,27 +4882,6 @@ } } }, - "schema.AnswerListReq": { - "type": "object", - "properties": { - "order": { - "description": "1 Default 2 time", - "type": "string" - }, - "page": { - "description": "Query number of pages", - "type": "integer" - }, - "page_size": { - "description": "Search page size", - "type": "integer" - }, - "question_id": { - "description": "question_id", - "type": "string" - } - } - }, "schema.AnswerUpdateReq": { "type": "object", "properties": { diff --git a/docs/swagger.yaml b/docs/swagger.yaml index d32dd3d7..ae9e1bf8 100644 --- a/docs/swagger.yaml +++ b/docs/swagger.yaml @@ -206,21 +206,6 @@ definitions: description: question_id type: string type: object - schema.AnswerListReq: - properties: - order: - description: 1 Default 2 time - type: string - page: - description: Query number of pages - type: integer - page_size: - description: Search page size - type: integer - question_id: - description: question_id - type: string - type: object schema.AnswerUpdateReq: properties: content: @@ -2462,18 +2447,32 @@ paths: summary: Get Answer tags: - api-answer - /answer/api/v1/answer/list: + /answer/api/v1/answer/page: get: consumes: - application/json description: AnswerList
order (default or updated) parameters: - - description: AnswerListReq - in: body - name: data + - description: question_id + in: query + name: question_id required: true - schema: - $ref: '#/definitions/schema.AnswerListReq' + type: string + - description: order + in: query + name: order + required: true + type: string + - description: page + in: query + name: page + required: true + type: string + - description: page_size + in: query + name: page_size + required: true + type: string produces: - application/json responses: diff --git a/internal/controller/answer_controller.go b/internal/controller/answer_controller.go index 94105ba4..dddaeeb8 100644 --- a/internal/controller/answer_controller.go +++ b/internal/controller/answer_controller.go @@ -203,14 +203,18 @@ func (ac *AnswerController) Update(ctx *gin.Context) { // @Security ApiKeyAuth // @Accept json // @Produce json -// @Param data body schema.AnswerListReq true "AnswerListReq" +// @Param question_id query string true "question_id" +// @Param order query string true "order" +// @Param page query string true "page" +// @Param page_size query string true "page_size" // @Success 200 {string} string "" -// @Router /answer/api/v1/answer/list [get] +// @Router /answer/api/v1/answer/page [get] func (ac *AnswerController) AnswerList(ctx *gin.Context) { req := &schema.AnswerListReq{} if handler.BindAndCheck(ctx, req) { return } + req.UserID = middleware.GetLoginUserIDFromContext(ctx) canList, err := ac.rankService.CheckOperationPermissions(ctx, req.UserID, []string{ diff --git a/internal/repo/question/question_repo.go b/internal/repo/question/question_repo.go index 18da5594..82686fe5 100644 --- a/internal/repo/question/question_repo.go +++ b/internal/repo/question/question_repo.go @@ -230,7 +230,7 @@ func (qr *questionRepo) SearchList(ctx context.Context, search *schema.QuestionS session = session.OrderBy("question.created_at desc") } session = session.Limit(search.PageSize, offset) - session = session.Select("question.id,question.user_id,question.title,question.original_text,question.parsed_text,question.status,question.view_count,question.unique_view_count,question.vote_count,question.answer_count,question.collection_count,question.follow_count,question.accepted_answer_id,question.last_answer_id,question.created_at,question.updated_at,question.post_update_time,question.revision_id") + session = session.Select("question.id,question.user_id,last_edit_user_id,question.title,question.original_text,question.parsed_text,question.status,question.view_count,question.unique_view_count,question.vote_count,question.answer_count,question.collection_count,question.follow_count,question.accepted_answer_id,question.last_answer_id,question.created_at,question.updated_at,question.post_update_time,question.revision_id") count, err = session.FindAndCount(&rows) if err != nil { err = errors.InternalServer(reason.DatabaseError).WithError(err).WithStack() diff --git a/internal/service/answer_service.go b/internal/service/answer_service.go index 26558c4b..8f688d4a 100644 --- a/internal/service/answer_service.go +++ b/internal/service/answer_service.go @@ -249,7 +249,7 @@ func (as *AnswerService) Update(ctx context.Context, req *schema.AnswerUpdateReq if !canUpdate { revisionDTO.Status = entity.RevisionUnreviewedStatus } else { - if err = as.answerRepo.UpdateAnswer(ctx, insertData, []string{"original_text", "parsed_text", "update_time"}); err != nil { + if err = as.answerRepo.UpdateAnswer(ctx, insertData, []string{"original_text", "parsed_text", "update_time", "last_edit_user_id"}); err != nil { return "", err } err = as.questionCommon.UpdataPostTime(ctx, req.QuestionID) @@ -370,13 +370,22 @@ func (as *AnswerService) Get(ctx context.Context, answerID, loginUserID string) return nil, nil, has, err } // todo UserFunc - userinfo, has, err := as.userCommon.GetUserBasicInfoByID(ctx, answerInfo.UserID) + + userIds := make([]string, 0) + userIds = append(userIds, answerInfo.UserID) + userIds = append(userIds, answerInfo.LastEditUserID) + userInfoMap, err := as.userCommon.BatchUserBasicInfoByID(ctx, userIds) if err != nil { return nil, nil, has, err } - if has { - info.UserInfo = userinfo - info.UpdateUserInfo = userinfo + + _, ok := userInfoMap[answerInfo.UserID] + if ok { + info.UserInfo = userInfoMap[answerInfo.UserID] + } + _, ok = userInfoMap[answerInfo.LastEditUserID] + if ok { + info.UpdateUserInfo = userInfoMap[answerInfo.LastEditUserID] } if loginUserID == "" { @@ -389,7 +398,7 @@ func (as *AnswerService) Get(ctx context.Context, answerID, loginUserID string) if err != nil { log.Error("CollectionFunc.SearchObjectCollected error", err) } - _, ok := CollectedMap[answerInfo.ID] + _, ok = CollectedMap[answerInfo.ID] if ok { info.Collected = true } diff --git a/internal/service/question_common/question.go b/internal/service/question_common/question.go index 645d1148..045b979d 100644 --- a/internal/service/question_common/question.go +++ b/internal/service/question_common/question.go @@ -184,14 +184,26 @@ func (qs *QuestionCommon) Info(ctx context.Context, questionID string, loginUser } showinfo.Tags = tagmap - userinfo, has, err := qs.userCommon.GetUserBasicInfoByID(ctx, dbinfo.UserID) + userIds := make([]string, 0) + userIds = append(userIds, dbinfo.UserID) + userIds = append(userIds, dbinfo.LastEditUserID) + userIds = append(userIds, showinfo.LastAnsweredUserID) + userInfoMap, err := qs.userCommon.BatchUserBasicInfoByID(ctx, userIds) if err != nil { return showinfo, err } - if has { - showinfo.UserInfo = userinfo - showinfo.UpdateUserInfo = userinfo - showinfo.LastAnsweredUserInfo = userinfo + + _, ok := userInfoMap[dbinfo.UserID] + if ok { + showinfo.UserInfo = userInfoMap[dbinfo.UserID] + } + _, ok = userInfoMap[dbinfo.LastEditUserID] + if ok { + showinfo.UpdateUserInfo = userInfoMap[dbinfo.LastEditUserID] + } + _, ok = userInfoMap[showinfo.LastAnsweredUserID] + if ok { + showinfo.LastAnsweredUserInfo = userInfoMap[showinfo.LastAnsweredUserID] } if loginUserID == "" { @@ -216,7 +228,7 @@ func (qs *QuestionCommon) Info(ctx context.Context, questionID string, loginUser if err != nil { log.Error("CollectionFunc.SearchObjectCollected", err) } - _, ok := CollectedMap[dbinfo.ID] + _, ok = CollectedMap[dbinfo.ID] if ok { showinfo.Collected = true } @@ -233,10 +245,9 @@ func (qs *QuestionCommon) ListFormat(ctx context.Context, questionList []*entity item := qs.ShowListFormat(ctx, questionInfo) list = append(list, item) objectIds = append(objectIds, item.ID) - userIds = append(userIds, questionInfo.UserID) - userIds = append(userIds, questionInfo.LastEditUserID) + userIds = append(userIds, item.UserID) + userIds = append(userIds, item.LastEditUserID) userIds = append(userIds, item.LastAnsweredUserID) - } tagsMap, err := qs.tagCommon.BatchGetObjectTag(ctx, objectIds) if err != nil { @@ -256,11 +267,10 @@ func (qs *QuestionCommon) ListFormat(ctx context.Context, questionList []*entity _, ok = userInfoMap[item.UserID] if ok { item.UserInfo = userInfoMap[item.UserID] - item.UpdateUserInfo = userInfoMap[item.UserID] } _, ok = userInfoMap[item.LastEditUserID] if ok { - item.UpdateUserInfo = userInfoMap[item.UserID] + item.UpdateUserInfo = userInfoMap[item.LastEditUserID] } _, ok = userInfoMap[item.LastAnsweredUserID] if ok {