Exemplo n.º 1
0
    private void insertMessage(IEnumerable <ChatParticipantViewModel> usersInGroupToNotify, MessageViewModel message, ChatParticipantViewModel sender)
    {
        var fromUser = this._ctx.Users.FirstOrDefault(d => d.Id == sender.UserId);
        var m        = new ChatMessageSeen()
        {
            DateSeen = DateTime.UtcNow,
            User     = fromUser
        };
        var msg = new ChatMessage()
        {
            DownloadUrl     = message.DownloadUrl,
            DateSent        = message.DateSent,
            FileSizeInBytes = message.FileSizeInBytes,
            FromUser        = fromUser,
            Message         = message.Message,
            ChatGroup       = this._ctx.ChatGroups.FirstOrDefault(d => d.Id.ToString() == message.GroupId)
        };

        var participants = new List <Participant>();

        foreach (var item in usersInGroupToNotify)
        {
            var participant = new Participant();
            participant.User = this._ctx.Users.FirstOrDefault(d => d.Id == item.UserId);
            participants.Add(participant);
        }

        this._ctx.ChatMessages.Add(msg);
        this._ctx.SaveChanges();
    }
        public IActionResult MarkMessageAsSeen(int id, int messageId, [FromHeader] int UserID, [FromHeader] string UserRole)
        {
            var chat = _context.Chats.Find(id);

            if (chat == null)
            {
                return(StatusCode(StatusCodes.Status404NotFound));
            }

            if (_user.GetUserById(UserID) == null)
            {
                return(StatusCode(StatusCodes.Status400BadRequest));
            }

            _context.Entry(chat).Collection(chat => chat.ChatMessages).Load();
            _context.Entry(chat).Collection(chat => chat.ChatUsers).Load();

            var currentUserIsParticipant = true;

            if (!chat.ChatUsers.Any(chatUser => chatUser.UserId == UserID))
            {
                currentUserIsParticipant = false;
            }

            if (!currentUserIsParticipant && UserRole != "Admin")
            {
                return(StatusCode(StatusCodes.Status403Forbidden));
            }

            var chatUser = chat.ChatUsers.FirstOrDefault(chatUser => chatUser.UserId == UserID);

            if (chatUser.RequestPending)
            {
                return(StatusCode(StatusCodes.Status403Forbidden));
            }

            var currentChatMessage = chat.ChatMessages.FirstOrDefault(chatMessage => chatMessage.Id == messageId);

            if (currentChatMessage == null)
            {
                return(StatusCode(StatusCodes.Status404NotFound));
            }

            _context.Entry(currentChatMessage).Collection(chatMessage => chatMessage.ChatMessageSeens).Load();
            var newChatMessageSeen = new ChatMessageSeen()
            {
                ChatMessage = currentChatMessage,
                UserId      = UserID
            };

            currentChatMessage.ChatMessageSeens.Add(newChatMessageSeen);

            try
            {
                var success = _context.SaveChanges();

                if (success < 1)
                {
                    return(StatusCode(StatusCodes.Status400BadRequest));
                }
            }
            catch (Exception ex)
            {
                return(StatusCode(StatusCodes.Status400BadRequest, ex.Message));
            }

            foreach (ChatMessage chatMessage in chat.ChatMessages)
            {
                _context.Entry(chatMessage).Collection(chatMessage => chatMessage.ChatMessageSeens).Load();
            }

            return(StatusCode(StatusCodes.Status201Created, new JsonResult(chat.ChatMessages)));
        }