UpdateAnswer update answer @Summary Update Answer @Description Update Answer @Tags Answer @Accept json @Produce json @Security ApiKeyAuth @Param data body schema.AnswerUpdateReq true "AnswerUpdateReq" @Success 200 {object} handler.RespBody{} @Router /answer/api/v1/answer [put]
(ctx *gin.Context)
| 304 | // @Success 200 {object} handler.RespBody{} |
| 305 | // @Router /answer/api/v1/answer [put] |
| 306 | func (ac *AnswerController) UpdateAnswer(ctx *gin.Context) { |
| 307 | req := &schema.AnswerUpdateReq{} |
| 308 | if handler.BindAndCheck(ctx, req) { |
| 309 | return |
| 310 | } |
| 311 | req.UserID = middleware.GetLoginUserIDFromContext(ctx) |
| 312 | |
| 313 | canList, err := ac.rankService.CheckOperationPermissions(ctx, req.UserID, []string{ |
| 314 | permission.AnswerEdit, |
| 315 | permission.AnswerEditWithoutReview, |
| 316 | permission.LinkUrlLimit, |
| 317 | }) |
| 318 | if err != nil { |
| 319 | handler.HandleResponse(ctx, err, nil) |
| 320 | return |
| 321 | } |
| 322 | linkUrlLimitUser := canList[2] |
| 323 | isAdmin := middleware.GetUserIsAdminModerator(ctx) |
| 324 | if !isAdmin || !linkUrlLimitUser { |
| 325 | captchaPass := ac.actionService.ActionRecordVerifyCaptcha(ctx, entity.CaptchaActionEdit, req.UserID, req.CaptchaID, req.CaptchaCode) |
| 326 | if !captchaPass { |
| 327 | errFields := append([]*validator.FormErrorField{}, &validator.FormErrorField{ |
| 328 | ErrorField: "captcha_code", |
| 329 | ErrorMsg: translator.Tr(handler.GetLangByCtx(ctx), reason.CaptchaVerificationFailed), |
| 330 | }) |
| 331 | handler.HandleResponse(ctx, errors.BadRequest(reason.CaptchaVerificationFailed), errFields) |
| 332 | return |
| 333 | } |
| 334 | } |
| 335 | |
| 336 | objectOwner := ac.rankService.CheckOperationObjectOwner(ctx, req.UserID, req.ID) |
| 337 | req.CanEdit = canList[0] || objectOwner |
| 338 | req.NoNeedReview = canList[1] || objectOwner |
| 339 | if !req.CanEdit { |
| 340 | handler.HandleResponse(ctx, errors.Forbidden(reason.RankFailToMeetTheCondition), nil) |
| 341 | return |
| 342 | } |
| 343 | |
| 344 | _, err = ac.answerService.Update(ctx, req) |
| 345 | if err != nil { |
| 346 | handler.HandleResponse(ctx, err, nil) |
| 347 | return |
| 348 | } |
| 349 | if !isAdmin || !linkUrlLimitUser { |
| 350 | ac.actionService.ActionRecordAdd(ctx, entity.CaptchaActionEdit, req.UserID) |
| 351 | } |
| 352 | _, _, _, err = ac.answerService.Get(ctx, req.ID, req.UserID, isAdmin) |
| 353 | if err != nil { |
| 354 | handler.HandleResponse(ctx, err, nil) |
| 355 | return |
| 356 | } |
| 357 | handler.HandleResponse(ctx, nil, &schema.AnswerUpdateResp{WaitForReview: !req.NoNeedReview}) |
| 358 | } |
| 359 | |
| 360 | // AnswerList godoc |
| 361 | // @Summary AnswerList |
nothing calls this directly
no test coverage detected