Exemplo n.º 1
0
        /// <summary>
        /// Adds new message to conversation
        /// </summary>
        /// <param name="conversationId">Conversation identifier</param>
        /// <param name="sender">User that send message</param>
        /// <param name="receiver">User that receive message</param>
        /// <param name="text">Messagetext</param>
        /// <returns>New message</returns>
        public Message AddNewMessageToConversation(long conversationId, User sender, User receiver, string text, bool hasRequestRecieverUnreadMessages)
        {
            var dbConversation = _conversationRepository.Find(f => f.Id == conversationId);

            if (hasRequestRecieverUnreadMessages)
            {
                dbConversation.HasRecieverUnreadMessages = true;
            }

            var dbSender   = _userRepository.Find(f => f.Id.ToString() == sender.Id);
            var dbReceiver = _userRepository.Find(f => f.Id.ToString() == receiver.Id);

            var newMessage = new DbMessage();

            newMessage.CreationDate = System.DateTime.Now;
            newMessage.Sender       = dbSender;
            newMessage.Receiver     = dbReceiver;
            newMessage.Text         = text;
            newMessage.Conversation = dbConversation;

            _messagesRepository.Insert(newMessage);

            var mappedMessage = Mapper.Map(newMessage, new Message());

            return(mappedMessage);
        }
Exemplo n.º 2
0
        public async ValueTask <bool> PostChatAsync(ChatMessage msg)
        {
            try
            {
                var u = AccountManager.GetCurrentUser();
                if (u is null)
                {
                    return(false);
                }
                var ir = new DbMessage
                {
                    SenderId   = u.Username,
                    ReceiverId = msg.Remote.Username,
                    Content    = msg.Content
                };
                await Db.Messages.AddAsync(ir);

                await Db.SaveChangesAsync();

                return(true);
            }
            catch (Exception e)
            {
                Logger.LogError(e.Message);

                return(false);
            }
        }
Exemplo n.º 3
0
        /// <summary>
        /// 批量保存(只适用于insert语句)
        /// </summary>
        /// <param name="dt">要插入的数据源</param>
        /// <param name="list">要插入的列名集合</param>
        /// <param name="tablename">要插入的表名</param>
        public DbMessage SBulkToDb(DataTable dt, List <string> list, string tablename)
        {
            DbMessage message = new DbMessage();

            try
            {
                Database db = new DatabaseProviderFactory().Create(_connectionString);
                if (IsMySqlDb(db))
                {
                    message.Message = "批量插入暂不支持MySql数据库";
                    message.Success = false;
                    return(message);
                }
                SqlConnection sqlConn  = new SqlConnection(db.ConnectionString);
                SqlBulkCopy   bulkCopy = new SqlBulkCopy(sqlConn)
                {
                    DestinationTableName = tablename,
                    BatchSize            = dt.Rows.Count
                };
                if (list != null && list.Count > 0)
                {
                    list.ForEach(x =>
                    {
                        bulkCopy.ColumnMappings.Add(x, x);
                    });
                }
                else
                {
                    foreach (DataColumn column in dt.Columns)
                    {
                        bulkCopy.ColumnMappings.Add(column.ColumnName, column.ColumnName);
                    }
                }
                try
                {
                    Stopwatch watch = new Stopwatch();
                    watch.Start();
                    sqlConn.Open();
                    if (dt.Rows.Count != 0)
                    {
                        bulkCopy.WriteToServer(dt);
                    }
                    watch.Stop();
                    message.Message = "插入耗时:" + watch.Elapsed.Seconds;
                    message.Success = true;
                }
                finally
                {
                    sqlConn.Close();
                    bulkCopy.Close();
                }
            }
            catch (Exception exception)
            {
                message.Message = exception.Message;
                message.Success = false;
            }

            return(message);
        }
