66 lines
2.0 KiB
C#
66 lines
2.0 KiB
C#
using System.Net.Http.Json;
|
|
using System.Text;
|
|
using System.Text.Json;
|
|
using AutoCatCore.Model;
|
|
using AutoCatCore.Model.Requests;
|
|
using AutoCatCore.Services.Storage;
|
|
|
|
namespace AutoCatCore.Services.Api;
|
|
|
|
public class ApiService : IApiService
|
|
{
|
|
private readonly HttpClient _httpClient;
|
|
|
|
public ApiService(IStorageService storageService)
|
|
{
|
|
_httpClient = new HttpClient();
|
|
_httpClient.BaseAddress = new Uri("http://127.0.0.1:3000");
|
|
SetAccessToken(storageService.AuthToken);
|
|
}
|
|
|
|
private static async Task<T> GetDataOrThrow<T>(HttpResponseMessage response)
|
|
{
|
|
string responseStr = await response.Content.ReadAsStringAsync();
|
|
|
|
var resp = JsonSerializer.Deserialize<Response<T>>(responseStr, new JsonSerializerOptions {
|
|
PropertyNameCaseInsensitive = true
|
|
});
|
|
|
|
if (resp is null)
|
|
throw new Exception("Error deserializing response");
|
|
|
|
if (resp.Success)
|
|
return resp.Data ?? throw new Exception("Empty response");
|
|
|
|
throw new Exception(resp.Error);
|
|
}
|
|
|
|
private void SetAccessToken(string? token)
|
|
{
|
|
if (token is null)
|
|
return;
|
|
|
|
_httpClient.DefaultRequestHeaders.Remove("Authorization");
|
|
_httpClient.DefaultRequestHeaders.Add("Authorization", $"Bearer {token}");
|
|
}
|
|
|
|
public async Task<User> Login(string email, string password)
|
|
{
|
|
var response = await _httpClient.PostAsJsonAsync("user/login", new { email, password });
|
|
var result = await GetDataOrThrow<User>(response);
|
|
SetAccessToken(result.Token);
|
|
return result;
|
|
}
|
|
|
|
public async Task<PagedResponse<Vehicle>> GetVehicles()
|
|
{
|
|
var response = await _httpClient.GetAsync("vehicles");
|
|
return await GetDataOrThrow<PagedResponse<Vehicle>>(response);
|
|
}
|
|
|
|
public async Task<Vehicle> CheckNumber(string number)
|
|
{
|
|
var response = await _httpClient.PostAsJsonAsync("vehicles/check", new { number });
|
|
return await GetDataOrThrow<Vehicle>(response);
|
|
}
|
|
} |