AddQuestion add question
(ctx context.Context, req *schema.QuestionAdd)
| 305 | |
| 306 | // AddQuestion add question |
| 307 | func (qs *QuestionService) AddQuestion(ctx context.Context, req *schema.QuestionAdd) (questionInfo any, err error) { |
| 308 | minimumTags, err := qs.tagCommon.GetMinimumTags(ctx) |
| 309 | if err != nil { |
| 310 | return |
| 311 | } |
| 312 | if len(req.Tags) < minimumTags { |
| 313 | errorlist := make([]*validator.FormErrorField, 0) |
| 314 | errorlist = append(errorlist, &validator.FormErrorField{ |
| 315 | ErrorField: "tags", |
| 316 | ErrorMsg: translator.Tr(handler.GetLangByCtx(ctx), reason.TagMinCount), |
| 317 | }) |
| 318 | err = errors.BadRequest(reason.TagMinCount) |
| 319 | return errorlist, err |
| 320 | } |
| 321 | minimumContentLength, err := qs.questioncommon.GetMinimumContentLength(ctx) |
| 322 | if err != nil { |
| 323 | return |
| 324 | } |
| 325 | if len(req.Content) < minimumContentLength { |
| 326 | errorlist := make([]*validator.FormErrorField, 0) |
| 327 | errorlist = append(errorlist, &validator.FormErrorField{ |
| 328 | ErrorField: "content", |
| 329 | ErrorMsg: translator.Tr(handler.GetLangByCtx(ctx), reason.QuestionContentLessThanMinimum), |
| 330 | }) |
| 331 | err = errors.BadRequest(reason.QuestionContentLessThanMinimum) |
| 332 | return errorlist, err |
| 333 | } |
| 334 | recommendExist, err := qs.tagCommon.ExistRecommend(ctx, req.Tags) |
| 335 | if err != nil { |
| 336 | return |
| 337 | } |
| 338 | if !recommendExist { |
| 339 | errorlist := make([]*validator.FormErrorField, 0) |
| 340 | errorlist = append(errorlist, &validator.FormErrorField{ |
| 341 | ErrorField: "tags", |
| 342 | ErrorMsg: translator.Tr(handler.GetLangByCtx(ctx), reason.RecommendTagEnter), |
| 343 | }) |
| 344 | err = errors.BadRequest(reason.RecommendTagEnter) |
| 345 | return errorlist, err |
| 346 | } |
| 347 | |
| 348 | tagNameList := make([]string, 0) |
| 349 | for _, tag := range req.Tags { |
| 350 | tag.SlugName = strings.ReplaceAll(tag.SlugName, " ", "-") |
| 351 | tagNameList = append(tagNameList, tag.SlugName) |
| 352 | } |
| 353 | tags, tagerr := qs.tagCommon.GetTagListByNames(ctx, tagNameList) |
| 354 | if tagerr != nil { |
| 355 | return questionInfo, tagerr |
| 356 | } |
| 357 | if !req.CanUseReservedTag { |
| 358 | taglist, err := qs.AddQuestionCheckTags(ctx, tags) |
| 359 | errMsg := fmt.Sprintf(`"%s" can only be used by moderators.`, |
| 360 | strings.Join(taglist, ",")) |
| 361 | if err != nil { |
| 362 | errorlist := make([]*validator.FormErrorField, 0) |
| 363 | errorlist = append(errorlist, &validator.FormErrorField{ |
| 364 | ErrorField: "tags", |
nothing calls this directly
no test coverage detected