using RestSharp; using Store.Management.Api.Models; using Store.Management.Api.Transport; namespace Store.Management.Api.Users; public interface IUserApi { Task> SearchAsync(UserSearchRequest request, CancellationToken cancellationToken = default); Task GetAsync(string? userName = null, CancellationToken cancellationToken = default); Task CreateAsync(UserCreateRequest request, CancellationToken cancellationToken = default); Task UpdateAsync(UserUpdateRequest request, CancellationToken cancellationToken = default); } internal sealed class UserApi(ApiTransport transport) : IUserApi { public Task> SearchAsync(UserSearchRequest request, CancellationToken cancellationToken = default) { ArgumentNullException.ThrowIfNull(request); return transport.GetRequiredAsync>("user/GetAllUser", Method.Post, request, cancellationToken: cancellationToken); } public Task GetAsync(string? userName = null, CancellationToken cancellationToken = default) => transport.GetRequiredAsync("user/GetUser", Method.Post, query: new Dictionary { ["userName"] = userName }, cancellationToken: cancellationToken); public Task CreateAsync(UserCreateRequest request, CancellationToken cancellationToken = default) { ArgumentNullException.ThrowIfNull(request); return transport.GetRequiredAsync("user/AddUser", Method.Post, request, cancellationToken: cancellationToken); } public Task UpdateAsync(UserUpdateRequest request, CancellationToken cancellationToken = default) { ArgumentNullException.ThrowIfNull(request); return transport.GetRequiredAsync("user/UpdateUser", Method.Post, request, cancellationToken: cancellationToken); } }