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

Method Insert

internal/service/content/answer_service.go:253–348  ·  view source on GitHub ↗
(ctx context.Context, req *schema.AnswerAddReq)

Source from the content-addressed store, hash-verified

251}
252
253func (as *AnswerService) Insert(ctx context.Context, req *schema.AnswerAddReq) (string, error) {
254 questionInfo, exist, err := as.questionRepo.GetQuestion(ctx, req.QuestionID)
255 if err != nil {
256 return "", err
257 }
258 if !exist {
259 return "", errors.BadRequest(reason.QuestionNotFound)
260 }
261 if questionInfo.Status == entity.QuestionStatusClosed || questionInfo.Status == entity.QuestionStatusDeleted {
262 err = errors.BadRequest(reason.AnswerCannotAddByClosedQuestion)
263 return "", err
264 }
265 insertData := &entity.Answer{}
266 insertData.UserID = req.UserID
267 insertData.OriginalText = req.Content
268 insertData.ParsedText = req.HTML
269 insertData.Accepted = schema.AnswerAcceptedFailed
270 insertData.QuestionID = req.QuestionID
271 insertData.RevisionID = "0"
272 insertData.LastEditUserID = "0"
273 insertData.Status = entity.AnswerStatusPending
274 // insertData.UpdatedAt = now
275 if err = as.answerRepo.AddAnswer(ctx, insertData); err != nil {
276 return "", err
277 }
278 insertData.Status = as.reviewService.AddAnswerReview(ctx, insertData, req.IP, req.UserAgent)
279 if err := as.answerRepo.UpdateAnswerStatus(ctx, insertData.ID, insertData.Status); err != nil {
280 return "", err
281 }
282 if insertData.Status == entity.AnswerStatusAvailable {
283 insertData.ParsedText, err = as.questionCommon.UpdateQuestionLink(ctx, insertData.QuestionID, insertData.ID, insertData.ParsedText, insertData.OriginalText)
284 if err != nil {
285 return "", err
286 }
287 if err = as.answerRepo.UpdateAnswer(ctx, insertData, []string{"parsed_text"}); err != nil {
288 return "", err
289 }
290 }
291 err = as.questionCommon.UpdateAnswerCount(ctx, req.QuestionID)
292 if err != nil {
293 log.Error("IncreaseAnswerCount error", err.Error())
294 }
295 err = as.questionCommon.UpdateLastAnswer(ctx, req.QuestionID, uid.DeShortID(insertData.ID))
296 if err != nil {
297 log.Error("UpdateLastAnswer error", err.Error())
298 }
299 err = as.questionCommon.UpdatePostTime(ctx, req.QuestionID)
300 if err != nil {
301 return insertData.ID, err
302 }
303 userAnswerCount, err := as.answerRepo.GetCountByUserID(ctx, req.UserID)
304 if err != nil {
305 log.Error("GetCountByUserID error", err.Error())
306 }
307 err = as.userCommon.UpdateAnswerCount(ctx, req.UserID, int(userAnswerCount))
308 if err != nil {
309 log.Error("user IncreaseAnswerCount error", err.Error())
310 }

Callers 15

SetMethod · 0.80
AddQuestionByAnswerMethod · 0.80
AddAnswerMethod · 0.80
SaveByTypeMethod · 0.80
CreateConversationMethod · 0.80
CreateRecordMethod · 0.80
AddNotificationMethod · 0.80
AddCollectionMethod · 0.80
AddCollectionGroupMethod · 0.80

Calls 15

DeShortIDFunction · 0.92
FetchExcerptFunction · 0.92
NewEventFunction · 0.92
AddAnswerReviewMethod · 0.80
UpdateQuestionLinkMethod · 0.80
UpdatePostTimeMethod · 0.80
AIDMethod · 0.80
TIDMethod · 0.80
GetQuestionMethod · 0.65
AddAnswerMethod · 0.65
UpdateAnswerStatusMethod · 0.65

Tested by

no test coverage detected