using System.Net.Http.Headers; using CommunityToolkit.Mvvm.Messaging; using MauiApp.Core.Business.Contracts; using MauiApp.Core.RestClient.IntegryApi.Contracts; using MauiApp.Core.RestClient.IntegryApi.Dto; using MauiApp.Core.RestClient.IntegryApi.Exceptions; namespace MauiApp.Core.RestClient.IntegryApi; public class IntegryApiRestClient : ApiRestClient, IIntegryApiRestClient { private readonly IMessenger _messenger; private readonly IUserSessionService _userSessionService; public IntegryApiRestClient(IUserSessionService userSessionService, IMessenger messenger) { _userSessionService = userSessionService; _messenger = messenger; } public async Task Post(string url, object body, IDictionary queryParams = null, HttpClient httpClient = null) { queryParams ??= new Dictionary(); if(_userSessionService?.Session?.ProfileDb != null) queryParams.TryAdd("profileDb", _userSessionService.Session.ProfileDb); var result = await base.Post>(url, body, queryParams, httpClient); if (result?.Esito == -1) { throw new RestException(result.ErrorMessage); } return result.Dto ?? result.Entity; } public async Task Get(string url, IDictionary queryParams = null, HttpClient httpClient = null) { queryParams ??= new Dictionary(); if (_userSessionService?.Session?.ProfileDb != null) queryParams.TryAdd("profileDb", _userSessionService.Session.ProfileDb); var result = await base.Get>(url, queryParams, httpClient); if (result?.Esito == -1) { throw new RestException(result.ErrorMessage); } return result.Dto ?? result.Entity; } public async Task AuthorizedPost(string url, object body, IDictionary queryParams = null, HttpClient httpClient = null) { //if (!_userDataSession.IsAuthorized()) //{ // if (!_userDataSession.IsRefreshTokenValid()) // { // _messenger.Send(new NewLoginNeededMessage()); // return default; // } // else // { // await _appAuthenticationStateProvider.RefreshTokens(); // } //} httpClient ??= new HttpClient(); httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", _userSessionService.Session.AccessToken); queryParams ??= new Dictionary(); queryParams.TryAdd("profileDb", _userSessionService.Session.ProfileDb); var result = await base.Post>(url, body, queryParams, httpClient); if (result?.Esito == -1) { throw new RestException(result.ErrorMessage); } return result.Dto ?? result.Entity; } public async Task AuthorizedGet(string url, IDictionary queryParams = null, HttpClient httpClient = null) { //if (!_userDataSession.IsAuthorized()) //{ // if (!_userDataSession.IsRefreshTokenValid()) // { // _messenger.Send(new NewLoginNeededMessage()); // return default; // } // else // { // await _appAuthenticationStateProvider.RefreshTokens(); // } //} httpClient ??= new HttpClient(); httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", _userSessionService.Session.AccessToken); queryParams ??= new Dictionary(); queryParams.TryAdd("profileDb", _userSessionService.Session.ProfileDb); var result = await base.Get>(url, queryParams, httpClient); if (result?.Esito == -1) { throw new RestException(result.ErrorMessage); } return result.Dto ?? result.Entity; } }