public Result Add(string token, long chatId, long userId) { var result = new Result(); var usr = Helpers.CheckerTokenHelper.GetUser(token); if (usr is null) { var error = new Error(); error.Code = 2; error.Message = "Неверный токен."; result.Data = error; result.Status = false; return(result); } using (var db = new DatabaseContext()) { var chat = db.GroupChats.SingleOrDefault(c => c.ChatId == chatId); var userchat = new UsersChat(); userchat.Messages = chat.Messanges; userchat.Owner = userId; userchat.ChatId = chatId * -1; var user = db.Users.SingleOrDefault(u => u.UserId == userId); chat.Members += $"{user.UserId},"; //создание сервисного сообщения var msg = new Message(); msg.Text = $"{usr.FirstName} {usr.LastName} добавил(а) {user.FirstName} {user.LastName} в чат"; msg.ServiceMessage = true; msg.Time = (long)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds; msg.MsgId = db.Messages.Count() + 1; msg.ChatId = chatId * -1; db.Messages.Add(msg); chat.Messanges += $"{msg.MsgId},"; userchat.LastMessage = msg.MsgId; db.UsersChats.Add(userchat); foreach (var memberStr in chat.Members.Split(",")) { if (memberStr != "") { var update = db.UnreadMessages.SingleOrDefault(u => u.UserId == long.Parse(memberStr)); update.Messages += $",{msg.MsgId}"; } } db.SaveChanges(); result.Status = true; result.Data = true; } return(result); }
public Result Create(string token, string name) { var result = new Result(); var usr = Helpers.CheckerTokenHelper.GetUser(token); if (usr is null) { var error = new Error(); error.Code = 2; error.Message = "Неверный токен."; result.Data = error; result.Status = false; return(result); } using (var db = new DatabaseContext()) { var chat = new GroupChat(); chat.Admin = usr.UserId; chat.Members = $"{usr.UserId},"; //создание тестового сообщения.. var msg = new Message(); msg.Text = $"{usr.FirstName} {usr.LastName} создал(а) групповой чат {name}"; msg.ServiceMessage = true; msg.Time = (long)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds; msg.MsgId = db.Messages.Count() + 1; db.Messages.Add(msg); chat.Messanges = $"{msg.MsgId},"; chat.Title = name; chat.ChatId = db.GroupChats.Count() + 1; db.GroupChats.Add(chat); var userchat = new UsersChat(); userchat.Messages = chat.Messanges; userchat.Owner = usr.UserId; userchat.LastMessage = msg.MsgId; userchat.ChatId = chat.ChatId * -1; db.UsersChats.Add(userchat); db.SaveChanges(); result.Data = chat; result.Status = true; return(result); } }
public ResponseCommand Execute(object data, User user, ILoggerService logger) { var response = new ResponseCommand(); if (!(data is Shared.Models.Messages.Send)) { response.Data = 5; response.TypeData = "error"; return(response); } var msg = (Shared.Models.Messages.Send)data; if (msg.ChatId > 0) { //Отправка сообщения пользователю. using (var db = new ServerData()) { try { //Проверка есть ли такой пользователь вообще. if (db.Users.Any(u => u.UserId == msg.ChatId)) { //Пользователь есть var usr = db.Users.Single(u => u.UserId == msg.ChatId); //Проверяем есть ли чат с этим пользователем. if (db.UsersChats.Any(c => c.Owner == user.UserId && c.ChatId == usr.UserId)) { //ничего не делаем } else { //Создавать чат для отправителя. var usrChat = new UsersChat(); usrChat.Messages = ""; usrChat.Owner = user.UserId; usrChat.ChatId = usr.UserId; usrChat.LastMessage = 0; usrChat.LocalId = db.UsersChats.Count() + 1; db.UsersChats.Add(usrChat); db.SaveChanges(); //Создание чата для принимающего. var usrChat2 = new UsersChat(); usrChat2.Messages = ""; usrChat2.Owner = usr.UserId; usrChat2.LastMessage = 0; usrChat2.ChatId = user.UserId; usrChat2.LocalId = db.UsersChats.Count() + 1; db.UsersChats.Add(usrChat2); } //Отправляем ему сообщение var msgObj = new Database.Message() { MsgId = db.Messages.Count() + 1, ChatId = 0, RecieverId = usr.UserId, SenderId = user.UserId, Text = msg.Text, Time = (long)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds }; //Добавление сообщения в бд db.Messages.Add(msgObj); //Добавление id сообщения в список. var chats1 = db.UsersChats.Single(c => c.Owner == user.UserId && c.ChatId == usr.UserId); chats1.Messages += $",{msgObj}"; chats1.LastMessage = msgObj.Time; var chats2 = db.UsersChats.Single(c => c.Owner == usr.UserId && c.ChatId == user.UserId); chats2.Messages += $",{msgObj}"; chats2.LastMessage = msgObj.Time; db.SaveChanges(); var rsp = new SendResponse(); rsp.MsgId = msgObj.MsgId; response.Data = rsp; response.TypeData = "msg.snd"; return(response); //Todo: сделать оповещение юзера. } else { //Пользователя с таким Id не существует. response.Data = 8; response.TypeData = "error"; return(response); } } catch (Exception e) { logger.Error("Произошла ошибка при отправке сообщения", e); response.Data = e.Message; response.TypeData = "exception"; return(response); } } } else { return(null); } }
public Result Get(string text, long chatId, string token, long attach = 0) { _logger.Debug($"msg.send?text={text}&chatId={chatId}&token={token}&attach={attach}"); var result = new Result(); var user = Helpers.CheckerTokenHelper.GetUser(token); if (user is null) { var error = new Error(); error.Code = 2; error.Message = "Неверный токен."; result.Data = error; result.Status = false; return(result); } using (var db = new DatabaseContext()) { if (chatId > 0) //отправка в лс.. { //Проверка есть ли такой пользователь. if (db.Users.Any(u => u.UserId == chatId)) { //получение пользователя var usr = db.Users.Single(u => u.UserId == chatId); if (db.UsersChats.Any(c => c.Owner == user.UserId && c.ChatId == usr.UserId)) { //Ничего не делаем } else { //Создание чат для отправителя. var userChat = new UsersChat(); userChat.Messages = ""; userChat.Owner = user.UserId; userChat.ChatId = usr.UserId; userChat.LastMessage = 0; userChat.LocalId = db.UsersChats.Count() + 1; db.UsersChats.Add(userChat); db.SaveChanges(); //Создание чата для принимающего. var userChat2 = new UsersChat(); userChat2.Messages = ""; userChat2.Owner = usr.UserId; userChat2.LastMessage = 0; userChat2.ChatId = user.UserId; userChat2.LocalId = db.UsersChats.Count() + 1; db.UsersChats.Add(userChat2); db.SaveChanges(); } //Отправлем ему сообщение var msgObj = new Message() { MsgId = db.Messages.Count() + 1, ChatId = 0, RecieverId = usr.UserId, SenderId = user.UserId, ImageSender = user.PathProfilePic, NameSender = user.FirstName + " " + user.LastName, Text = text, Attach = attach, Time = (long)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds }; //Добавление сообщение в бд db.Messages.Add(msgObj); //Добавление id сообщения в список. var chats1 = db.UsersChats.Single(c => c.Owner == user.UserId && c.ChatId == usr.UserId); chats1.Messages += $",{msgObj.MsgId}"; chats1.LastMessage = msgObj.Time; var chats2 = db.UsersChats.Single(c => c.Owner == usr.UserId && c.ChatId == user.UserId); chats2.Messages += $",{msgObj.MsgId}"; chats2.LastMessage = msgObj.Time; var update = db.UnreadMessages.SingleOrDefault(u => u.UserId == usr.UserId); update.Messages += $",{msgObj.MsgId}"; db.SaveChanges(); var response = new Shared.Models.Messages.Send(); response.MsgId = msgObj.MsgId; result.Data = response; result.Status = true; } } else { var groupChatId = chatId * -1; var chat = db.GroupChats.SingleOrDefault(c => c.ChatId == groupChatId); var msg = new Message(); msg.Attach = attach; msg.Text = text; msg.Time = (long)(DateTime.UtcNow.Subtract(new DateTime(1970, 1, 1))).TotalSeconds; msg.ChatId = chatId; msg.ImageSender = user.PathProfilePic; msg.NameSender = user.FirstName + " " + user.LastName; msg.RecieverId = chatId; msg.SenderId = user.UserId; msg.ServiceMessage = false; msg.UsersReaded = ""; msg.MsgId = db.Messages.Count() + 1; db.Messages.Add(msg); chat.Messanges += $"{msg.MsgId},"; foreach (var memberStr in chat.Members.Split(",")) { if (memberStr != "") { var member = long.Parse(memberStr); var userChat = db.UsersChats.SingleOrDefault(c => c.Owner == member && c.ChatId == chatId); userChat.Messages += $"{msg.MsgId},"; userChat.LastMessage = msg.MsgId; //уведомления о новом сообщении других пользователей. var update = db.UnreadMessages.SingleOrDefault(u => u.UserId == long.Parse(memberStr)); update.Messages += $",{msg.MsgId}"; } } db.SaveChanges(); var response = new Shared.Models.Messages.Send(); response.MsgId = msg.MsgId; result.Data = response; result.Status = true; } return(result); } }
public Result GetChatMethod(long chatId, long count, long offset, string token) { _logger.Debug($"msg.getChat?chatId={chatId}&count={count}&offset={offset}&token={token}"); var result = new Result(); var usr = Helpers.CheckerTokenHelper.GetUser(token); if (usr is null) { var error = new Error(); error.Code = 2; error.Message = "Неверный токен."; result.Data = error; result.Status = false; return(result); } _logger.Debug("Обращение к бд."); using (var db = new DatabaseContext()) { UsersChat chat = null; chat = db.UsersChats.SingleOrDefault(c => c.Owner == usr.UserId && c.ChatId == chatId); if (chat is null) { var error = new Error(); error.Code = 9; error.Message = "Такого чата не существует."; result.Data = error; result.Status = false; return(result); } _logger.Debug("Поиск сообщений..."); var chatMsgs = chat.Messages.Split(",").ToList(); _logger.Debug($"db: {chat.Messages}"); var chatModel = new Shared.Models.Messages.GetChat(); chatModel.Messages = new List <Message>(); try { for (var i = offset; i < count; i++) { var msgId = chatMsgs[Convert.ToInt32(i)]; _logger.Debug($"db id msg: {msgId}"); if (msgId == "") { _logger.Debug("Пропуск числа."); goto blep; } var id = long.Parse(msgId); var msgDb = db.Messages.SingleOrDefault(m => m.MsgId == id); var itm = msgDb.ConvertToMessage(); if (itm.SenderId != 0) { var sender = db.Users.SingleOrDefault(u => u.UserId == itm.SenderId); itm.ImageSender = sender.PathProfilePic; } chatModel.Messages.Add(itm); blep: int i2 = 0; } } catch (Exception e) { _logger.Error("GetChat", e); } _logger.Debug($"Отправка {chatModel.Messages.Count} сообщений."); result.Data = chatModel; result.Status = true; return(result); } }