| namespace GrpcShared.Interfaces | namespace GrpcShared.Interfaces | ||||
| { | { | ||||
| [Service] | [Service] | ||||
| public interface ISearchService | |||||
| public interface ITrackService | |||||
| { | { | ||||
| Task<SearchResponse> ListSearchAsync(SearchRequest request); | Task<SearchResponse> ListSearchAsync(SearchRequest request); | ||||
| } | } |
| //app.MapGrpcService<WeatherService>(); | //app.MapGrpcService<WeatherService>(); | ||||
| app.MapGrpcService<AuthService>().EnableGrpcWeb(); | app.MapGrpcService<AuthService>().EnableGrpcWeb(); | ||||
| app.MapGrpcService<SearchService>().EnableGrpcWeb(); | |||||
| app.MapGrpcService<TrackService>().EnableGrpcWeb(); | |||||
| app.MapCodeFirstGrpcReflectionService(); | app.MapCodeFirstGrpcReflectionService(); | ||||
| @using NemAnBlazor.Services.Interfaces | @using NemAnBlazor.Services.Interfaces | ||||
| @*@inject HttpClient Http*@ | @*@inject HttpClient Http*@ | ||||
| @inject Blazored.SessionStorage.ISessionStorageService sessionStorage | @inject Blazored.SessionStorage.ISessionStorageService sessionStorage | ||||
| @inject ISearchClientService SearchService | |||||
| @inject ITrackClientService SearchService | |||||
| <PageTitle>Search</PageTitle> | <PageTitle>Search</PageTitle> |
| @using NemAnBlazor.Services.Interfaces | @using NemAnBlazor.Services.Interfaces | ||||
| @inject NavigationManager NavigationManager | @inject NavigationManager NavigationManager | ||||
| @inject IAuthClientService AuthService | @inject IAuthClientService AuthService | ||||
| @inject ISearchClientService SearchService | |||||
| @inject ITrackClientService SearchService | |||||
| <PageTitle>Index</PageTitle> | <PageTitle>Index</PageTitle> | ||||
| <h1>Pozdrav Diligent!</h1> | <h1>Pozdrav Diligent!</h1> |
| return channel; | return channel; | ||||
| }); | }); | ||||
| builder.Services.AddScoped<ISearchClientService, SearchClientService>(); | |||||
| builder.Services.AddScoped<ITrackClientService, TrackClientService>(); | |||||
| builder.Services.AddScoped<IAuthClientService, AuthClientService>(); | builder.Services.AddScoped<IAuthClientService, AuthClientService>(); | ||||
| builder.Services.AddBlazoredSessionStorage(); | builder.Services.AddBlazoredSessionStorage(); | ||||
| namespace NemAnBlazor.Services.Interfaces | namespace NemAnBlazor.Services.Interfaces | ||||
| { | { | ||||
| public interface ISearchClientService | |||||
| public interface ITrackClientService | |||||
| { | { | ||||
| Task<SearchResponse> GetListSearchAsync(SearchRequest request); | Task<SearchResponse> GetListSearchAsync(SearchRequest request); | ||||
| } | } |
| namespace NemAnBlazor.Services | namespace NemAnBlazor.Services | ||||
| { | { | ||||
| public class SearchClientService : ISearchClientService | |||||
| public class TrackClientService : ITrackClientService | |||||
| { | { | ||||
| private ISearchService _serviceClient; | |||||
| private ITrackService _serviceClient; | |||||
| public SearchClientService(GrpcChannel grpcChannel) | |||||
| public TrackClientService(GrpcChannel grpcChannel) | |||||
| { | { | ||||
| _serviceClient = grpcChannel.CreateGrpcService<ISearchService>(); | |||||
| _serviceClient = grpcChannel.CreateGrpcService<ITrackService>(); | |||||
| } | } | ||||
| public async Task<SearchResponse> GetListSearchAsync(SearchRequest request) | public async Task<SearchResponse> GetListSearchAsync(SearchRequest request) |
| namespace SpotifyService.Services | namespace SpotifyService.Services | ||||
| { | { | ||||
| public class SearchService : ISearchService | |||||
| public class TrackService : ITrackService | |||||
| { | { | ||||
| private readonly IHttpClientFactory _httpClientFactory; | private readonly IHttpClientFactory _httpClientFactory; | ||||
| public SearchService(IHttpClientFactory httpClientFactory) | |||||
| public TrackService(IHttpClientFactory httpClientFactory) | |||||
| { | { | ||||
| _httpClientFactory = httpClientFactory; | _httpClientFactory = httpClientFactory; | ||||
| } | } | ||||
| var searchResult = await client.GetAsync($"search?q={request.Query}&type={request.Type}"); | var searchResult = await client.GetAsync($"search?q={request.Query}&type={request.Type}"); | ||||
| var responses = JsonConvert.DeserializeObject<SearchResponse>(await searchResult.Content.ReadAsStringAsync())!; | var responses = JsonConvert.DeserializeObject<SearchResponse>(await searchResult.Content.ReadAsStringAsync())!; | ||||
| return new SearchResponse | return new SearchResponse |