using SecureBank.Common; using SecureBank.Common.Accounts; using SecureBank.Website.API; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace SecureBank.Website.Services { public interface IAccountsService { Task> CreateAccount(CreateAccountRequest data); Task> GetPasswordVariant(int accountId); Task> Authentication(int accountId, AuthenticationRequest data); Task> AuthenticationRefresh(); Task ChangePassword(ChangePasswordRequest data); Task>> GetAccounts(int? id = null, string? iban = null); Task ResetPassword(int accountId); Task UnlockAccount(int accountId); } public class AccountsService : IAccountsService { #region FIELDS private readonly APIClient _apiClient; private readonly APIEndpointsConfiguration _configuration; #endregion #region CONSTRUCTORS public AccountsService(APIClient apiClient, APIEndpointsConfiguration configuration) { _apiClient = apiClient; _configuration = configuration; } #endregion #region METHODS public async Task> CreateAccount(CreateAccountRequest data) { return await _apiClient.SendAsync(APIMethodType.POST, _configuration.AccountsCreateAccount, data); } public async Task> GetPasswordVariant(int accountId) { string url = string.Format(_configuration.AccountsGetPasswordVariant, accountId); return await _apiClient.SendAsync(APIMethodType.GET, url); } public async Task> Authentication(int accountId, AuthenticationRequest data) { return await _apiClient.SendAsync(APIMethodType.POST, _configuration.AccountsAuthentication, data); } public async Task> AuthenticationRefresh() { return await _apiClient.SendAsync(APIMethodType.POST, _configuration.AccountsAuthenticationRefresh); } public async Task ChangePassword(ChangePasswordRequest data) { return await _apiClient.SendAsync(APIMethodType.PATCH, _configuration.AccountsChangePassword, data); } public async Task>> GetAccounts(int? id = null, string? iban = null) { Dictionary query = new Dictionary(); if (id.HasValue) { query.Add("id", id.Value.ToString()); } if (iban is not null) { query.Add("iban", iban); } return await _apiClient.SendAsync>(APIMethodType.GET, _configuration.AccountsGetAccounts, query); } public async Task ResetPassword(int accountId) { string url = string.Format(_configuration.AccountsResetPassword, accountId); return await _apiClient.SendAsync(APIMethodType.PATCH, url); } public async Task UnlockAccount(int accountId) { string url = string.Format(_configuration.AccountsUnlockAccount, accountId); return await _apiClient.SendAsync(APIMethodType.PATCH, url); } #endregion } }