/// <summary> /// 提一个问题,会返回新提问的 ID /// </summary> public async Task <Resp> AskQuestion(Models.PostQuestion questionParams) { (bool isValid, string msg) = questionParams.IsValid(); if (!isValid) { return(Resp.Fault(Resp.NONE, msg)); } DB.Tables.Question question = new DB.Tables.Question { Title = questionParams.Title, Description = questionParams.Description, Tags = string.Join(',', questionParams.Tags), State = (int)Question.QuestionState.Enabled, AskerId = questionParams.UserId }; if (questionParams.Tags.Length >= 0) { await new Tags.Hub().AddTagsAsync(questionParams.Tags); } await using YGBContext db = new YGBContext(); db.Add(question); if (await db.SaveChangesAsync() != 0) { return(Resp.Success(question.Id, "")); } return(Resp.Fault(Resp.NONE, "提交失败")); }
public async Task <Resp> EnabledAsync() { int enabledValue = (int)QuestionState.Enabled; string enabledDescription = QuestionState.Enabled.GetDescription(); using var db = new YGBContext(); DB.Tables.Question question = await db.Questions.FirstOrDefaultAsync(q => q.Id == Id); if (question is null) { return(Resp.Fault(Resp.NONE, QUESTION_NO_EXIST)); } if (question.State == enabledValue) { return(Resp.Fault(Resp.NONE, $"已经是{enabledDescription}的状态,不能再次{enabledDescription}")); } question.State = enabledValue; int changeCount = await db.SaveChangesAsync(); if (changeCount == 1) { return(Resp.Success(Resp.NONE)); } return(Resp.Fault(Resp.NONE, "修改失败")); }
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, "回答失败"); }
public async Task <Resp> GetListAsync(Paginator pager) { await using var db = new YGBContext(); Expression <Func <DB.Tables.Question, bool> > where = q => q.State == (int)Question.QuestionState.Enabled; pager.TotalRows = await db.Questions.CountAsync(where); pager.List = await db.Questions.AsNoTracking() .OrderByDescending(q => q.CreateDate) .Where(where) .Skip(pager.Skip) .Take(pager.Size) .Include(q => q.Answers) .Include(q => q.Asker) .ThenInclude(asker => asker.Avatar) .Select(q => new Results.QuentionItem_Client { Id = q.Id, Title = q.Title, Description = q.Description.Length > 20 ? q.Description.Substring(0, 20) + "..." : q.Description, CreateDate = q.CreateDate.ToStandardString(), VoteCounts = q.Votes, ViewCounts = q.Views, AnswerCounts = q.Answers.Count(a => a.State == (int)Answers.Answer.AnswerState.Enabled), Tags = q.Tags.SplitOfChar(','), AskerName = q.Asker.Name, AskerAvatar = q.Asker.Avatar.Thumbnail }) .ToListAsync(); return(Resp.Success(pager)); }
/// <summary> /// 回退提问 /// </summary> /// <param name="reason"></param> /// <param name="isClearReport">是否清除举报记录</param> /// <returns></returns> internal async Task <bool> BackQuestionAsync(string reason, bool isClearReport = false) { await using var db = new YGBContext(); DB.Tables.Question question = await db.Questions.FirstOrDefaultAsync(q => q.Id == Id); if (question is null) { return(false); } if (question.State == (int)QuestionState.Back) { return(false); } question.State = (int)QuestionState.Back; DB.Tables.QuestionBackRecord record = new DB.Tables.QuestionBackRecord { QuestionId = Id, Description = reason }; db.QuestionBackRecords.Add(record); int shouldChangeCount = 2; if (isClearReport) { var qrList = await db.QuestionReportRecords.AsNoTracking().Where(qr => qr.QuestionId == Id && !qr.IsHandled).ToListAsync(); db.QuestionReportRecords.RemoveRange(qrList); shouldChangeCount += qrList.Count; } int changeCount = await db.SaveChangesAsync(); return(changeCount == shouldChangeCount); }
/// <summary> /// 注册 /// </summary> public async Task <Resp> RegisterAsync(Models.RegisterInfo register) { (bool isValid, string msg) = register.IsValid(); if (!isValid) { return(Resp.Fault(Resp.NONE, msg)); } using var db = new YGBContext(); if (await db.Users.AnyAsync(u => u.Email.ToLower() == register.Email.ToLower())) { return(Resp.Fault(Resp.NONE, "该邮箱已被注册")); } DB.Tables.User newUser = new DB.Tables.User { Name = Guid.NewGuid().ToString(), Email = register.Email, Password = register.Password, AvatarId = File.DEFAULT_IMG_ID, Token = System.Guid.NewGuid(), State = (int)User.UserState.Enabled }; db.Users.Add(newUser); if (await db.SaveChangesAsync() == 1) { newUser.Name = $"未命名_{newUser.Id}"; await db.SaveChangesAsync(); return(Resp.Success(Resp.NONE)); } return(Resp.Fault(Resp.NONE, "注册失败,请重试")); }
/// <summary> /// 提交审核 /// </summary> public async Task <Resp> ToAudit(string description) { if (string.IsNullOrWhiteSpace(description)) { return(Resp.Fault(Resp.NONE, "提问内容不能为空")); } using var db = new YGBContext(); DB.Tables.Question question = await db.Questions.FirstOrDefaultAsync(q => q.Id == Id); if (question is null) { return(Resp.Fault(Resp.NONE, QUESTION_NO_EXIST)); } if (question.Description == description) { return(Resp.Fault(Resp.NONE, "提问内容未修改")); } question.State = (int)QuestionState.ToAudit; question.Description = description; if (await db.SaveChangesAsync() == 1) { return(Resp.Success(Resp.NONE)); } return(Resp.Fault(Resp.NONE, "提交失败")); }
/// <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> public async Task <Resp> ModifyAsync(string content) { if (string.IsNullOrWhiteSpace(content)) { return(Resp.Fault(Resp.NONE, "答案不能为空")); } await using var db = new YGBContext(); var answer = await db.Answers.FirstOrDefaultAsync(a => a.Id == Id); if (answer is null) { return(Resp.Fault(Resp.NONE, "该答案不存在")); } if (answer.Content == content) { return(Resp.Fault(Resp.NONE, "您还没有进行修改")); } answer.Content = content; int changeCount = await db.SaveChangesAsync(); if (changeCount == 1) { return(Resp.Success()); } return(Resp.Fault(Resp.NONE, "修改失败")); }
/// <summary> /// 添加标签 /// </summary> public async Task AddTagsAsync(string[] tags) { /* * 添加标签,如果标签已经有了,不会重复添加 */ await using YGBContext db = new YGBContext(); List <DB.Tables.Tag> tagList = new List <DB.Tables.Tag>(tags.Length); foreach (string tag in tags) { if (Tag.IsExistTag(tag)) { continue; } tagList.Add(new DB.Tables.Tag { Name = tag }); } if (tagList.Count > 0) { db.Tags.AddRange(tagList); await db.SaveChangesAsync(); } }
/// <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}失败")); }
private async Task <string> ModifyState(UserState userState) { using var db = new YGBContext(); DB.Tables.User user = await db.Users.FirstOrDefaultAsync(u => u.Id == Id); if (user is null) { return(USER_NOT_EXIST); } int value = (int)userState; string description = userState.GetDescription(); if (user.State == value) { return($"用户已是{description}的状态,不能重复{description}"); } user.State = value; int count = await db.SaveChangesAsync(); if (count == 1) { return(""); } return("启用失败"); }
/// <summary> /// 修改密码 /// </summary> /// <param name="newPassword">经过加密的新密码</param> /// <returns></returns> public async Task <Resp> ChangePasswordAsync(Models.ChangePassword model) { (bool isValid, string msg) = model.IsValid(); if (!isValid) { return(Resp.Fault(Resp.NONE, msg)); } using var db = new YGBContext(); DB.Tables.User user = await db.Users.FirstOrDefaultAsync(u => u.Id == Id); if (user is null) { return(Resp.NeedLogin(Resp.NONE, "请重新登录")); } if (!user.Password.Equals(model.OldPassword, StringComparison.OrdinalIgnoreCase)) { return(Resp.Fault(Resp.NONE, "旧密码有误")); } if (user.Password.Equals(model.NewPassword, StringComparison.OrdinalIgnoreCase)) { return(Resp.Fault(Resp.NONE, "新密码不能和旧密码相同")); } user.Password = model.NewPassword; int changeCount = await db.SaveChangesAsync(); if (changeCount == 1) { return(Resp.Success(Resp.NONE)); } return(Resp.Fault(Resp.NONE, "修改失败")); }
/// <summary> /// 忽略举报 /// </summary> /// <returns></returns> public async Task <Resp> IgnoreAsync() { /* * 清除所有举报记录 * 不改变提问状态 */ await using var db = new YGBContext(); List <DB.Tables.QuestionReportRecord> list = await db.QuestionReportRecords.AsNoTracking() .Where(qr => qr.QuestionId == _id) .ToListAsync(); if (list.Count == 0) { return(Resp.Success()); } list.ForEach(qr => qr.IsHandled = true); db.QuestionReportRecords.UpdateRange(list); int changeCount = await db.SaveChangesAsync(); if (changeCount == list.Count) { return(Resp.Success()); } return(Resp.Fault(Resp.NONE, "忽略失败")); }
/// <summary> /// 追问 /// </summary> public async Task <Resp> AddCommentAsyns(int commenterId, string content) { if (string.IsNullOrWhiteSpace(content)) { return(Resp.Fault(Resp.NONE, "追问内容不能为空")); } if (content.Length > Comments.COMMENT_MAX_LENGTH) { return(Resp.Fault(Resp.NONE, $"追问内容不得超过{Comments.COMMENT_MAX_LENGTH}个字")); } await using var db = new YGBContext(); if (!await db.Questions.AnyAsync(q => q.Id == Id)) { return(Resp.Fault(Resp.NONE, QUESTION_NO_EXIST)); } DB.Tables.QuestionComment comment = new DB.Tables.QuestionComment { QuestionId = Id, CommenterId = commenterId, Content = content }; db.QuestionComments.Add(comment); int changeCount = await db.SaveChangesAsync(); if (changeCount == 1) { return(Resp.Success()); } return(Resp.Fault(Resp.NONE, "追问失败")); }
/// <summary> /// 获取客户列表 /// 管理端使用 /// </summary> /// <param name="pager"></param> /// <returns></returns> public async Task <Resp> GetClientsListAysnc(Paginator pager) { string search = pager["search"] ?? ""; using var db = new YGBContext(); Expression <Func <DB.Tables.User, bool> > whereStatement = u => u.Name.Contains(search) || u.Email.Contains(search); pager.TotalRows = await db.Users.CountAsync(whereStatement); pager.List = await db.Users.AsNoTracking() .Where(whereStatement) .Skip(pager.Skip) .Take(pager.Size) .Select(u => new Results.ClientItem { Id = u.Id, UserName = u.Name, Email = u.Email, CreateDate = u.CreateDate.ToStandardString(), State = Share.KeyValue <int, string> .Create(u.State, u.State.GetDescription <User.UserState>()) }) .ToListAsync(); return(Resp.Success(pager)); }
/// <summary> /// 删除回答,硬删除 /// </summary> /// <param name="id"></param> /// <returns></returns> public async Task <Resp> DeleteAsync(int id) { await using var db = new YGBContext(); var answer = await db.Answers.AsNoTracking().FirstOrDefaultAsync(a => a.Id == id); if (answer is null) { return(Resp.Fault(Resp.NONE, "答案不存在")); } var backList = await db.AnswerBackRecords.AsNoTracking().Where(a => a.AnswerId == id).ToListAsync(); var commentList = await db.AnswerComments.AsNoTracking().Where(a => a.AnswerId == id).ToListAsync(); var reportList = await db.AnswerReportRecords.AsNoTracking().Where(a => a.AnswerId == id).ToListAsync(); db.AnswerBackRecords.RemoveRange(backList); db.AnswerComments.RemoveRange(commentList); db.AnswerReportRecords.RemoveRange(reportList); db.Answers.Remove(answer); int count = 1 + backList.Count + commentList.Count + reportList.Count; int changeCount = await db.SaveChangesAsync(); if (count == changeCount) { return(Resp.Success()); } return(Resp.Fault(Resp.NONE, "删除失败")); }
/// <summary> /// 获取用户编辑的提问信息 /// </summary> /// <param name="questionId"></param> /// <returns></returns> public async Task <Results.QuestionEditInfo> GetEditInfoAsync(int questionId) { await using var db = new YGBContext(); DB.Tables.Question question = await db.Questions.AsNoTracking().FirstOrDefaultAsync(q => q.Id == questionId); if (question is null) { return(default);
/// <summary> /// 删除一个答案 /// </summary> /// <param name="id"></param> /// <param name="deep">是否深删除</param> /// <returns></returns> public async Task <Resp> DeleteQuestionAsync(int id, bool deep = false) { await using var db = new YGBContext(); var question = await db.Questions.FirstOrDefaultAsync(q => q.Id == id); if (question is null) { return(Resp.Fault(Resp.NONE, "该问题不存在")); } if (deep) { List <DB.Tables.Answer> answers = await db.Answers.AsNoTracking().Where(a => a.QuestionId == id).ToListAsync(); List <int> answersId = answers.Select(a => a.Id).ToList(); var backRecords = await db.AnswerBackRecords.AsNoTracking().Where(a => answersId.Contains(a.AnswerId)).ToListAsync(); var reportRecords = await db.AnswerReportRecords.AsNoTracking().Where(a => answersId.Contains(a.AnswerId)).ToListAsync(); var comments = await db.AnswerComments.AsNoTracking().Where(a => answersId.Contains(a.AnswerId)).ToListAsync(); db.AnswerBackRecords.RemoveRange(backRecords); db.AnswerComments.RemoveRange(comments); db.AnswerReportRecords.RemoveRange(reportRecords); db.Answers.RemoveRange(answers); var backQuestion = await db.QuestionBackRecords.AsNoTracking().Where(q => q.QuestionId == id).ToListAsync(); var reportQuestion = await db.QuestionReportRecords.AsNoTracking().Where(q => q.QuestionId == id).ToListAsync(); var commentQuestion = await db.QuestionComments.AsNoTracking().Where(q => q.QuestionId == id).ToListAsync(); db.QuestionComments.RemoveRange(commentQuestion); db.QuestionBackRecords.RemoveRange(backQuestion); db.QuestionReportRecords.RemoveRange(reportQuestion); db.Questions.Remove(question); int changeCount = await db.SaveChangesAsync(); int count = answers.Count + 1 + backRecords.Count + reportRecords.Count + comments.Count + backQuestion.Count + reportQuestion.Count + commentQuestion.Count; if (changeCount == count) { return(Resp.Success()); } } else { question.State = (int)Question.QuestionState.Remove; int changeCount = await db.SaveChangesAsync(); if (changeCount == 1) { return(Resp.Success(Resp.NONE)); } } return(Resp.Fault(Resp.NONE, "删除失败")); }
/// <summary> /// クライアントホームページの回答リストを取得する /// </summary> public override async Task <Resp> GetListAsync(Paginator pager) { /* * */ if (!int.TryParse(pager["userId"], out int userId)) { return(Resp.Fault(Resp.NONE, "用户参数有误")); } if (!int.TryParse(pager["currentUserId"], out int currentUserId)) { return(Resp.Fault(Resp.NONE, "登录用户有有误")); } string questionTitle = pager["questionTitle"] ?? ""; Expression <Func <DB.Tables.Answer, bool> > whereStatement = a => a.AnswererId == userId && a.State != (int)Answer.AnswerState.Remove; bool isSelf = userId == currentUserId; // if (!isSelf) { whereStatement = whereStatement.And(a => a.State == (int)Answer.AnswerState.Enabled); } if (!string.IsNullOrWhiteSpace(questionTitle)) { whereStatement = whereStatement.And(a => a.Question.Title.Contains(questionTitle, StringComparison.OrdinalIgnoreCase)); } await using var db = new YGBContext(); pager.TotalRows = await db.Answers.CountAsync(whereStatement); pager.List = await db.Answers.AsNoTracking() .Where(whereStatement) .Include(a => a.Question) .OrderByDescending(a => a.CreateDate) .Skip(pager.Skip) .Take(pager.Size) .Select(a => new Results.AnswerItem_UserPage { Id = a.Id, QuestionId = a.QuestionId, QuestionTitle = a.Question.Title, AnswerContent = a.Content.Overflow(50), State = Share.KeyValue <int, string> .Create(a.State, a.State.GetDescription <Answer.AnswerState>()), CreateDate = a.CreateDate.ToStandardDateString(), IsSelf = isSelf }) .ToListAsync(); return(Resp.Success(pager)); }
/// <summary> /// 该标签是否已存在 /// </summary> /// <param name="tag"></param> /// <returns></returns> public static bool IsExistTag(string tag) { bool?exist = Cache.Get <bool?>(tag); if (exist is null) { using var db = new YGBContext(); exist = db.Tags.Any(t => t.Name == tag); Cache.Set(tag, exist); } return(exist.Value); }
/// <summary> /// 根据 token 获取管理员,如果管理员不存在,会返回管理员空值 /// </summary> /// <param name="token"></param> /// <returns></returns> public static Account GetAccount(string token) { using var db = new YGBContext(); DB.Tables.Admin account = db.Admins.AsNoTracking() .FirstOrDefault(a => a.Token.ToString() == token); if (account is null) { return(new Account(Account.EMPTY)); } return(new Account(account.Id)); }
/// <summary> /// 删除举报的提问 /// </summary> /// <param name="questionId"></param> /// <returns></returns> public async Task <Resp> DeleteAsync(int questionId) { /* * 将提问标记为删除 * 删除相关的其他记录 * 不可恢复 */ await using var db = new YGBContext(); var question = await db.Questions.FirstOrDefaultAsync(q => q.Id == questionId); if (question is null) { return(Resp.Fault(Resp.NONE, "该问题不存在")); } List <DB.Tables.Answer> answers = await db.Answers.AsNoTracking().Where(a => a.QuestionId == questionId).ToListAsync(); List <int> answersId = answers.Select(a => a.Id).ToList(); var backRecords = await db.AnswerBackRecords.AsNoTracking().Where(a => answersId.Contains(a.AnswerId)).ToListAsync(); var reportRecords = await db.AnswerReportRecords.AsNoTracking().Where(a => answersId.Contains(a.AnswerId)).ToListAsync(); var comments = await db.AnswerComments.AsNoTracking().Where(a => answersId.Contains(a.AnswerId)).ToListAsync(); db.AnswerBackRecords.RemoveRange(backRecords); db.AnswerComments.RemoveRange(comments); db.AnswerReportRecords.RemoveRange(reportRecords); db.Answers.RemoveRange(answers); var backQuestion = await db.QuestionBackRecords.AsNoTracking().Where(q => q.QuestionId == questionId).ToListAsync(); var reportQuestion = await db.QuestionReportRecords.AsNoTracking().Where(q => q.QuestionId == questionId).ToListAsync(); var commentQuestion = await db.QuestionComments.AsNoTracking().Where(q => q.QuestionId == questionId).ToListAsync(); db.QuestionComments.RemoveRange(commentQuestion); db.QuestionBackRecords.RemoveRange(backQuestion); db.QuestionReportRecords.RemoveRange(reportQuestion); question.Title = "该提问因违反法律法规已被删除"; question.Description = "该提问因违反法律法规已被删除,请对自己的言论负责"; question.State = (int)Question.QuestionState.Delete; int changeCount = await db.SaveChangesAsync(); if (changeCount == answers.Count + 1 + backRecords.Count + reportRecords.Count + comments.Count + backQuestion.Count + reportQuestion.Count + commentQuestion.Count) { return(Resp.Success()); } return(Resp.Fault(Resp.NONE, "删除失败")); }
/* * 被移除的提问用户自己也不能看到 * 如果当前获取提问列表的非用户本人 * 则只能获取到启用的提问 */ public async Task <Resp> GetListAsync(Paginator pager) { Expression <Func <DB.Tables.Question, bool> > whereStatement = q => q.State != (int)Question.QuestionState.Remove; // 要获取的人的ID if (int.TryParse(pager["userId"] ?? "", out int userId)) { whereStatement = whereStatement.And(q => q.AskerId == userId); } else { return(Resp.Fault(Resp.NONE, "")); } // 当前登录人ID if (!int.TryParse(pager["currentUserId"] ?? "", out int currentUserId)) { currentUserId = 0; } // 如果不是用户本人,只能看到通过的提问 bool isSelf = currentUserId == userId; if (!isSelf) { whereStatement = whereStatement.And(q => q.State == (int)Question.QuestionState.Enabled); } // 如果是,则能看到所有提问 using var db = new YGBContext(); pager.TotalRows = await db.Questions.CountAsync(whereStatement); pager.List = await db.Questions.AsNoTracking() .OrderByDescending(q => q.CreateDate) .Where(whereStatement) .Skip(pager.Skip) .Take(pager.Size) .Include(q => q.Answers) .Select(q => new Results.QuestionItem_UserSelf { Id = q.Id, IsSelf = isSelf, Title = q.Title, Description = q.Description.Length > Question.LIST_DESCRIPTION_LENGTH ? q.Description.Substring(0, Question.LIST_DESCRIPTION_LENGTH) + "..." : q.Description, CreateDate = q.CreateDate.ToStandardDateString(), State = Share.KeyValue <int, string> .Create(q.State, q.State.GetDescription <Question.QuestionState>()), AnswersCount = q.Answers.Count }) .ToListAsync(); return(Resp.Success(pager, "")); }
/// <summary> /// 获取用户 /// </summary> public static User GetUser(string token) { using var db = new YGBContext(); DB.Tables.User user = db.Users.AsNoTracking() .Where(u => u.Token.ToString() == token) .FirstOrDefault(); if (user is null) { return(User.GetEmpty()); } return(new User(user.Id)); }
public static User GetUserByUserName(string userName) { using var db = new YGBContext(); DB.Tables.User user = db.Users.AsNoTracking() .Where(u => u.Name.Equals(userName, StringComparison.OrdinalIgnoreCase)) .FirstOrDefault(); if (user is null) { return(User.GetEmpty()); } return(new User(user.Id)); }
/// <summary> /// 获取标题 /// </summary> /// <returns></returns> public string GetTitle() { CheckEmpty(); string key = $"c0396d57-7c18-47d5-957c-d135f57882aa_{Id}"; string name = Cache.Get <string>(key); if (name is null) { using var db = new YGBContext(); DB.Tables.Question question = db.Questions.AsNoTracking().FirstOrDefault(a => a.Id == Id); name = question?.Title ?? ""; Cache.Set(key, name); } return(name); }
/// <summary> /// 获取账号 /// </summary> /// <returns></returns> public string GetAccount() { CheckEmpty(); string key = $"0d376d79-1049-4e0d-8562-896392539b2d_{Id}"; string name = Cache.Get <string>(key); if (name is null) { using var db = new YGBContext(); var account = db.Admins.AsNoTracking().FirstOrDefault(a => a.Id == Id); name = account?.Account ?? ""; Cache.Set(key, name); } return(name); }
/// <summary> /// 登出 /// </summary> public async Task <Resp> Logout() { using var db = new YGBContext(); DB.Tables.Admin account = await db.Admins.FirstOrDefaultAsync(a => a.Id == Id); if (account is null) { return(Resp.Success(Resp.NONE)); } account.Token = Guid.NewGuid(); if (await db.SaveChangesAsync() == 1) { return(Resp.Success(Resp.NONE)); } return(Resp.Fault(Resp.NONE, "退出登录失败")); }
public async Task <Resp> GetDetailAsync(int questionId, Paginator page) { using var db = new YGBContext(); DB.Tables.Question question = await db.Questions.Include(q => q.Asker) .ThenInclude(asker => asker.Avatar) .Include(q => q.QuestionComments) .FirstOrDefaultAsync(q => q.Id == questionId); if (question is null) { return(Resp.Fault(Resp.NONE, Question.QUESTION_NO_EXIST)); } Answers.Hub answerHub = new Answers.Hub(); // 获取第一页的答案分页 // 获取提问下的答案分页 Answers.List.AnswerList answers = answerHub.GetAnswers(Answers.Hub.AnswerSource.Question); (page.List, page.TotalRows) = await answers.GetAnswersAsync(questionId, page.Index, page.Size, Answers.Answer.AnswerState.NoSelected); Results.QuestionDetailForAdmin detail = new Results.QuestionDetailForAdmin { Id = question.Id, Title = question.Title, Description = question.Description, Tags = question.Tags.Split(','), Votes = question.Votes, Views = question.Views, Actived = question.Actived.ToStandardString(), CreateDate = question.CreateDate.ToStandardString(), State = KeyValue <int, string> .Create(question.State, question.State.GetDescription <Question.QuestionState>()), Comments = question.QuestionComments.Select(q => KeyValue <int, string> .Create(q.Id, q.Content)).ToArray(), User = new Clients.Results.UserIntro { Id = question.Asker.Id, Account = question.Asker.Name, Avatar = question.Asker.Avatar.Thumbnail }, Page = page }; await db.SaveChangesAsync(); return(Resp.Success(detail, "")); }