public async Task <List <int> > AddMessageAsync(MessageSocketsModel message) { using (ShapeAppDbContext ctx = new ShapeAppDbContext()) { List <int> ints = new List <int>(); if (message.HasImage && message.Content == null) { message.Content = ""; } await ctx.Messages.AddAsync(new Message { Content = message.Content, HasImage = message.HasImage, ReceiverId = message.ReceiverId, SenderId = message.SenderId, TimeStamp = DateTime.Now }); await ctx.SaveChangesAsync(); ints.Add(ctx.Messages.ToList().Last().Id); await ctx.Notifications.AddAsync(new Notification { SenderId = message.SenderId, ReceiverId = message.ReceiverId, NotificationType = ActionType.MESSAGE_CREATE.ToString() }); await ctx.SaveChangesAsync(); ints.Add(ctx.Notifications.ToList().Last().Id); return(ints); } }
/// <summary> /// Persists a given message to the database and its corresponding notification /// </summary> /// <param name="actualRequest">the client request to be handled</param> /// <returns>the response to the given request</returns> private async Task <ActualRequest> AddMessageAsync(ActualRequest actualRequest) { Request request = actualRequest.Request; MessageSocketsModel message = JsonSerializer.Deserialize <MessageSocketsModel>(request.Argument.ToString()); List <int> ints = await chatRepo.AddMessageAsync(message); int messageId = ints[0]; Request requestResponse = new Request { ActionType = ActionType.MESSAGE_CREATE.ToString(), Argument = JsonSerializer.Serialize(ints) }; if (messageId > 0) { if (message.HasImage && actualRequest.Images != null) { try { ImagesUtil.WriteImageToPath(actualRequest.Images[0], $"{FILE_PATH}/Messages", $"/{messageId}.jpg"); } catch (Exception e) { Console.WriteLine("Could not add image to created message " + messageId); } } } return(new ActualRequest { Request = requestResponse, Images = null }); }
public List <UserShortVersionWithMessage> GetLastMessagesForUserWithDbContext(ShapeAppDbContext ctx, int userId, int offset) { List <Message> userMessages = ctx.Messages.Where(m => m.SenderId == userId || m.ReceiverId == userId) .OrderByDescending(m => m.TimeStamp).ToList(); List <int> messagedUserIds = new List <int>(); List <int> lastMessageIds = new List <int>(); if (!userMessages.Any() || offset < 0) { return(new List <UserShortVersionWithMessage>()); } foreach (var message in userMessages) { if (message.SenderId == userId) { if (!messagedUserIds.Contains(message.ReceiverId)) { messagedUserIds.Add(message.ReceiverId); lastMessageIds.Add(message.Id); } } else { if (!messagedUserIds.Contains(message.SenderId)) { messagedUserIds.Add(message.SenderId); lastMessageIds.Add(message.Id); } } } if (offset >= lastMessageIds.Count) { return(new List <UserShortVersionWithMessage>()); } Console.WriteLine("Hello"); List <UserShortVersionWithMessage> lastMessages = new List <UserShortVersionWithMessage>(); for (int i = offset; i < offset + 10; i++) { if (i >= lastMessageIds.Count) { break; } Console.WriteLine("i is " + i); Message messageDb = userMessages.First(m => m.Id == lastMessageIds[i]); string username = ctx.Users.First(u => u.Id == messagedUserIds[i]).Name; MessageSocketsModel message = new MessageSocketsModel { Content = messageDb.Content, HasImage = messageDb.HasImage, Id = messageDb.Id, SenderId = messageDb.SenderId, ReceiverId = messageDb.ReceiverId, TimeStamp = messageDb.TimeStamp }; lastMessages.Add(new UserShortVersionWithMessage { UserId = messagedUserIds[i], UserFullName = username, Message = message }); } return(lastMessages); }