示例#1
0
        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);
            }
        }
示例#2
0
        /// <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
            });
        }
示例#3
0
        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);
        }