using AutoMapper; using MagicCarpetContracts.AdapterContracts; using MagicCarpetContracts.AdapterContracts.OperationResponses; using MagicCarpetContracts.BindingModels; using MagicCarpetContracts.BuisnessLogicContracts; using MagicCarpetContracts.DataModels; using MagicCarpetContracts.Exceptions; using MagicCarpetContracts.Mapper; using MagicCarpetContracts.Resources; using MagicCarpetContracts.ViewModels; using Microsoft.Extensions.Localization; namespace MagicCarpetWebApi.Adapters; internal class ClientAdapter(IClientBusinessLogicContract clientBusinessLogicContract, IStringLocalizer localizer, ILogger logger) : IClientAdapter { private readonly IClientBusinessLogicContract _clientBusinessLogicContract = clientBusinessLogicContract; private readonly IStringLocalizer _localizer = localizer; private readonly ILogger _logger = logger; public ClientOperationResponse GetList() { try { return ClientOperationResponse.OK([.. _clientBusinessLogicContract.GetAllClients().Select(x => CustomMapper.MapObject(x))]); } catch (StorageException ex) { _logger.LogError(ex, "StorageException"); return ClientOperationResponse.InternalServerError(string.Format(_localizer["AdapterMessageStorageException"], ex.InnerException!.Message)); } catch (Exception ex) { _logger.LogError(ex, "Exception"); return ClientOperationResponse.InternalServerError(ex.Message); } } public ClientOperationResponse GetElement(string data) { try { return ClientOperationResponse.OK(CustomMapper.MapObject(_clientBusinessLogicContract.GetClientByData(data))); } catch (ArgumentNullException ex) { _logger.LogError(ex, "ArgumentNullException"); return ClientOperationResponse.BadRequest(_localizer["AdapterMessageEmptyDate"]); } catch (ElementNotFoundException ex) { _logger.LogError(ex, "ElementNotFoundException"); return ClientOperationResponse.NotFound(string.Format(_localizer["AdapterMessageElementNotFoundException"], data)); } catch (StorageException ex) { _logger.LogError(ex, "StorageException"); return ClientOperationResponse.InternalServerError(string.Format(_localizer["AdapterMessageElementNotFoundException"], data)); } catch (Exception ex) { _logger.LogError(ex, "Exception"); return ClientOperationResponse.InternalServerError(ex.Message); } } public ClientOperationResponse RegisterClient(ClientBindingModel clientModel) { try { _clientBusinessLogicContract.InsertClient(CustomMapper.MapObject(clientModel)); return ClientOperationResponse.NoContent(); } catch (ArgumentNullException ex) { _logger.LogError(ex, "ArgumentNullException"); return ClientOperationResponse.BadRequest(_localizer["AdapterMessageEmptyDate"]); } catch (ValidationException ex) { _logger.LogError(ex, "ValidationException"); return ClientOperationResponse.BadRequest(string.Format(_localizer["AdapterMessageValidationException"], ex.Message)); } catch (ElementExistsException ex) { _logger.LogError(ex, "ElementExistsException"); return ClientOperationResponse.BadRequest(ex.Message); } catch (StorageException ex) { _logger.LogError(ex, "StorageException"); return ClientOperationResponse.BadRequest(string.Format(_localizer["AdapterMessageStorageException"], ex.InnerException!.Message)); } catch (Exception ex) { _logger.LogError(ex, "Exception"); return ClientOperationResponse.InternalServerError(ex.Message); } } public ClientOperationResponse ChangeClientInfo(ClientBindingModel clientModel) { try { _clientBusinessLogicContract.UpdateClient(CustomMapper.MapObject(clientModel)); return ClientOperationResponse.NoContent(); } catch (ArgumentNullException ex) { _logger.LogError(ex, "ArgumentNullException"); return ClientOperationResponse.BadRequest(_localizer["AdapterMessageEmptyDate"]); } catch (ValidationException ex) { _logger.LogError(ex, "ValidationException"); return ClientOperationResponse.BadRequest( string.Format(_localizer["AdapterMessageValidationException"], ex.Message)); } catch (ElementNotFoundException ex) { _logger.LogError(ex, "ElementNotFoundException"); return ClientOperationResponse.BadRequest(string.Format(_localizer["AdapterMessageElementNotFoundException"], clientModel.Id)); } catch (ElementExistsException ex) { _logger.LogError(ex, "ElementExistsException"); return ClientOperationResponse.BadRequest(ex.Message); } catch (StorageException ex) { _logger.LogError(ex, "StorageException"); return ClientOperationResponse.BadRequest(string.Format(_localizer["AdapterMessageStorageException"], ex.InnerException!.Message)); } catch (Exception ex) { _logger.LogError(ex, "Exception"); return ClientOperationResponse.InternalServerError(ex.Message); } } public ClientOperationResponse RemoveClient(string id) { try { _clientBusinessLogicContract.DeleteClient(id); return ClientOperationResponse.NoContent(); } catch (ArgumentNullException ex) { _logger.LogError(ex, "ArgumentNullException"); return ClientOperationResponse.BadRequest(_localizer["AdapterMessageEmptyDate"]); } catch (ValidationException ex) { _logger.LogError(ex, "ValidationException"); return ClientOperationResponse.BadRequest(string.Format(_localizer["AdapterMessageValidationException"], ex.Message)); } catch (ElementNotFoundException ex) { _logger.LogError(ex, "ElementNotFoundException"); return ClientOperationResponse.BadRequest(string.Format(_localizer["AdapterMessageElementNotFoundException"], id)); } catch (StorageException ex) { _logger.LogError(ex, "StorageException"); return ClientOperationResponse.InternalServerError(string.Format(_localizer["AdapterMessageStorageException"], ex.InnerException!.Message)); } catch (Exception ex) { _logger.LogError(ex, "Exception"); return ClientOperationResponse.InternalServerError(ex.Message); } } }