Exemplo n.º 4
0
        /// <summary>
        /// Open new conversation for AccessRequest
        /// </summary>
        /// <param name="accessRequestId">Access request identifier</param>
        /// <param name="requesterId">Unique identifier of requester</param>
        /// <param name="receiverId">Unique identifier of requester conversation messages</param>
        /// <param name="subject">Subject of created conversation</param>
        /// <param name="message">Message of created conversation</param>
        /// <returns>New conversation</returns>
        public Conversation OpenConversationFor(long accessRequestId, string requesterId, string receiverId,
                                                string subject, string message)
        {
            var dbAccessRequest = _accessRequestRepository.Find(f => f.Id == accessRequestId);

            var dbRequester = _userRepository.Find(f => f.Id.ToString() == requesterId);
            var dbReceiver  = _userRepository.Find(f => f.Id.ToString() == receiverId);

            var newConversation = new DbConversation();

            newConversation.Request   = dbAccessRequest;
            newConversation.Requester = dbRequester;
            newConversation.Receiver  = dbReceiver;
            newConversation.Status    = DbAccessRequestStatus.Open;
            newConversation.HasRecieverUnreadMessages = true;
            _conversationRepository.Insert(newConversation);

            //create first initial message
            var newMessage = new DbMessage();

            newMessage.CreationDate = System.DateTime.Now;
            newMessage.Sender       = dbRequester;
            newMessage.Receiver     = dbReceiver;
            newMessage.Text         = message;
            newMessage.Conversation = newConversation;
            _messagesRepository.Insert(newMessage);

            var mappedConversation = Mapper.Map(newConversation, new Conversation());

            return(mappedConversation);
        }
Exemplo n.º 5
0
        public async Task InsertTest()
        {
            var ctx  = new DbContext(_cs);
            var item = new DbMessage()
            {
                Id       = _messageId,
                Body     = "Body test",
                AuthorId = _creatorId,
                Created  = new DateTime(2019, 1, 1, 22, 23, 00),
                IsRead   = false,
                TopicId  = _topicId
            };
            DbMessage message;

            try
            {
                message = await ctx.Messages.Create(item);

                Assert.AreEqual(item.Id, message.Id);
            }
            catch (MySqlException ex)
            {
                Debug.WriteLine(ex);
                await ctx.Messages.Delete(_messageId);

                message = await ctx.Messages.Create(item);

                Assert.AreEqual(item.Id, message.Id);
            }
        }
Exemplo n.º 6
0
        public async Task <DbMessage> CreateAsync(DbMessage request)
        {
            if (request is null)
            {
                return(null);
            }

            _provider.Messages.Add(request);
            await _provider.SaveAsync();

            return(request);
        }
Exemplo n.º 7
0
        public DbMessage Save(DbMessage message)
        {
            message.Id        = Guid.NewGuid().ToString();
            message.Timestamp = DateTime.UtcNow.Ticks;

            using var context = contextFactory.Create();
            context.Messages.Add(message);

            context.SaveChanges();

            return(message);
        }
        public async Task <Result> HandleAsync(MessageTreatedEvent domainEvent, IEventContext context = null)
        {
            var dbMessage = new DbMessage(domainEvent.TreatedMessageId)
            {
                Message = domainEvent.TreatedMessage
            };

            _messageRepository.MarkForInsert(dbMessage);
            await _messageRepository.SaveAsync().ConfigureAwait(false);

            return(Result.Ok());
        }
Exemplo n.º 9
0
        /// <summary>
        /// 根据给的实体类删除数据,删除条件不能为null
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="t"></param>
        /// <returns>是否删除成功,删除成功返回语句,删除失败抛出异常</returns>
        public DbMessage Delete <T>(T t)
        {
            DbMessage message = new DbMessage();

            if (t == null)
            {
                message.Success = false;
                message.Message = "传入的参数为null,不做任何操作";
                return(message);
            }
            try
            {
                Database     db         = new DatabaseProviderFactory().Create(_connectionString);
                List <Ceils> ceilsList  = new List <Ceils>();
                var          type       = t.GetType();//type.tostring()
                string       sql        = "delete  from  " + type.Name + " where 1 = 1 ";
                var          entityType = t.GetType().GetProperties();
                foreach (var p in entityType)
                {
                    Ceils ceil = new Ceils {
                        CeilName = p.Name.ToUpper()
                    };
                    object value = entityType.First(x => x.Name == p.Name).GetValue(t, null);
                    if (value == null)
                    {
                        continue;
                    }
                    ceil.CeilValue = value;
                    ceil.CeilType  = GetDbType(p.PropertyType.Name);
                    ceilsList.Add(ceil);
                }
                StringBuilder sbCondition = new StringBuilder();
                ceilsList.ForEach(x => { sbCondition.Append(" and " + x.CeilName + "=@" + x.CeilName); });

                sql += sbCondition;
                DbCommand cmd = db.GetSqlStringCommand(sql);
                ceilsList.ForEach(m =>
                {
                    db.AddInParameter(cmd, m.CeilName, m.CeilType, m.CeilValue);
                });
                db.ExecuteNonQuery(cmd);
                message.Success = true;
                message.Message = sql;
            }
            catch (Exception exception)
            {
                message.Success = false;
                message.Message = exception.Message;
            }

            return(message);
        }
