RemoveAnswer delete answer @Summary delete answer @Description delete answer @Tags Answer @Accept json @Produce json @Security ApiKeyAuth @Param data body schema.RemoveAnswerReq true "answer" @Success 200 {object} handler.RespBody @Router /answer/api/v1/answer [delete]
(ctx *gin.Context)
| 77 | // @Success 200 {object} handler.RespBody |
| 78 | // @Router /answer/api/v1/answer [delete] |
| 79 | func (ac *AnswerController) RemoveAnswer(ctx *gin.Context) { |
| 80 | req := &schema.RemoveAnswerReq{} |
| 81 | if handler.BindAndCheck(ctx, req) { |
| 82 | return |
| 83 | } |
| 84 | req.ID = uid.DeShortID(req.ID) |
| 85 | req.UserID = middleware.GetLoginUserIDFromContext(ctx) |
| 86 | isAdmin := middleware.GetUserIsAdminModerator(ctx) |
| 87 | if !isAdmin { |
| 88 | captchaPass := ac.actionService.ActionRecordVerifyCaptcha(ctx, entity.CaptchaActionDelete, req.UserID, req.CaptchaID, req.CaptchaCode) |
| 89 | if !captchaPass { |
| 90 | errFields := append([]*validator.FormErrorField{}, &validator.FormErrorField{ |
| 91 | ErrorField: "captcha_code", |
| 92 | ErrorMsg: translator.Tr(handler.GetLangByCtx(ctx), reason.CaptchaVerificationFailed), |
| 93 | }) |
| 94 | handler.HandleResponse(ctx, errors.BadRequest(reason.CaptchaVerificationFailed), errFields) |
| 95 | return |
| 96 | } |
| 97 | } |
| 98 | |
| 99 | objectOwner := ac.rankService.CheckOperationObjectOwner(ctx, req.UserID, req.ID) |
| 100 | canList, err := ac.rankService.CheckOperationPermissions(ctx, req.UserID, []string{ |
| 101 | permission.AnswerDelete, |
| 102 | }) |
| 103 | if err != nil { |
| 104 | handler.HandleResponse(ctx, err, nil) |
| 105 | return |
| 106 | } |
| 107 | req.CanDelete = canList[0] || objectOwner |
| 108 | if !req.CanDelete { |
| 109 | handler.HandleResponse(ctx, errors.Forbidden(reason.RankFailToMeetTheCondition), nil) |
| 110 | return |
| 111 | } |
| 112 | |
| 113 | err = ac.answerService.RemoveAnswer(ctx, req) |
| 114 | if !isAdmin { |
| 115 | ac.actionService.ActionRecordAdd(ctx, entity.CaptchaActionDelete, req.UserID) |
| 116 | } |
| 117 | handler.HandleResponse(ctx, err, nil) |
| 118 | } |
| 119 | |
| 120 | // RecoverAnswer recover answer |
| 121 | // @Summary recover answer |
nothing calls this directly
no test coverage detected