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(); } }
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" })); }