MCPcopy
hub / github.com/apache/answer / UpdateAnswer

Method UpdateAnswer

internal/controller/answer_controller.go:306–358  ·  view source on GitHub ↗

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)

Source from the content-addressed store, hash-verified

304// @Success 200 {object} handler.RespBody{}
305// @Router /answer/api/v1/answer [put]
306func (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

Callers

nothing calls this directly

Calls 12

BindAndCheckFunction · 0.92
HandleResponseFunction · 0.92
GetUserIsAdminModeratorFunction · 0.92
TrFunction · 0.92
GetLangByCtxFunction · 0.92
UpdateMethod · 0.80
ActionRecordAddMethod · 0.80
GetMethod · 0.45

Tested by

no test coverage detected