Exemplo n.º 10
0
 /// <summary>
 /// Обновление элемента
 /// </summary>
 /// <param name="item">Элемент для обновления</param>
 /// <returns>Задача</returns>
 public async Task Update(DbMessage item)
 {
     const string sqlQuery = @"UPDATE dbmessages
                                 SET
                                 `id` = @Id,
                                 `body` = @Body,
                                 `created` = @Created,
                                 `authorid` = @AuthorId,
                                 `isread` = @IsRead,
                                 `topicid` = @TopicId
                                 WHERE `id` = @Id ;";
     await _dbConn.ExecuteAsync(sqlQuery, item);
 }
Exemplo n.º 11
0
        public async Task <DbMessage> StoreMessageToSendAsync(object body, IDictionary <string, string> headers)
        {
            var content = await _serialzationFactory.Default.SerializeAsync(body, headers);

            var dbMessage = new DbMessage()
            {
                Created = DateTime.Now,
                Id      = Guid.NewGuid(),
                Content = content.serializedBody,
                Headers = content.serializedHeaders
            };

            _messagesToSent.Add(dbMessage);

            return(dbMessage);
        }
Exemplo n.º 12
0
        public async Task <OperationResultResponse <StatusType> > ExecuteAsync(CreateMessageRequest request)
        {
            ValidationResult validationResult = await _validator.ValidateAsync(request);

            if (!validationResult.IsValid)
            {
                return(_responseCreator.CreateFailureResponse <StatusType>(
                           HttpStatusCode.BadRequest,
                           validationResult.Errors.Select(vf => vf.ErrorMessage).ToList()));
            }

            OperationResultResponse <StatusType> response = new();

            DbMessage message = await _repository.CreateAsync(_mapper.Map(request));

            try
            {
                await _chatHub.Clients.Group(request.ChannelId.ToString()).SendAsync(
                    "ReceiveMessage",
                    new MessageInfo()
                {
                    Id                  = message.Id,
                    Content             = message.Content,
                    Status              = message.Status,
                    ThreadMessagesCount = message.ThreadMessagesCount,
                    CreatedBy           = await GetUserAsync(response.Errors),
                    CreatedAtUtc        = message.CreatedAtUtc,
                    FilesIds            = null, //to do
                    Images              = null  //to do
                });

                response.Body   = StatusType.Sent;
                response.Status = OperationResultStatusType.FullSuccess;

                _httpContextAccessor.HttpContext.Response.StatusCode = (int)HttpStatusCode.Created;
            }
            catch (Exception ex)
            {
                _logger.LogError("Can't send message.", ex);
                response = _responseCreator.CreateFailureResponse <StatusType>(HttpStatusCode.InternalServerError);
            }

            return(response);
        }
Exemplo n.º 13
0
        public async Task <string> Send([FromBody] Message message)
        {
            var isSendToAllRecipienrs = _notificationService.TryNotifyRecepients(message.RecipientIds, message.Body);

            // In real app it is better to use mapper instead of this part
            var dbMessage = new DbMessage
            {
                IsSent            = isSendToAllRecipienrs,
                Body              = message.Body,
                MessageRecipients = message.RecipientIds.Select(x => new DbMessageRecipient {
                    RecipientId = x
                }).ToList(),
                Subject = message.Subject
            };

            await _storageService.Add(dbMessage);

            return(dbMessage.Id);
        }
Exemplo n.º 14
0
        public MessageInfo Map(DbMessage dbMessage, UserInfo createdBy, List <ImageInfo> images)
        {
            if (dbMessage is null)
            {
                return(null);
            }

            return(new()
            {
                Id = dbMessage.Id,
                Content = dbMessage.Content,
                Status = dbMessage.Status,
                ThreadMessagesCount = dbMessage.ThreadMessagesCount,
                CreatedBy = createdBy,
                CreatedAtUtc = dbMessage.CreatedAtUtc,
                FilesIds = dbMessage.Files?.Select(mf => mf.FileId).ToList(),
                Images = images
            });
        }
