Skip to content

Commit 2641d3e

Browse files
committed
Merge branch 'fix/1.1.3/qa' into test
2 parents e622c0b + 79b71d4 commit 2641d3e

6 files changed

Lines changed: 63 additions & 74 deletions

File tree

internal/controller/answer_controller.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -319,11 +319,11 @@ func (ac *AnswerController) AnswerList(ctx *gin.Context) {
319319
// @Accept json
320320
// @Produce json
321321
// @Security ApiKeyAuth
322-
// @Param data body schema.AnswerAcceptedReq true "AnswerAcceptedReq"
322+
// @Param data body schema.AcceptAnswerReq true "AcceptAnswerReq"
323323
// @Success 200 {string} string ""
324324
// @Router /answer/api/v1/answer/acceptance [post]
325325
func (ac *AnswerController) Accepted(ctx *gin.Context) {
326-
req := &schema.AnswerAcceptedReq{}
326+
req := &schema.AcceptAnswerReq{}
327327
if handler.BindAndCheck(ctx, req) {
328328
return
329329
}
@@ -341,7 +341,7 @@ func (ac *AnswerController) Accepted(ctx *gin.Context) {
341341
return
342342
}
343343

344-
err = ac.answerService.UpdateAccepted(ctx, req)
344+
err = ac.answerService.AcceptAnswer(ctx, req)
345345
handler.HandleResponse(ctx, err, nil)
346346
}
347347

internal/repo/activity/answer_repo.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,6 @@ func (ar *AnswerActivityRepo) SaveAcceptAnswerActivity(ctx context.Context, op *
5555
return nil
5656
}
5757

58-
ar.data.DB.ShowSQL(true)
5958
// save activity
6059
_, err = ar.data.DB.Transaction(func(session *xorm.Session) (result any, err error) {
6160
session = session.Context(ctx)
@@ -331,7 +330,7 @@ func (ar *AnswerActivityRepo) sendAcceptAnswerNotification(
331330
ObjectID: op.AnswerObjectID,
332331
}
333332
if act.ActivityUserID != op.QuestionUserID {
334-
msg.TriggerUserID = op.QuestionUserID
333+
msg.TriggerUserID = op.TriggerUserID
335334
msg.ObjectType = constant.AnswerObjectType
336335
msg.NotificationAction = constant.NotificationAcceptAnswer
337336
ar.notificationQueueService.Send(ctx, msg)

internal/repo/answer/answer_repo.go

Lines changed: 15 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -166,30 +166,29 @@ func (ar *answerRepo) GetAnswerPage(ctx context.Context, page, pageSize int, ans
166166
return
167167
}
168168

169-
// UpdateAccepted
170-
// If no answer is selected, the answer id can be 0
171-
func (ar *answerRepo) UpdateAccepted(ctx context.Context, id string, questionID string) error {
172-
if questionID == "" {
173-
return nil
174-
}
175-
id = uid.DeShortID(id)
169+
// UpdateAcceptedStatus update all accepted status of this question's answers
170+
func (ar *answerRepo) UpdateAcceptedStatus(ctx context.Context, acceptedAnswerID string, questionID string) error {
171+
acceptedAnswerID = uid.DeShortID(acceptedAnswerID)
176172
questionID = uid.DeShortID(questionID)
177-
var data entity.Answer
178-
data.ID = id
179173

180-
data.Accepted = schema.AnswerAcceptedFailed
181-
_, err := ar.data.DB.Context(ctx).Where("question_id =?", questionID).Cols("adopted").Update(&data)
174+
// update all this question's answer accepted status to false
175+
_, err := ar.data.DB.Context(ctx).Where("question_id = ?", questionID).Cols("adopted").Update(&entity.Answer{
176+
Accepted: schema.AnswerAcceptedFailed,
177+
})
182178
if err != nil {
183-
return err
179+
return errors.InternalServer(reason.DatabaseError).WithError(err).WithStack()
184180
}
185-
if id != "0" {
186-
data.Accepted = schema.AnswerAcceptedEnable
187-
_, err = ar.data.DB.Context(ctx).Where("id = ?", id).Cols("adopted").Update(&data)
181+
182+
// if acceptedAnswerID is not empty, update accepted status to true
183+
if len(acceptedAnswerID) > 0 && acceptedAnswerID != "0" {
184+
_, err = ar.data.DB.Context(ctx).Where("id = ?", acceptedAnswerID).Cols("adopted").Update(&entity.Answer{
185+
Accepted: schema.AnswerAcceptedEnable,
186+
})
188187
if err != nil {
189188
return errors.InternalServer(reason.DatabaseError).WithError(err).WithStack()
190189
}
191190
}
192-
_ = ar.updateSearch(ctx, id)
191+
_ = ar.updateSearch(ctx, acceptedAnswerID)
193192
return nil
194193
}
195194

internal/schema/answer_schema.go

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -108,12 +108,19 @@ type AdminAnswerInfo struct {
108108
} `json:"question_info"`
109109
}
110110

111-
type AnswerAcceptedReq struct {
112-
QuestionID string `json:"question_id"`
113-
AnswerID string `json:"answer_id"`
111+
type AcceptAnswerReq struct {
112+
QuestionID string `validate:"required,gt=0,lte=30" json:"question_id"`
113+
AnswerID string `validate:"omitempty" json:"answer_id"`
114114
UserID string `json:"-"`
115115
}
116116

117+
func (req *AcceptAnswerReq) Check() (errFields []*validator.FormErrorField, err error) {
118+
if len(req.AnswerID) == 0 {
119+
req.AnswerID = "0"
120+
}
121+
return nil, nil
122+
}
123+
117124
type AdminSetAnswerStatusRequest struct {
118125
StatusStr string `json:"status"`
119126
AnswerID string `json:"answer_id"`

internal/service/answer_common/answer.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ type AnswerRepo interface {
1717
GetAnswer(ctx context.Context, id string) (answer *entity.Answer, exist bool, err error)
1818
GetAnswerList(ctx context.Context, answer *entity.Answer) (answerList []*entity.Answer, err error)
1919
GetAnswerPage(ctx context.Context, page, pageSize int, answer *entity.Answer) (answerList []*entity.Answer, total int64, err error)
20-
UpdateAccepted(ctx context.Context, id string, questionID string) error
20+
UpdateAcceptedStatus(ctx context.Context, acceptedAnswerID string, questionID string) error
2121
GetByID(ctx context.Context, id string) (*entity.Answer, bool, error)
2222
GetCountByQuestionID(ctx context.Context, questionID string) (int64, error)
2323
GetCountByUserID(ctx context.Context, userID string) (int64, error)

internal/service/answer_service.go

Lines changed: 33 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -230,15 +230,13 @@ func (as *AnswerService) Insert(ctx context.Context, req *schema.AnswerAddReq) (
230230
}
231231

232232
func (as *AnswerService) Update(ctx context.Context, req *schema.AnswerUpdateReq) (string, error) {
233-
//req.NoNeedReview //true 不需要审核
234233
var canUpdate bool
235234
_, existUnreviewed, err := as.revisionService.ExistUnreviewedByObjectID(ctx, req.ID)
236235
if err != nil {
237236
return "", err
238237
}
239238
if existUnreviewed {
240-
err = errors.BadRequest(reason.AnswerCannotUpdate)
241-
return "", err
239+
return "", errors.BadRequest(reason.AnswerCannotUpdate)
242240
}
243241

244242
questionInfo, exist, err := as.questionRepo.GetQuestion(ctx, req.QuestionID)
@@ -254,28 +252,25 @@ func (as *AnswerService) Update(ctx context.Context, req *schema.AnswerUpdateReq
254252
return "", err
255253
}
256254
if !exist {
257-
return "", nil
255+
return "", errors.BadRequest(reason.AnswerNotFound)
258256
}
259257

260258
if answerInfo.Status == entity.AnswerStatusDeleted {
261-
err = errors.BadRequest(reason.AnswerCannotUpdate)
262-
return "", err
259+
return "", errors.BadRequest(reason.AnswerCannotUpdate)
263260
}
264261

265262
//If the content is the same, ignore it
266263
if answerInfo.OriginalText == req.Content {
267264
return "", nil
268265
}
269266

270-
now := time.Now()
271-
insertData := new(entity.Answer)
267+
insertData := &entity.Answer{}
272268
insertData.ID = req.ID
273269
insertData.UserID = answerInfo.UserID
274270
insertData.QuestionID = req.QuestionID
275271
insertData.OriginalText = req.Content
276272
insertData.ParsedText = req.HTML
277-
insertData.UpdatedAt = now
278-
273+
insertData.UpdatedAt = time.Now()
279274
insertData.LastEditUserID = "0"
280275
if answerInfo.UserID != req.UserID {
281276
insertData.LastEditUserID = req.UserID
@@ -284,7 +279,6 @@ func (as *AnswerService) Update(ctx context.Context, req *schema.AnswerUpdateReq
284279
revisionDTO := &schema.AddRevisionDTO{
285280
UserID: req.UserID,
286281
ObjectID: req.ID,
287-
Title: "",
288282
Log: req.EditSummary,
289283
}
290284

@@ -314,7 +308,7 @@ func (as *AnswerService) Update(ctx context.Context, req *schema.AnswerUpdateReq
314308
}
315309
if canUpdate {
316310
as.activityQueueService.Send(ctx, &schema.ActivityMsg{
317-
UserID: insertData.UserID,
311+
UserID: req.UserID,
318312
ObjectID: insertData.ID,
319313
OriginalObjectID: insertData.ID,
320314
ActivityTypeKey: constant.ActAnswerEdited,
@@ -325,65 +319,55 @@ func (as *AnswerService) Update(ctx context.Context, req *schema.AnswerUpdateReq
325319
return insertData.ID, nil
326320
}
327321

328-
// UpdateAccepted
329-
func (as *AnswerService) UpdateAccepted(ctx context.Context, req *schema.AnswerAcceptedReq) error {
330-
if req.AnswerID == "" {
331-
req.AnswerID = "0"
332-
}
333-
if req.UserID == "" {
334-
return nil
335-
}
336-
337-
newAnswerInfo := &entity.Answer{}
338-
newAnswerInfoexist := false
339-
var err error
340-
341-
if req.AnswerID != "0" {
342-
newAnswerInfo, newAnswerInfoexist, err = as.answerRepo.GetByID(ctx, req.AnswerID)
343-
if err != nil {
344-
return err
345-
}
346-
newAnswerInfo.ID = uid.DeShortID(newAnswerInfo.ID)
347-
if !newAnswerInfoexist {
348-
return errors.BadRequest(reason.AnswerNotFound)
349-
}
350-
}
351-
322+
// AcceptAnswer accept answer
323+
func (as *AnswerService) AcceptAnswer(ctx context.Context, req *schema.AcceptAnswerReq) (err error) {
324+
// find question
352325
questionInfo, exist, err := as.questionRepo.GetQuestion(ctx, req.QuestionID)
353326
if err != nil {
354327
return err
355328
}
356-
questionInfo.ID = uid.DeShortID(questionInfo.ID)
357329
if !exist {
358330
return errors.BadRequest(reason.QuestionNotFound)
359331
}
360-
// if questionInfo.UserID != req.UserID {
361-
// return fmt.Errorf("no permission to set answer")
362-
// }
332+
questionInfo.ID = uid.DeShortID(questionInfo.ID)
363333
if questionInfo.AcceptedAnswerID == req.AnswerID {
364334
return nil
365335
}
366336

367-
var oldAnswerInfo *entity.Answer
368-
if len(questionInfo.AcceptedAnswerID) > 0 && questionInfo.AcceptedAnswerID != "0" {
369-
oldAnswerInfo, _, err = as.answerRepo.GetByID(ctx, questionInfo.AcceptedAnswerID)
337+
// find answer
338+
var acceptedAnswerInfo *entity.Answer
339+
if len(req.AnswerID) > 1 {
340+
acceptedAnswerInfo, exist, err = as.answerRepo.GetByID(ctx, req.AnswerID)
370341
if err != nil {
371342
return err
372343
}
373-
oldAnswerInfo.ID = uid.DeShortID(oldAnswerInfo.ID)
344+
if !exist {
345+
return errors.BadRequest(reason.AnswerNotFound)
346+
}
347+
acceptedAnswerInfo.ID = uid.DeShortID(acceptedAnswerInfo.ID)
374348
}
375349

376-
err = as.answerRepo.UpdateAccepted(ctx, req.AnswerID, req.QuestionID)
377-
if err != nil {
350+
// update answers status
351+
if err = as.answerRepo.UpdateAcceptedStatus(ctx, req.AnswerID, req.QuestionID); err != nil {
378352
return err
379353
}
380354

355+
// update question status
381356
err = as.questionCommon.UpdateAccepted(ctx, req.QuestionID, req.AnswerID)
382357
if err != nil {
383358
log.Error("UpdateLastAnswer error", err.Error())
384359
}
385360

386-
as.updateAnswerRank(ctx, req.UserID, questionInfo, newAnswerInfo, oldAnswerInfo)
361+
var oldAnswerInfo *entity.Answer
362+
if len(questionInfo.AcceptedAnswerID) > 1 {
363+
oldAnswerInfo, _, err = as.answerRepo.GetByID(ctx, questionInfo.AcceptedAnswerID)
364+
if err != nil {
365+
return err
366+
}
367+
oldAnswerInfo.ID = uid.DeShortID(oldAnswerInfo.ID)
368+
}
369+
370+
as.updateAnswerRank(ctx, req.UserID, questionInfo, acceptedAnswerInfo, oldAnswerInfo)
387371
return nil
388372
}
389373

@@ -398,9 +382,9 @@ func (as *AnswerService) updateAnswerRank(ctx context.Context, userID string,
398382
log.Error(err)
399383
}
400384
}
401-
if newAnswerInfo.ID != "" {
385+
if newAnswerInfo != nil {
402386
err := as.answerActivityService.AcceptAnswer(ctx, userID, newAnswerInfo.ID,
403-
questionInfo.ID, questionInfo.UserID, newAnswerInfo.UserID, newAnswerInfo.UserID == userID)
387+
questionInfo.ID, questionInfo.UserID, newAnswerInfo.UserID, newAnswerInfo.UserID == questionInfo.UserID)
404388
if err != nil {
405389
log.Error(err)
406390
}

0 commit comments

Comments
 (0)