From f1a06726efc9c9cd3b3fd2a33605db303146dcf4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C2=96=C2=96AsTroLog?= Date: Fri, 10 Nov 2023 19:46:24 +0000 Subject: [PATCH] add chat query --- .../Pages/Index.razor.cs | 80 +++++++++++++------ .../Shared/NavMenu.razor.cs | 3 +- 2 files changed, 57 insertions(+), 26 deletions(-) diff --git a/ShoppingAssistantWebClient.Web/Pages/Index.razor.cs b/ShoppingAssistantWebClient.Web/Pages/Index.razor.cs index 601e4a9..492da25 100644 --- a/ShoppingAssistantWebClient.Web/Pages/Index.razor.cs +++ b/ShoppingAssistantWebClient.Web/Pages/Index.razor.cs @@ -1,8 +1,10 @@ using Microsoft.AspNetCore.Components; -using ShoppingAssistantWebClient.Web.Models; +using ShoppingAssistantWebClient.Web.Models.ProductSearch; +using ShoppingAssistantWebClient.Web.Models.Input; using GraphQL; using Newtonsoft.Json; using ShoppingAssistantWebClient.Web.Network; +using System; namespace ShoppingAssistantWebClient.Web.Pages @@ -14,6 +16,9 @@ namespace ShoppingAssistantWebClient.Web.Pages private ApiClient _apiClient { get; set; } [Inject] private NavigationManager Navigation { get; set; } + private MessageCreateDto messageCreateDto; + + private CancellationTokenSource cancelTokenSource; private string inputValue = ""; public bool isLoading = true; @@ -21,36 +26,61 @@ namespace ShoppingAssistantWebClient.Web.Pages private async Task CreateNewChat() { - if(inputValue!=""){ - - var type = selectedChoice; - - var firstMessageText= inputValue; - var request = new GraphQLRequest + try { - Query = @"mutation StartPersonalWishlist($type: String!, $firstMessageText: String!) { - startPersonalWishlist(dto: { type: $type, firstMessageText: $firstMessageText }) { - id - } - } - ", - - Variables = new + if (string.IsNullOrWhiteSpace(inputValue)) { - type, - firstMessageText + return; } - }; - var response = await _apiClient.QueryAsync(request); - var responseData = response.Data; - var chat_id = responseData.startPersonalWishlist.id; - var url = $"/chat/{chat_id}"; - Navigation.NavigateTo(url); + isLoading = true; + messageCreateDto = new MessageCreateDto { Text = inputValue }; + var type = selectedChoice; + var firstMessageText = $"[Question] What are you looking for? [Suggestions] " + inputValue; - } - + var request = new GraphQLRequest + { + Query = @" + mutation StartPersonalWishlist($type: String!, $firstMessageText: String!) { + startPersonalWishlist(dto: { type: $type, firstMessageText: $firstMessageText }) { + id + } + }", + Variables = new + { + type, + firstMessageText + } + }; + var response = await _apiClient.QueryAsync(request); + var responseData = response.Data; + var chatId = responseData?.startPersonalWishlist?.id; + isLoading = false; + var url = $"/chat/{chatId}"; + + cancelTokenSource = new CancellationTokenSource(); + var cancellationToken = cancelTokenSource.Token; + + var serverSentEvent = _apiClient.GetServerSentEventStreamed($"ProductsSearch/search/{chatId}", messageCreateDto, cancellationToken); + Navigation.NavigateTo(url); + await foreach (var sseEvent in serverSentEvent.WithCancellation(cancellationToken)) + { + // Handle each ServerSentEvent as needed + Console.WriteLine($"Received SSE Event: {sseEvent.Event}, Data: {sseEvent.Data}"); + } + + } + catch (Exception ex) + { + // Handle exceptions appropriately + Console.WriteLine($"Error in CreateNewChat: {ex.Message}"); + } + finally + { + isLoading = false; + cancelTokenSource?.Dispose(); + } } } diff --git a/ShoppingAssistantWebClient.Web/Shared/NavMenu.razor.cs b/ShoppingAssistantWebClient.Web/Shared/NavMenu.razor.cs index b4ca1e9..39d54a4 100644 --- a/ShoppingAssistantWebClient.Web/Shared/NavMenu.razor.cs +++ b/ShoppingAssistantWebClient.Web/Shared/NavMenu.razor.cs @@ -13,6 +13,7 @@ namespace ShoppingAssistantWebClient.Web.Shared private ApiClient _apiClient { get; set; } public List Wishlists { get; set; } public bool isLoading = true; + protected override async Task OnInitializedAsync() { await LoadMenus(); @@ -35,7 +36,7 @@ namespace ShoppingAssistantWebClient.Web.Shared Variables = new { pageNumber, - pageSize = 10, + pageSize = 40, } };