public async Task <MessageResponse> SendMessage(int userId, SendMessageRequest request) { request.Validate(ImmediateValidator.Instance); using (var conn = _dbConnFactory.CreateConnection()) { var userChat = await conn.QueryFirstOrDefaultAsync <UserChat> ($"SELECT * FROM user_chats WHERE chat_id='{request.ChatId}' and user_id='{userId}'"); Check.Value(userChat).NotNull(); var message = new Message() { UserId = userId, ChatId = request.ChatId, Text = request.Message, InvitedAt = DateTime.Now }; await conn.ExecuteAsync("INSERT INTO messages (user_id, chat_id, text, invited_at) " + "VALUES (@UserId, @ChatId, @Text, @InvitedAt)", message); return(AutoMapper.Mapper.Map <Message, MessageResponse>(message)); } }
public async Task SendMessage(SendMessageRequest request) { var message = new Message() { UserId = this.UserId, ChatId = request.ChatId, Text = request.Message, InvitedAt = DateTime.Now }; var response = AutoMapper.Mapper.Map <Message, MessageResponse>(message); response.UserEmail = this.UserLogin; request.Validate(ImmediateValidator.Instance); Check.Value(_chatsConnections.ContainsKey(request.ChatId)).IsTrue(); Check.Value(_chatsConnections[request.ChatId].Contains(Context.ConnectionId)).IsTrue(); _messages.GetOrAdd(request.ChatId, new List <Message>()).Add(message); await Clients.Group(request.ChatId.ToString()).SendAsync("SendMessage", response); }