public async Task CreateGroup(Request request, Response response) { var userSession = await CheckAuth.Check(request, response, AuthLevel.Normal); if (userSession == null) { return; } var requestJson = request.Json <CreateGroupRequest>(); //判断请求是否有效 if (!Validation.Valid(requestJson, out var reason)) { await response.BadRequest(reason); return; } //判断当前在允许新建组队的时间范围内 var now = DateTime.Now; if (Config.Config.Options.RegDeadline > 0) { var regDeadline = UnixTimestamp.FromTimestamp(Config.Config.Options.RegDeadline); if (now > regDeadline) { await response.BadRequest($"报名截止时间 ({regDeadline:yyyy-MM-dd HH:mm:ss}) 已过。"); return; } } //判断当前用户不属于任何组队 var groupBindDb = DbFactory.Get <UserGroupBind>(); var groupBindList = await groupBindDb.SelectAllFromCache(); var groupBindItem = groupBindList.FirstOrDefault(it => it.uid == userSession.uid); if (groupBindItem != null) { await response.BadRequest("Emmmmm, 请勿重复新建组队。"); return; } //取得用户数据 var userDb = DbFactory.Get <User>(); var userDict = (await userDb.SelectAllFromCache()).ToDictionary(it => it.uid, it => it); if (!userDict.ContainsKey(userSession.uid)) { await response.Unauthorized("服务器提出了一个问题:你为何存在?"); return; } if (string.IsNullOrWhiteSpace(requestJson.groupname)) { await response.BadRequest("组队名称不能全为空白字符。"); return; } if (requestJson.groupname.Length > 32) { await response.BadRequest("组队名称太长。"); return; } if (requestJson.profile.Length > 350) { await response.BadRequest("队伍简介不能太长。"); return; } var groupDb = DbFactory.Get <UserGroup>(); var groupNameSet = new HashSet <string>((await groupDb.SelectAllFromCache()).Select(it => it.groupname.ToLower())); if (groupNameSet.Contains(requestJson.groupname.ToLower())) { await response.BadRequest("队名不能重复"); return; } //新建组队 var newGroup = new user_group { groupname = requestJson.groupname, profile = requestJson.profile, create_time = now, update_time = now }; var newGid = await groupDb.SimpleDb.AsInsertable(newGroup).ExecuteReturnIdentityAsync(); await groupDb.InvalidateCache(); //自动拒绝该用户所有未拒绝的邀请 var inviteDb = DbFactory.Get <Invite>(); await inviteDb.Db.Updateable <invite>().SetColumns(it => it.valid == 2) .Where(it => it.to_uid == userSession.uid && it.valid == 1).ExecuteCommandAsync(); await inviteDb.InvalidateCache(); //修改用户组队绑定 var user = userDict[userSession.uid]; user.roleid = 3; user.update_time = now; await userDb.SimpleDb.AsUpdateable(user).ExecuteCommandAsync(); await userDb.InvalidateCache(); var newGroupBind = new user_group_bind { uid = userSession.uid, gid = newGid, is_leader = 1 }; await groupBindDb.SimpleDb.AsInsertable(newGroupBind).ExecuteCommandAsync(); await groupBindDb.InvalidateCache(); await response.OK(); }
public async Task AcceptInvite(Request request, Response response) { var userSession = await CheckAuth.Check(request, response, AuthLevel.Normal); if (userSession == null) { return; } var requestJson = request.Json <IidInviteRequest>(); //判断请求是否有效 if (!Validation.Valid(requestJson, out string reason)) { await response.BadRequest(reason); return; } //读取用户设置 var userDb = DbFactory.Get <User>(); var userList = await userDb.SelectAllFromCache(); var user = userList.FirstOrDefault(it => it.uid == userSession.uid); if (user == null) { await response.BadRequest("活见鬼了"); return; } //读取目标iid var inviteDb = DbFactory.Get <Invite>(); var inviteItem = inviteDb.SimpleDb.GetById(requestJson.iid); if (inviteItem == null || inviteItem.valid != 1) { await response.BadRequest("无效邀请"); return; } if (inviteItem.to_uid != userSession.uid) { await response.BadRequest("无修改权限"); } //将目标置为无效 inviteItem.valid = 3; await inviteDb.SimpleDb.AsUpdateable(inviteItem).ExecuteCommandAsync(); //取得该GID已绑定人数 var groupBindDb = DbFactory.Get <UserGroupBind>(); var groupBindList = await groupBindDb.SelectAllFromCache(); var numberOfGroup = groupBindList.Count(it => it.gid == inviteItem.from_gid); if (numberOfGroup >= 5) { await response.BadRequest("组队人数已满,无法加入。"); await inviteDb.InvalidateCache(); return; } //自动拒绝该用户所有未拒绝的邀请 await inviteDb.Db.Updateable <invite>().SetColumns(it => it.valid == 2) .Where(it => it.to_uid == userSession.uid && it.valid == 1).ExecuteCommandAsync(); await inviteDb.InvalidateCache(); //插入组绑定 var newGroupBindDb = new user_group_bind { uid = user.uid, gid = inviteItem.from_gid, is_leader = 0 }; await groupBindDb.SimpleDb.AsInsertable(newGroupBindDb).ExecuteCommandAsync(); await groupBindDb.InvalidateCache(); //修改用户设置 user.roleid = 2; user.update_time = DateTime.Now; await userDb.SimpleDb.AsUpdateable(user).ExecuteCommandAsync(); await userDb.InvalidateCache(); await response.OK(); }