internal async Task <(bool, string)> NewAnswerAsync(int questionId, string content, string nickName) { // 匿名的要审核 if (string.IsNullOrWhiteSpace(nickName)) { nickName = "匿名"; } if (string.IsNullOrWhiteSpace(content)) { return(false, "回答内容不能为空"); } using var db = new YGBContext(); DB.Tables.Answer answer = new DB.Tables.Answer { QuestionId = questionId, Content = content, NickName = nickName, State = (int)Answer.AnswerState.ToAudit }; db.Answers.Add(answer); if (await db.SaveChangesAsync() == 1) { return(true, ""); } return(false, "回答失败"); }
/// <summary> /// 修改完答案后提交去审核 /// </summary> /// <param name="content"></param> /// <returns></returns> public async Task <Resp> ToAudit(string content) { using YGBContext db = new YGBContext(); DB.Tables.Answer answer = await db.Answers.FirstOrDefaultAsync(a => a.Id == Id); if (answer is null) { return(Resp.Fault(Resp.NONE, NOT_EXIST_ANSWER)); } if (answer.Content == content) { return(Resp.Fault(Resp.NONE, "内容未修改")); } answer.Content = content; answer.State = (int)AnswerState.ToAudit; int changeCount = await db.SaveChangesAsync(); if (changeCount == 1) { return(Resp.Success(Resp.NONE, "提交成功,待审核")); } return(Resp.Success(Resp.NONE, "提交失败,请重试")); }
/// <summary> /// 通过一个答案 /// </summary> /// <returns></returns> public async Task <Resp> EnabledAsync() { using var db = new YGBContext(); DB.Tables.Answer answer = await db.Answers.FirstOrDefaultAsync(a => a.Id == Id); if (answer is null) { return(Resp.Fault(Resp.NONE, NOT_EXIST_ANSWER)); } int stateId = (int)Answer.StandardStates.Enabled; string description = Answer.StandardStates.Enabled.GetDescription(); if (answer.State == stateId) { return(Resp.Fault(Resp.NONE, $"已经是{description}的状态,不能再次{description}")); } answer.State = stateId; int changeCount = await db.SaveChangesAsync(); if (changeCount == 1) { return(Resp.Success(Resp.NONE, $"{description}成功")); } return(Resp.Fault(Resp.NONE, $"{description}失败")); }
/// <summary> /// 不同意回答 /// </summary> /// <returns></returns> public async Task <Resp> UnLikeAsync() { using YGBContext db = new YGBContext(); DB.Tables.Answer answer = await db.Answers.FirstOrDefaultAsync(a => a.Id == Id); if (answer is null) { return(Resp.Fault(Resp.NONE, NOT_EXIST_ANSWER)); } answer.Votes--; if (await db.SaveChangesAsync() == 1) { return(Resp.Success(Resp.NONE)); } return(Resp.Fault(Resp.NONE, "请求失败")); }
public async Task <Resp> GetAnswerDetailAsync(int answerId) { await using var db = new YGBContext(); DB.Tables.Answer answer = await db.Answers.AsNoTracking() .Where(a => a.Id == answerId) .Include(a => a.Question) .ThenInclude(q => q.Asker) .ThenInclude(asker => asker.Avatar) .Include(a => a.Answerer) .ThenInclude(user => user.Avatar) .FirstOrDefaultAsync(); if (answer is null) { return(Resp.Fault(Resp.NONE, "答案不存在")); } Results.AnswerDetailForClient detail = new Results.AnswerDetailForClient { Id = answerId, QuestionTitle = answer.Question.Title, QuestionContent = answer.Question.Description, Tags = answer.Question.Tags.Split(',', ','), AnswerContent = answer.Content, State = Share.KeyValue <int, string> .Create(answer.State, answer.State.GetDescription <Answer.AnswerState>()), CreateDate = answer.CreateDate.ToStandardDateString(), AnswererUser = new Clients.Results.UserIntro { Id = answer.Answerer.Id, Account = answer.Answerer.Name, Avatar = answer.Answerer.Avatar.Thumbnail }, AskerUser = new Clients.Results.UserIntro { Id = answer.Question.Asker.Id, Account = answer.Question.Asker.Name, Avatar = answer.Question.Asker.Avatar.Thumbnail } }; return(Resp.Success(detail)); }
/// <summary> /// 新回答 /// </summary> /// <param name="questionId"></param> /// <param name="content"></param> /// <param name="answererId"></param> /// <returns></returns> internal async Task <(bool, string)> NewAnswerAsync(int questionId, string content, int answererId) { if (string.IsNullOrWhiteSpace(content)) { return(false, "回答内容不能为空"); } using var db = new YGBContext(); DB.Tables.Answer answer = new DB.Tables.Answer { QuestionId = questionId, Content = content, AnswererId = answererId, State = (int)Answer.StandardStates.Enabled }; db.Answers.Add(answer); if (await db.SaveChangesAsync() == 1) { return(true, ""); } return(false, "回答失败"); }
/// <summary> /// 举报这个回答 /// </summary> /// <returns></returns> public async Task <Resp> ReportAsync(string content, string description) { /* * 举报这个回答,变成待审核状态 * 添加一条回答举报记录 */ if (string.IsNullOrWhiteSpace(content)) { return(Resp.Fault(Resp.NONE, "请填写举报原因")); } CheckEmpty(); using var db = new YGBContext(); DB.Tables.Answer answer = await db.Answers.FirstOrDefaultAsync(q => q.Id == Id); if (answer is null) { return(Resp.Fault(Resp.NONE, NOT_EXIST_ANSWER)); } if (answer.State != (int)AnswerState.ToAudit) { answer.State = (int)AnswerState.ToAudit; } DB.Tables.AnswerReportRecord record = new DB.Tables.AnswerReportRecord { AnswerId = Id, Content = content, Description = description ?? "" }; db.AnswerReportRecords.Add(record); if (await db.SaveChangesAsync() > 0) { return(Resp.Success(Resp.NONE)); } return(Resp.Fault(Resp.NONE, "操作失败")); }
/// <summary> /// 退回一个答案 /// </summary> /// <param name="description">退回理由</param> /// <returns></returns> public async Task <Resp> BackAsync(string description) { if (string.IsNullOrWhiteSpace(description)) { return(Resp.Fault(Resp.NONE, "需要填写退回原因")); } using YGBContext db = new YGBContext(); DB.Tables.Answer answer = await db.Answers.FirstOrDefaultAsync(a => a.Id == Id); if (answer is null) { return(Resp.Fault(Resp.NONE, NOT_EXIST_ANSWER)); } if (answer.State == (int)AnswerState.ToAudit || answer.State == (int)Answer.StandardStates.Disabled) { return(Resp.Fault(Resp.NONE, $"已经是{((AnswerState)answer.State).GetDescription()}的状态,不能再次退回")); } DB.Tables.AnswerBackRecord record = new DB.Tables.AnswerBackRecord { AnswerId = answer.Id, Description = description, }; answer.State = (int)AnswerState.ToAudit; db.AnswerBackRecords.Add(record); int changeCount = await db.SaveChangesAsync(); if (changeCount == 2) { return(Resp.Success(Resp.NONE, "退回成功")); } return(Resp.Fault(Resp.NONE, "退回失败")); }