Exemplo n.º 15
0
        public async Task <ActionResult> AddToTopic([FromRoute] long id, [FromBody] AddMessageModel message)
        {
            try
            {
                var user = await _ctx.Users.GetUserByName(User.Identity.Name);

                message.Body = Regex.Replace(message.Body, "<.*?>", string.Empty);
                message.Body = message.Body.Replace("\r\n", "\n");
                var msgstring = message.Body.Split(new[] { "\n" }, StringSplitOptions.None);
                message.Body = string.Join("<br/>", msgstring);
                var msg = new DbMessage
                {
                    AuthorId = user.Id,
                    Body     = message.Body,
                    Created  = DateTime.Now,
                    IsRead   = false,
                    TopicId  = id
                };
                var dbMessage = await _ctx.Messages.Create(msg);

                await _ctx.Topics.UpdateTs(id);

                var model = Mapper.Map <MessageModel>(dbMessage);
                model.IsAuthor = true;

                MessagePolling.Publish(user.Id, new LpMessage
                {
                    Name   = user.FirstName,
                    id     = user.Id,
                    Topic  = id,
                    Unread = 1
                });
                return(Json(model));
            }
            catch (Exception ex)
            {
                _logger.LogError(ex.Message);
                return(BadRequest());
            }
        }
Exemplo n.º 16
0
        /// <summary>
        /// Создание элемента
        /// </summary>
        /// <param name="item">Новый элемент</param>
        /// <returns>Возвращает вставленный элемент</returns>
        public async Task <DbMessage> Create(DbMessage item)
        {
            var  sqlQuery = @"INSERT INTO dbmessages (
                            id,
                            `body`,
                            `created`,
                            `authorid`,
                            `isread`,
                            `topicid`) 
                            VALUES( 
                            @Id,
                            @Body, 
                            @Created, 
                            @AuthorId, 
                            @IsRead, 
                            @TopicId); 
                            
                            SELECT LAST_INSERT_ID()";
            long?id       = (await _dbConn.QueryAsync <long>(sqlQuery, item)).FirstOrDefault();

            item.Id = id.Value;
            return(item);
        }
Exemplo n.º 17
0
 private void OnVwapGainsTimerElapsed(object sender, ElapsedEventArgs e)
 {
     DoAction(() =>
     {
         var items = _vwapRequest.GetVwapGains(DateTime.UtcNow, "Bitmex");
         if (_vwaps.Length > 0)
         {
             var added = items.Select(i => i.Id).Except(_vwaps.Select(i => i.Id)).ToArray();
             if (added.Length > 0)
             {
                 var msg = new DbMessage {
                     VwapGains = new List <DbIndicatorVwapLite>()
                 };
                 foreach (var id in added)
                 {
                     msg.VwapGains.Add(items.Where(i => i.Id == id).Single());
                 }
                 _wsServer.SendMessage(msg);
             }
         }
         _vwaps = items;
     });
 }
Exemplo n.º 18
0
        public void SendMessage(DbMessage msg)
        {
            var json = JsonConvert.SerializeObject(msg);

            lock (_obj) _sockets.ForEach(s => s.Send(json));
        }
