MCPcopy Index your code
hub / github.com/apache/answer / AddQuestion

Method AddQuestion

internal/service/content/question_service.go:307–469  ·  view source on GitHub ↗

AddQuestion add question

(ctx context.Context, req *schema.QuestionAdd)

Source from the content-addressed store, hash-verified

305
306// AddQuestion add question
307func (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",

Callers

nothing calls this directly

Calls 15

AddQuestionCheckTagsMethod · 0.95
ChangeTagMethod · 0.95
GetQuestionMethod · 0.95
TrFunction · 0.92
GetLangByCtxFunction · 0.92
NewEventFunction · 0.92
GetMinimumTagsMethod · 0.80
ExistRecommendMethod · 0.80
AddQuestionReviewMethod · 0.80

Tested by

no test coverage detected