コード例 #1
0
        public async Task AddChat(AddChatDto addChatDto)
        {
            var participant = await _unitOfWork.Repository <User>().GetAsync(u => u.Id == addChatDto.ParticipantId);

            if (participant != null)
            {
                var creator = await _authentication.GetCurrentUserAsync();

                addChatDto.CreatedDateUtc = DateTime.Now;
                addChatDto.CreatedById    = creator.Id;

                var chat = _mapper.Map <Chat>(addChatDto);

                await _unitOfWork.Repository <Chat>().AddAsync(chat);

                await _unitOfWork.SaveChangesAsync();

                var chatCreator = new ChatUser
                {
                    UserId = creator.Id,
                    ChatId = chat.Id
                };
                var chatParticipant = new ChatUser
                {
                    UserId = addChatDto.ParticipantId,
                    ChatId = chat.Id
                };

                await _unitOfWork.Repository <ChatUser>().AddAsync(chatCreator);

                await _unitOfWork.Repository <ChatUser>().AddAsync(chatParticipant);

                await _unitOfWork.SaveChangesAsync();
            }
        }
コード例 #2
0
        public IActionResult AddChat(TokenDto tokenDto)
        {
            var token = tokenDto.Token;
            Dictionary <string, string> validatedTokenClaims;

            try
            {
                validatedTokenClaims = TokenValidation.ValidateToken(token);
            }
            catch (ArgumentException)
            {
                return(BadRequest(new { text = "Validation failed" }));
            }

            var curUserId  = int.Parse(validatedTokenClaims["userId"]);
            var emailToAdd = validatedTokenClaims["emailToAdd"];

            var match = _context.Users.SingleOrDefault(u => u.Login.Email.Equals(emailToAdd));

            if (match == null)
            {
                return(BadRequest(new { text = "No one with such email exists bro..." }));
            }

            //Checking if user is not adding himself
            if (match.UserId == curUserId)
            {
                return(BadRequest(new { text = "You cannot add yourself,pls.." }));
            }

            var curUser = _context.Users.Find(curUserId);

            var chatsCurrentUserHas = _context.ChatUsers.Where(user => user.UserId == curUserId).ToList();

            // Loop looking for occurrences, when we already have a same chat ID with the user that we are about to add
            foreach (var t in chatsCurrentUserHas)
            {
                var userListPerChat = ChatUserForASpecificChatFinder(t.ChatId);
                if (userListPerChat.Any(user => user.UserId == match.UserId))
                {
                    return(BadRequest(new { text = "You already have this guy..." }));
                }
            }

            if (curUser != null)
            {
                var chatUser = _chatWorker.AddChat(new List <User>()
                {
                    curUser, match
                });

                var newChatDto = new AddChatDto
                {
                    ChatId = chatUser.ChatId, UserName = chatUser.User.UserName, FriendImageUrl = chatUser.User.ImageUrl
                };

                return(Ok(newChatDto));
            }
            return(BadRequest(new{ text = "Email not found" }));
        }