Exemplo n.º 19
0
        /// <summary>
        /// 实体类的插入方法
        /// Author:DUWENINK
        /// </summary>
        /// <typeparam name="T">实体类的类型,类型必须和表名严格对应</typeparam>
        /// <param name="t">实体类变量</param>
        /// <param name="primarykeyField">自增型主键,跳过插入</param>
        /// <param name="needParameterReturn">是否返回参数化sql</param>
        public DbMessage Insert <T>(T t, string primarykeyField = null, bool needParameterReturn = true)
        {
            DbMessage message = new DbMessage();

            try
            {
                Database     db         = new DatabaseProviderFactory().Create(_connectionString);
                List <Ceils> ceilsList  = new List <Ceils>();
                var          type       = t.GetType(); //type.tostring()
                string       sql        = "insert into " + type.Name;
                var          entityType = t.GetType().GetProperties();
                foreach (var p in entityType)
                {
                    Ceils ceil = new Ceils {
                        CeilName = p.Name.ToUpper()
                    };
                    if (ceil.CeilName == (primarykeyField == null ? string.Empty : primarykeyField.ToUpper()))
                    {
                        continue;
                    }
                    object value = entityType.First(x => x.Name == p.Name).GetValue(t, null);
                    if (value == null)
                    {
                        continue;
                    }
                    ceil.CeilValue = value;
                    ceil.CeilType  = GetDbType(p.PropertyType.Name);
                    ceilsList.Add(ceil);
                }
                StringBuilder sbName  = new StringBuilder();
                StringBuilder sbValue = new StringBuilder();
                StringBuilder sbText  = new StringBuilder();
                sbName.Append(IsMySqlDb(db) ? "(" : "([");
                sbValue.Append("(");
                sbText.Append("(");
                if (IsMySqlDb(db))
                {
                    for (int i = 0; i < ceilsList.Count; i++)
                    {
                        sbName.Append(ceilsList[i].CeilName + (i == ceilsList.Count - 1 ? string.Empty : ","));
                        sbValue.Append("@" + ceilsList[i].CeilName + (i == ceilsList.Count - 1 ? string.Empty : ","));
                        sbText.Append("'" + ceilsList[i].CeilValue + "'" + (i == ceilsList.Count - 1 ? string.Empty : ","));
                    }
                }
                else
                {
                    for (int i = 0; i < ceilsList.Count; i++)
                    {
                        sbName.Append(ceilsList[i].CeilName + (i == ceilsList.Count - 1 ? "]" : "],["));
                        sbValue.Append("@" + ceilsList[i].CeilName + (i == ceilsList.Count - 1 ? string.Empty : ","));
                        sbText.Append("'" + ceilsList[i].CeilValue + "'" + (i == ceilsList.Count - 1 ? string.Empty : ","));
                    }
                }

                sbName.Append(")");
                sbValue.Append(")");
                sbText.Append(")");
                sql = sql + sbName + (IsMySqlDb(db) ? "value" : "values") + (needParameterReturn? sbValue.ToString(): sbText.ToString());
                DbCommand cmd = db.GetSqlStringCommand(sql);
                ceilsList.ForEach(m => { db.AddInParameter(cmd, m.CeilName, m.CeilType, m.CeilValue); });
                db.ExecuteNonQuery(cmd);
                message.Success = true;
                message.Message = sql;
            }
            catch (Exception exception)
            {
                message.Success = false;
                message.Message = exception.Message;
            }

            return(message);
        }
Exemplo n.º 20
0
 public MessageController()
 {
     dbMessage  = new DbMessage();
     dbActivity = new DbActivity();
 }
