@@ -325,65 +325,55 @@ func (as *AnswerService) Update(ctx context.Context, req *schema.AnswerUpdateReq
325325 return insertData .ID , nil
326326}
327327
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-
328+ // AcceptAnswer accept answer
329+ func (as * AnswerService ) AcceptAnswer (ctx context.Context , req * schema.AcceptAnswerReq ) (err error ) {
330+ // find question
352331 questionInfo , exist , err := as .questionRepo .GetQuestion (ctx , req .QuestionID )
353332 if err != nil {
354333 return err
355334 }
356- questionInfo .ID = uid .DeShortID (questionInfo .ID )
357335 if ! exist {
358336 return errors .BadRequest (reason .QuestionNotFound )
359337 }
360- // if questionInfo.UserID != req.UserID {
361- // return fmt.Errorf("no permission to set answer")
362- // }
338+ questionInfo .ID = uid .DeShortID (questionInfo .ID )
363339 if questionInfo .AcceptedAnswerID == req .AnswerID {
364340 return nil
365341 }
366342
367- var oldAnswerInfo * entity.Answer
368- if len (questionInfo .AcceptedAnswerID ) > 0 && questionInfo .AcceptedAnswerID != "0" {
369- oldAnswerInfo , _ , err = as .answerRepo .GetByID (ctx , questionInfo .AcceptedAnswerID )
343+ // find answer
344+ var acceptedAnswerInfo * entity.Answer
345+ if len (req .AnswerID ) > 1 {
346+ acceptedAnswerInfo , exist , err = as .answerRepo .GetByID (ctx , req .AnswerID )
370347 if err != nil {
371348 return err
372349 }
373- oldAnswerInfo .ID = uid .DeShortID (oldAnswerInfo .ID )
350+ if ! exist {
351+ return errors .BadRequest (reason .AnswerNotFound )
352+ }
353+ acceptedAnswerInfo .ID = uid .DeShortID (acceptedAnswerInfo .ID )
374354 }
375355
376- err = as . answerRepo . UpdateAccepted ( ctx , req . AnswerID , req . QuestionID )
377- if err != nil {
356+ // update answers status
357+ if err = as . answerRepo . UpdateAcceptedStatus ( ctx , req . AnswerID , req . QuestionID ); err != nil {
378358 return err
379359 }
380360
361+ // update question status
381362 err = as .questionCommon .UpdateAccepted (ctx , req .QuestionID , req .AnswerID )
382363 if err != nil {
383364 log .Error ("UpdateLastAnswer error" , err .Error ())
384365 }
385366
386- as .updateAnswerRank (ctx , req .UserID , questionInfo , newAnswerInfo , oldAnswerInfo )
367+ var oldAnswerInfo * entity.Answer
368+ if len (questionInfo .AcceptedAnswerID ) > 1 {
369+ oldAnswerInfo , _ , err = as .answerRepo .GetByID (ctx , questionInfo .AcceptedAnswerID )
370+ if err != nil {
371+ return err
372+ }
373+ oldAnswerInfo .ID = uid .DeShortID (oldAnswerInfo .ID )
374+ }
375+
376+ as .updateAnswerRank (ctx , req .UserID , questionInfo , acceptedAnswerInfo , oldAnswerInfo )
387377 return nil
388378}
389379
@@ -398,9 +388,9 @@ func (as *AnswerService) updateAnswerRank(ctx context.Context, userID string,
398388 log .Error (err )
399389 }
400390 }
401- if newAnswerInfo . ID != "" {
391+ if newAnswerInfo != nil {
402392 err := as .answerActivityService .AcceptAnswer (ctx , userID , newAnswerInfo .ID ,
403- questionInfo .ID , questionInfo .UserID , newAnswerInfo .UserID , newAnswerInfo .UserID == userID )
393+ questionInfo .ID , questionInfo .UserID , newAnswerInfo .UserID , newAnswerInfo .UserID == questionInfo . UserID )
404394 if err != nil {
405395 log .Error (err )
406396 }
0 commit comments