Как сделать что бы сообщения пользователей в чате написанном на Blazor добавлялись в БД?

Как сделать что бы сообщения пользователей в чате написанном на Blazor Server добавлялись в БД, и что бы если пользователь, которому было отправлено сообщение, был не онлайн во время отправки сообщения, когда он зашел выскакивало уведомление что есть непрочитанные сообщения?

//Код чата

 HubConnection hubConnection;
    private List<string> messages = new List<string>();
    private List<string> privateMessages = new List<string>();
    private string messageForBoard;
    private string userName;
    private string messageInput;
    private string selectedUser;
    private List<string> UserList;

    private string BoxCss = "none";

    private ElementReference elementRef;

    [Inject]
    public CookiesProvider CookiesProvider { get; set; }


    protected override async Task OnInitializedAsync()
    {
        var container = new CookieContainer();
        var cookie = new Cookie()
            {
                Name = ".AspNetCore.Identity.Application",
                Domain = "localhost",
                Value = CookiesProvider.Cookie
            };

        container.Add(cookie);

        hubConnection = new HubConnectionBuilder()
       .WithUrl(NavigationManager.ToAbsoluteUri("/chathub"), options =>
       {
           options.Cookies = container;
       }).Build();

        hubConnection.On<string, string>("ReceiveMessage", (user, message) =>
        {
            var encodedMsg = $"{user}: {message}";
            messages.Add(encodedMsg);
            InvokeAsync(() => StateHasChanged());
        });

        hubConnection.On<string>("ReceiveUserName", (name) =>
        {
            userName = name;

            InvokeAsync(() => StateHasChanged());
        });

        hubConnection.On<string>("MessageBoard", (message) =>
       {
           messageForBoard = message;

           InvokeAsync(() => StateHasChanged());
       });

        hubConnection.On<string, string>("ReceivePrivateMessage", (user, message) =>
        {
            var encodedMsg = $"{user}: {message}";
            privateMessages.Add(encodedMsg);

            InvokeAsync(() => StateHasChanged());
            toastService.ShowInfo($"Текст сообщения: {message}");
        });

        hubConnection.On<List<string>>("ReceiveInitializeUserList", (list) =>
        {
            UserList = list;

            InvokeAsync(() => StateHasChanged());
        });


        await hubConnection.StartAsync();
        await hubConnection.InvokeAsync("InitializeUserList");

    }
    protected override void OnAfterRender(bool firstRender)
    {
        elementRef.FocusAsync();
    }

    async Task Send() => await hubConnection.SendAsync("SendMessage", selectedUser, messageInput);

    public bool IsConnected => hubConnection.State == HubConnectionState.Connected;

    public void Dispose()
    {
        hubConnection.DisposeAsync();
    }

    public async ValueTask DisposeAsync()
    {
        await hubConnection.DisposeAsync();
    }

    private void NotificationHideShow()
    {

        if (BoxCss == "none") BoxCss = "block";
        else BoxCss = "none";
    }

//Модель сообщения

[Serializable]
    public class MessagesDB
    {
        [Key]
        public string? Id { get; set; }
        public string? WhoIs { get; set; }
        public string? Body { get; set; }
        public bool Mine { get; set; }
        public DateTime Time { get; set; }
        public string? ConnectionId { get; set; }
        public string CSS => Mine ? "sent" : "received";
    }

//Модель чата

[Serializable]
    public class ChatDB
    {
        [Key]
        public string? ConnectionId { get; set; }
        public string? Username { get; set; }
        public MessagesDB? MessagesDBs { get; set; }
    }

//База данных

public class ChatContext : DbContext
    {
        public ChatContext(DbContextOptions<ChatContext> options) : base(options)
        {

        }

        public DbSet<ChatDB>? Chats { get; set; }

        protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
        {
            if (!optionsBuilder.IsConfigured)
            {
                optionsBuilder.UseSqlite("Data Source=C:\\Users\\User\\source\\repos\\GodPlease\\GodPlease\\bin\\Debug\\net6.0\\ChatDB.db");
            }
        }


    }

Ответы (0 шт):