Exemplo n.º 21
0
        /// <summary>
        /// xls
        /// </summary>
        /// <param name="dtOutDataTable"></param>
        /// <param name="mapList">Excel列的中文名和数据表中的英文名对应关系,共识:MapList中无论中文名还是英文名都不能重复</param>
        /// <param name="fileStream">文件流</param>
        /// <param name="isStrict">是否严格匹配,如果严格匹配的话,map需要和table相等,否则只匹配存在的</param>
        /// <param name="sheetIndex">第几个sheet页</param>
        /// <param name="startRow">从第几行开始读(这一行将会作为列名存在)</param>
        /// <returns></returns>
        public DbMessage ReadXlsToDataTable(ref DataTable dtOutDataTable, List <Entity.Map> mapList, Stream fileStream, bool isStrict = false, int sheetIndex = 0, int startRow = 0)
        {
            DbMessage message = new DbMessage();

            if (MapListHasRepeat(mapList))
            {
                message.Success = false;
                message.Message = "Map中有重复项";
                return(message);
            }
            try
            {
                //根据路径通过已存在的excel来创建HSSFWorkbook,即整个excel文档
                HSSFWorkbook workbook = new HSSFWorkbook(fileStream);
                //获取excel的第一个sheet
                ISheet sheet = workbook.GetSheetAt(sheetIndex);
                //DataTable table = new DataTable();
                //获取sheet的首行
                IRow headerRow = sheet.GetRow(startRow);
                //一行最后一个方格的编号 即总的列数
                int cellCount = headerRow.LastCellNum;
                for (int i = headerRow.FirstCellNum; i < cellCount; i++)
                {
                    var map = mapList.FirstOrDefault(c => c.ExcelName.Equals(headerRow.GetCell(i).StringCellValue));
                    if (map != null)
                    {
                        DataColumn column = new DataColumn(map.DbColunmsName);
                        dtOutDataTable.Columns.Add(column);
                    }
                }
                if (isStrict)
                {
                    if (headerRow.LastCellNum - headerRow.FirstCellNum != mapList.Count)
                    {
                        message.Success = false;
                        message.Message = "对应关系数量和DataTable列数不匹配";
                        return(message);
                    }
                    if (dtOutDataTable.Columns.Count < mapList.Count)
                    {
                        message.Success = false;
                        message.Message = "以下MapList在Excel中找不到对应关系:" + string.Join(";", mapList.ConvertAll(c => c.DbColunmsName).Except(dtOutDataTable.GetColumnsStringList()));
                        return(message);
                    }
                }



                //最后一列的标号  即总的行数

                for (int i = (sheet.FirstRowNum + 1); i <= sheet.LastRowNum; i++)
                {
                    IRow row = sheet.GetRow(i);
                    if (row == null)
                    {
                        continue;
                    }
                    DataRow dataRow = dtOutDataTable.NewRow();
                    for (int j = row.FirstCellNum; j < cellCount; j++)
                    {
                        if (row.GetCell(j) != null)
                        {
                            dataRow[j] = row.GetCell(j).ToString();
                        }
                    }

                    dtOutDataTable.Rows.Add(dataRow);
                }

                var totalRows = sheet.LastRowNum - sheet.FirstRowNum;
                message.Success = true;
                message.Message =
                    $"从第 {sheetIndex} 个Sheet {startRow} 行开始读取的数据;\r\n严格模式: {(isStrict ? "开启" : "关闭")} ;\r\n共读取数据: {totalRows} 行;";
            }
            catch (Exception exception)
            {
                message.Success = false;
                message.Message = exception.Message;
            }

            return(message);
        }
Exemplo n.º 22
0
        public override async Task <bool> RunAsync()
        {
            try
            {
                await Task.Delay(TimeSpan.FromSeconds(5));

                //Execute a messages request for the chat.
                var response = await Interactor.ExecuteAsync(
                    new GetMessagesRequest
                {
                    ChatAddress    = new Address(_contact.ChatAddress),
                    ChatKeyPair    = _chatKeyPair,
                    ChatKeyAddress = new Address(_contact.ChatKeyAddress),
                    UserKeyPair    = _user.NtruKeyPair
                });

                if (response.Code == ResponseCode.Success)
                {
                    var messagesCount = Database.Message.GetMessagesCountByPublicKeyAddress(_contact.PublicKeyAddress);
                    if (messagesCount <= response.Messages.Count)
                    {
                        return(true);
                    }

                    _contact.ChatAddress = response.CurrentChatAddress.Value;
                    _chatKeyPair         = response.ChatKeyPair;

                    //Update the chat address for the chat.
                    Database.Contact.UpdateObject(_contact);

                    var newMessages = response.Messages.GetRange(messagesCount, response.Messages.Count - messagesCount);

                    foreach (var item in newMessages)
                    {
                        if (item == null)
                        {
                            return(false);
                        }

                        var owner = item.Signature != _contact.PublicKeyAddress.Substring(0, 30);
                        //Add the new message to the database and show a notification.
                        var message = new DbMessage()
                        {
                            ChatAddress = _contact.ChatAddress,
                            Value       = item.Message,
                            Date        = item.Date,
                            Signature   = item.Signature,
                            Owner       = owner
                        };

                        //Show a notification, if the user is not the sender.
                        if (!message.Owner)
                        {
                            Notification.Show(_contact.Name, message.Value);
                        }

                        Database.Message.AddObject(message);

                        await Task.Delay(TimeSpan.FromSeconds(1));
                    }

                    return(true);
                }

                return(false);
            }
            catch (Exception)
            {
                //Ignore
                return(false);
            }
        }
Exemplo n.º 23
0
 private void CashAppContext_OnProcessDbMessage(DbMessage message)
 {
 }
Exemplo n.º 24
0
        public async Task Add(DbMessage dbMessage)
        {
            await _inMemoryContext.Messages.AddAsync(dbMessage);

            await _inMemoryContext.SaveChangesAsync();
        }