예제 #1
0
        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, "回答失败");
        }
예제 #2
0
        /// <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, "提交失败,请重试"));
        }
예제 #3
0
        /// <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}失败"));
        }
예제 #4
0
        /// <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, "请求失败"));
        }
예제 #5
0
        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));
        }
예제 #6
0
        /// <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, "回答失败");
        }
예제 #7
0
        /// <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, "操作失败"));
        }
예제 #8
0
        /// <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, "退回失败"));
        }