public OutputSocketMessageWithUsers Execute(object val, string myLogin, Guid actId) { #region Тестовые данные /* { * "execFun": "GetDialogs", * "data": { * "msgCount": "2" * } * } */ #endregion OutputSocketMessage output = new OutputSocketMessage("getMsg", actId, true, "", new { }); OutputSocketMessageWithUsers rez = new OutputSocketMessageWithUsers(); GetDialogsInfo info = DeserializeObject.ParseJSON <GetDialogsInfo>(val, output, out rez); if (info == null) { return(rez); } using (var db = new RaidaContext()) { Members owner = db.Members.First(it => it.login.Equals(myLogin)); // ReSharper disable once SuggestVarOrType_Elsewhere List <OutGetMsgInfo> list = new List <OutGetMsgInfo>(); //I'am consist in this dialogs List <MemberInGroup> mg = db.MemberInGroup.Include(g => g.group) .ThenInclude(s => s.Shares).ThenInclude(own => own.owner) .Where(it => it.member.login.Equals(myLogin)) .ToList(); mg.ForEach(it => { string groupName = it.group.group_name_part; if (it.group.one_to_one) { groupName = db.MemberInGroup.Include(m => m.member).FirstOrDefault(mig => mig.group == it.group && mig.member != owner)?.member.nick_name; } OutGetMsgInfo group = new OutGetMsgInfo(it.group.group_id, groupName, it.group.one_to_one, it.group.privated); //Add all message in dialog it.group.Shares.OrderBy(s => s.sending_date) .Take(info.msgCount) .ToList() .ForEach(msg => group.messages.Add(new OneMessageInfo(msg.id, Encoding.Unicode.GetString(msg.file_data), msg.current_fragment, msg.total_fragment, msg.sending_date, msg.owner.nick_name, msg.owner.login))); //Add users where consist in dialog db.MemberInGroup.Include(m => m.member).Where(mig => mig.groupId.Equals(it.groupId)) .ForEachAsync(memb => group.members.Add(memb.member.login)); list.Add(group); }); output.data = list; } rez.msgForOwner = output; return(rez); }
public OutputSocketMessageWithUsers Execute(object val, string myLogin, Guid actId) { #region Тестовые данные /* { * "execFun": "OrganizationAddMember", * "data": { * "login": "******", * "password": "******", * "nickName": "Serj", * "transactionId": "80f7efc032cd4a2c97f89fca11ad3701" * } * } */ #endregion OutputSocketMessage output = new OutputSocketMessage("OrganizationAddMember", actId, true, "", new { }); OutputSocketMessageWithUsers rez = new OutputSocketMessageWithUsers(); using (var db = new RaidaContext()) { Members owner = db.Members.Include(o => o.organization).First(it => it.login.Equals(myLogin)); if (owner.organization != null && owner.organization.owner == owner) { Registration registration = new Registration(); rez = registration.Execute(val, myLogin, actId); rez.msgForOwner.callFunction = "OrganizationAddMember"; if (rez.msgForOwner.success) { try { RegistrationInfo info = DeserializeObject.ParseJSON <RegistrationInfo>(val, output, out rez); Organizations organization = db.Organizations.Include(m => m.members).First(it => it == owner.organization); Members newMember = db.Members.First(it => it.login.Equals(info.login.Trim(), StringComparison.CurrentCultureIgnoreCase)); newMember.organization = organization; organization.members.Add(newMember); db.SaveChanges(); output.data = new { newMember.login, nickName = newMember.nick_name }; rez.msgForOwner = output; } catch (Exception e) { Console.WriteLine(e.Message); } } } else { output.success = false; output.msgError = "You a not consist in organization or a not organization owner"; rez.msgForOwner = output; } } return(rez); }
public OutputSocketMessageWithUsers Execute(object val, string myLogin, Guid actId) { #region Тестовые данные /* { * "execFun": "GetMsg", * "data": { * "dialogId": "788FEFAD0ED24436AD73D968685110E8", * "msgCount": "2", * "offset": "0" * } * } */ #endregion OutputSocketMessage output = new OutputSocketMessage("getMsg", actId, true, "", new { }); OutputSocketMessageWithUsers rez = new OutputSocketMessageWithUsers(); GetMsgInfo info = DeserializeObject.ParseJSON <GetMsgInfo>(val, output, out rez); if (info == null) { return(rez); } using (var db = new RaidaContext()) { Members owner = db.Members.First(it => it.login.Equals(myLogin)); if (db.MemberInGroup.Include(g => g.group).Any(it => it.member.login.Equals(myLogin) && it.groupId == info.dialogId)) { MemberInGroup mg = db.MemberInGroup.Include(g => g.group).ThenInclude(s => s.Shares).Where(it => it.member.login.Equals(myLogin) && it.groupId == info.dialogId).First(); string groupName = mg.group.group_name_part; if (mg.group.one_to_one) { groupName = db.MemberInGroup.Include(m => m.member).FirstOrDefault(mig => mig.group == mg.group && mig.member != owner)?.member.nick_name; } OutGetMsgInfo groupMsg = new OutGetMsgInfo(mg.group.group_id, groupName, mg.group.one_to_one, mg.group.privated); mg.group.Shares.Where(it => it.death_date > SystemClock.GetInstance().CurrentTime) .OrderBy(s => s.sending_date) .Skip(info.offset) .Take(info.msgCount) .ToList() .ForEach(msg => groupMsg.messages.Add(new OneMessageInfo(msg.id, Encoding.Unicode.GetString(msg.file_data), msg.current_fragment, msg.total_fragment, msg.sending_date, msg.owner.nick_name, msg.owner.login))); output.data = groupMsg; } else { output.success = false; output.msgError = "Dialog is not found"; } } rez.msgForOwner = output; return(rez); }
public OutputSocketMessageWithUsers Execute(object val, string myLogin, Guid actId) { #region Тестовые данные /* * { * "execFun": "rollbacktransaction", * "data": { * "transactionId": "80f7efc032dd4a7c97f69fca51ad3001" * } * } */ #endregion OutputSocketMessage output = new OutputSocketMessage("rollbackTransaction", actId, true, "", new { }); OutputSocketMessageWithUsers rez = new OutputSocketMessageWithUsers(); TransactionInfo info = DeserializeObject.ParseJSON <TransactionInfo>(val, output, out rez); if (info == null) { return(rez); } Guid transId = info.transactionId; output.data = new { transactionId = transId }; //long dateNow = DateTimeOffset.Now.ToUnixTimeSeconds(); long dateNow = SystemClock.GetInstance().CurrentTime; using (var db = new RaidaContext()) { Members owner = db.Members.FirstOrDefault(it => it.login == myLogin); if (!db.Transactions.Any(it => it.transactionId == transId)) { output.success = false; output.msgError = "This transaction is not found"; } else if (!(db.Transactions.Any(it => it.transactionId == transId && it.owner == owner))) { output.success = false; output.msgError = "You not owner for this transaction"; } else if (!(db.Transactions.Any(it => it.transactionId == transId && it.owner == owner && it.rollbackTime > dateNow))) { output.success = false; output.msgError = "This transaction is blocked"; } else { Transaction.rollbackTransaction(transId, owner); } } rez.msgForOwner = output; return(rez); }
public OutputSocketMessageWithUsers Execute(object val, string myLogin, Guid actId) { #region Тестовые данные /* * { * "execFun": "SetDialogPrivate", * "data": { * "publicId": "18A0CA0657DE4FB09CDC86008B2A8EBE", * "privated": "false" * } * } */ #endregion OutputSocketMessage output = new OutputSocketMessage("SetDialogPrivate", actId, true, "", new { }); OutputSocketMessageWithUsers rez = new OutputSocketMessageWithUsers(); SetDialogPrivateInfo info = DeserializeObject.ParseJSON <SetDialogPrivateInfo>(val, output, out rez); if (info == null) { return(rez); } using (var db = new RaidaContext()) { Members owner = db.Members.First(it => it.login.Equals(myLogin)); if (db.Groups.Any(it => it.group_id == info.publicId && it.owner == owner)) { Groups group = db.Groups.First(it => it.group_id == info.publicId && it.owner == owner); group.privated = info.privated; db.SaveChanges(); output.data = new { dialogId = group.group_id, group.privated }; List <MemberInGroup> membersInGroup = db.MemberInGroup.Include(m => m.member).Where(it => it.group == group && it.member != owner).ToList(); membersInGroup.ForEach(it => rez.forUserLogin.Add(it.member.login)); rez.msgForOther = output; } else { output.success = false; output.msgError = "This dialog not found or you not owner"; rez.msgForOwner = output; return(rez); } } rez.msgForOwner = output; return(rez); }
/* { "execFun": "registration", * "data": { * "login": "******", * "password": "******", * "nickName": "gosha", * "transactionId": "80f7efc032dd4a7c97f69fca51ad3001" * } * } */ public OutputSocketMessageWithUsers Execute(object val, string myLogin, Guid actId) { OutputSocketMessage output = new OutputSocketMessage("registration", actId, true, "", new { }); OutputSocketMessageWithUsers rez = new OutputSocketMessageWithUsers(); RegistrationInfo info = DeserializeObject.ParseJSON <RegistrationInfo>(val, output, out rez); if (info == null) { return(rez); } using (var db = new RaidaContext()) { if (db.Members.Any(it => it.login.Equals(info.login.Trim(), StringComparison.CurrentCultureIgnoreCase))) { output.success = false; output.msgError = "This login already exists"; } else { Guid privateId = Guid.NewGuid(); while (db.Members.Any(it => it.private_id == privateId)) { privateId = Guid.NewGuid(); } info.password = Argon2.Hash(info.password, 1, 512, 8); //Hashing password Members member = new Members { private_id = privateId, login = info.login.Trim().ToLower(), pass = info.password, nick_name = info.nickName, last_use = SystemClock.GetInstance().CurrentTime, description_fragment = "", photo_fragment = "", kb_bandwidth_used = 0, online = false, }; db.Members.Add(member); Transaction.saveTransaction(db, info.transactionId, Transaction.TABLE_NAME.MEMBERS, privateId.ToString(), member); db.SaveChanges(); } } rez.msgForOwner = output; return(rez); }
public OutputSocketMessageWithUsers Execute(object val, string myLogin, Guid actId) { #region Тестовые данные /* * { * "execFun": "sendMsg", * "data": { * "dialogId": "788FEFAD0ED24436AD73D968685110E8", * "textMsg": "test message for one user", * "guidMsg": "91D8333FA55B40AFB46CA63E214C93C8", * "curFrg":"1", * "totalFrg":"2", * "transactionId": "80f7efc032dd4a1c97f69fca51ad1100", * "deathDate": "2511450497620" * } * } */ #endregion OutputSocketMessage output = new OutputSocketMessage("sendMsg", actId, true, "", new { }); OutputSocketMessage outputOther = new OutputSocketMessage("sendMsg", Guid.Empty, true, "", new { }); OutputSocketMessageWithUsers rez = new OutputSocketMessageWithUsers(); InputMsgInfo info = DeserializeObject.ParseJSON <InputMsgInfo>(val, output, out rez); if (info == null) { return(rez); } using (var db = new RaidaContext()) { Members owner = db.Members.First(it => it.login.Equals(myLogin)); if (db.Groups.Any(it => it.group_id == info.dialogId && it.MemberInGroup.Any(mg => mg.group == it && mg.member == owner))) //Check created group and member in this group { if (!db.Shares.Any(it => it.id == info.msgId)) //Check exist message with Id { Groups gr = db.Groups.Include(s => s.Shares).First(it => it.group_id == info.dialogId); Console.WriteLine(SystemClock.GetInstance().CurrentTime.ToString()); Shares msg = new Shares { id = info.msgId, owner = owner, current_fragment = info.curFrg, total_fragment = info.totalFrg, file_data = Encoding.Unicode.GetBytes(info.textMsg), file_extention = "none", kb_size = 0, sending_date = SystemClock.GetInstance().CurrentTime, // DateTimeOffset.Now.ToUnixTimeSeconds(), death_date = info.deathDate > 0 ? DateConvert.validateTimestamp(SystemClock.GetInstance().CurrentTime + info.deathDate) : DateTimeOffset.Now.AddYears(2000).ToUnixTimeSeconds(), to_group = gr }; gr.Shares.Add(msg); db.Shares.Add(msg); Transaction.saveTransaction(db, info.transactionId, Transaction.TABLE_NAME.SHARES, msg.id.ToString(), owner); db.SaveChanges(); List <MemberInGroup> membersInGroup = db.MemberInGroup.Include(m => m.member) .Where(it => it.group == gr && it.member != owner).ToList(); membersInGroup.ForEach(it => rez.forUserLogin.Add(it.member.login)); string groupNameForOwner = gr.group_name_part, groupNameForOther = gr.group_name_part; if (gr.one_to_one) { groupNameForOwner = membersInGroup.First(it => it.member != owner).member.nick_name; groupNameForOther = owner.nick_name; } OneMessageInfo newMsg = new OneMessageInfo(msg.id, info.textMsg, msg.current_fragment, msg.total_fragment, msg.sending_date, owner.nick_name, msg.owner.login); output.data = new OutGetMsgInfo(gr.group_id, groupNameForOwner, gr.one_to_one, gr.privated, new List <OneMessageInfo>() { newMsg }); outputOther.data = new OutGetMsgInfo(gr.group_id, groupNameForOther, gr.one_to_one, gr.privated, new List <OneMessageInfo>() { newMsg }); Transaction.removeMessageAboveLimit(gr); } else { output.success = false; output.msgError = "Message with this ID is exist"; output.data = new { id = info.msgId }; rez.msgForOwner = output; return(rez); } } else { output.success = false; output.msgError = "Dialog is not found"; rez.msgForOwner = output; return(rez); } } rez.msgForOwner = output; rez.msgForOther = outputOther; return(rez); }
public OutputSocketMessageWithUsers Execute(object val, string myLogin, Guid actId) { #region Тестовые данные /* { * "execFun": "ChangeUserInfo", * "data": { * "name":"String", * "photo":"String", * "about":"String", * "changePass":"******", * "oldPass":"******", * "newPass":"******" * } * } */ #endregion OutputSocketMessage output = new OutputSocketMessage("changeUserInfo", actId, true, "", new { }); OutputSocketMessage outputForOther = new OutputSocketMessage("changeUserInfo", Guid.Empty, true, "", new { }); OutputSocketMessageWithUsers rez = new OutputSocketMessageWithUsers(); DTO.ChangeUserInfo info = DeserializeObject.ParseJSON <DTO.ChangeUserInfo>(val, output, out rez); if (info == null) { return(rez); } using (var db = new RaidaContext()) { Members owner = db.Members.Include(m => m.MemberInGroup).FirstOrDefault(it => it.login.Equals(myLogin)); owner.nick_name = info.Name; owner.photo_fragment = info.Photo; owner.description_fragment = info.About; if (info.ChangePass) { if (Argon2.Verify(owner.pass, info.OldPass, null)) { if (info.NewPass.Trim().Length > 5) { owner.pass = Argon2.Hash(info.NewPass, 1, 512, 8); } else { output.success = false; output.msgError = "Minimum length of password is 6 chars"; } } else { output.success = false; output.msgError = "Current password is not valid"; } } db.SaveChanges(); var user = new UserInfo(owner.login, owner.nick_name, owner.photo_fragment, owner.online); output.data = new { itself = true, user }; outputForOther.data = new { itself = false, user }; rez.forUserLogin = DeserializeObject.GetMyReferenceUser(db, owner); } rez.msgForOwner = output; rez.msgForOther = outputForOther; return(rez); }
public OutputSocketMessageWithUsers Execute(object val, string myLogin, Guid actId) { #region Тестовые данные /* * { * "execFun": "addMemberInGroup", * "data": { * "memberLogin": "******", * "groupId": "48A0CA0657DE4FB09CDC86008B2A8EBE", * "transactionId": "80f7efc032dd4a7c97f69fca51ad1100" * } * } */ #endregion OutputSocketMessage output = new OutputSocketMessage("addMemberInGroup", actId, true, "", new { }); OutputSocketMessageWithUsers rez = new OutputSocketMessageWithUsers(); AddMemberInGroupInfo info = DeserializeObject.ParseJSON <AddMemberInGroupInfo>(val, output, out rez); if (info == null) { return(rez); } using (var db = new RaidaContext()) { if (db.Members.Any(it => it.login.Equals(info.memberLogin.Trim(), StringComparison.CurrentCultureIgnoreCase))) { Members owner = db.Members.First(it => it.login.Equals(myLogin)); if (db.MemberInGroup.Any(it => it.member == owner && it.groupId == info.groupId && !it.group.one_to_one)) { Members user = db.Members.FirstOrDefault(it => it.login.Equals(info.memberLogin.Trim(), StringComparison.CurrentCultureIgnoreCase)); if (db.MemberInGroup.Any(it => it.groupId == info.groupId && it.member == user)) { output.success = false; output.msgError = "This user already exists in this group"; } else { Groups group = db.Groups.First(it => it.group_id == info.groupId); if (group.privated) { output.success = false; output.msgError = "This group is private"; rez.msgForOwner = output; return(rez); } int newId = 0; if (db.MemberInGroup.Any()) { newId = db.MemberInGroup.OrderByDescending(it => it.Id).FirstOrDefault().Id + 1; } MemberInGroup mg = new MemberInGroup { Id = newId, group = group, member = user }; db.MemberInGroup.Add(mg); Transaction.saveTransaction(db, info.transactionId, Transaction.TABLE_NAME.MEMBERS_IN_GROUP, mg.Id.ToString(), owner); db.SaveChanges(); output.data = new { itself = true, newUser = new UserInfo(user.login, user.nick_name, user.photo_fragment, user.online), groupId = group.group_id }; var members = db.MemberInGroup.Include(ming => ming.member) .Where(it => it.groupId.Equals(group.group_id)).Select(x => x.member.login).ToList(); //Logins of all users in dialog rez.forUserLogin = members.Where(it => !it.Equals(myLogin)).ToList(); //Send all users in dialog, but not me rez.msgForOther = new { callFunction = "AddMemberInGroup", data = new { id = info.groupId, name = group.group_name_part, oneToOne = group.one_to_one, members = members, newUser = new UserInfo(user.login, user.nick_name, user.photo_fragment, user.online) } }; } } else { output.success = false; output.msgError = "Group is not found"; } } else { output.success = false; output.msgError = "User is not found"; } } rez.msgForOwner = output; return(rez); }
public OutputSocketMessageWithUsers Execute(object val, string myLogin, Guid actId) { #region Тестовые данные /* * { * "execFun": "createDialog", * "data": { * "name": "MeCloseGroup", * "publicId": "48A0CA0657DE4FB09CDC86008B2A8EBE", * "oneToOne": "false", * "transactionId": "80f7efc032dd4a7c97f69fca51ad3100" * } * } */ #endregion OutputSocketMessage output = new OutputSocketMessage("createDialog", actId, true, "", new { }); OutputSocketMessageWithUsers rez = new OutputSocketMessageWithUsers(); GroupInfo info = DeserializeObject.ParseJSON <GroupInfo>(val, output, out rez); if (info == null) { return(rez); } using (var db = new RaidaContext()) { if (db.Groups.Any(it => it.group_id == info.publicId)) { output.success = false; output.msgError = "Change the publicId"; rez.msgForOwner = output; return(rez); } Members owner = db.Members.First(it => it.login.Equals(myLogin)); Groups group = new Groups { group_id = info.publicId, group_name_part = info.name, owner = owner, photo_fragment = "", one_to_one = info.oneToOne, privated = false }; int newId = 1; if (db.MemberInGroup.Count() > 0) { newId = db.MemberInGroup.OrderByDescending(it => it.Id).FirstOrDefault().Id + 1; } if (info.oneToOne) { if (db.Members.Any(it => it.login.Equals(info.name.Trim().ToLower()))) { group.group_name_part = "OneToOne"; Members rec = db.Members.First(it => it.login.Equals(info.name.Trim().ToLower())); if (!db.MemberInGroup.Any(it => it.member == owner && db.MemberInGroup.Any(mg => mg.member == rec && it.group == mg.group && mg.group.one_to_one))) { MemberInGroup mg1 = new MemberInGroup { Id = newId, group = group, member = rec }; db.MemberInGroup.Add(mg1); Transaction.saveTransaction(db, info.transactionId, Transaction.TABLE_NAME.MEMBERS_IN_GROUP, mg1.Id.ToString(), owner); newId++; //rez.usersId.Add(info.login); Придумать ответ пользователю, которого добавили - а может он и не нужен } else { output.success = false; output.msgError = "This dialog exists"; rez.msgForOwner = output; return(rez); } } else { output.success = false; output.msgError = "User is not found"; rez.msgForOwner = output; return(rez); } } db.Groups.Add(group); MemberInGroup OwnerInMg = new MemberInGroup { Id = newId, group = group, member = owner }; db.MemberInGroup.Add(OwnerInMg); try { db.SaveChanges(); } catch (Exception e) { Console.WriteLine(e.Message); } Transaction.saveTransaction(db, info.transactionId, Transaction.TABLE_NAME.GROUPS, info.publicId.ToString(), owner); Transaction.saveTransaction(db, info.transactionId, Transaction.TABLE_NAME.MEMBERS_IN_GROUP, OwnerInMg.Id.ToString(), owner); } output.data = new { id = info.publicId, info.name, info.oneToOne }; rez.msgForOwner = output; return(rez); }
public OutputSocketMessageWithUsers Execute(object val, string myLogin, Guid actId) { #region Тестовые данные /* * { * "execFun": "OrganizationCreate", * "data": { * "publicId": "788FEFAD0ED24436AD73D968685110E8", * "name": "Organization Only One", * "transactionId": "80f7efc092da4a1c47f69fca51ad1100" * } * } */ #endregion OutputSocketMessage output = new OutputSocketMessage("OrganizationCreate", actId, true, "", new { }); OutputSocketMessageWithUsers rez = new OutputSocketMessageWithUsers(); OrganizationCreateInfo info = DeserializeObject.ParseJSON <OrganizationCreateInfo>(val, output, out rez); if (info == null) { return(rez); } using (var db = new RaidaContext()) { Members owner = db.Members.Include(o => o.organization).First(it => it.login.Equals(myLogin)); if (owner.organization == null) { if (!db.Organizations.Any(it => it.public_id == info.publicId)) { Guid privateId = Guid.NewGuid(); while (db.Organizations.Any(it => it.private_id == privateId)) { privateId = Guid.NewGuid(); } Organizations newOrganiz = new Organizations { private_id = privateId, public_id = info.publicId, org_name_part = info.name, kb_of_credit = 0, owner = owner }; newOrganiz.members.Add(owner); db.Organizations.Add(newOrganiz); Transaction.saveTransaction(db, info.transactionId, Transaction.TABLE_NAME.ORGANIZATIONS, newOrganiz.private_id.ToString(), owner); db.SaveChanges(); output.data = new { publicId = newOrganiz.public_id, name = newOrganiz.org_name_part }; } else { output.success = false; output.msgError = "Change the publicId"; } } else { output.success = false; output.msgError = "You a have already organization"; } } rez.msgForOwner = output; return(rez); }