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 EmployeeAdapter(IEmployeeBusinessLogicContract employeeBusinessLogicContract, IStringLocalizer localizer, ILogger logger) : IEmployeeAdapter { private readonly IEmployeeBusinessLogicContract _employeeBusinessLogicContract = employeeBusinessLogicContract; private readonly IStringLocalizer _localizer = localizer; private readonly ILogger _logger = logger; private EmployeeViewModel MapEmployeeViewModel(EmployeeDataModel source) { return CustomMapper.MapObject(source); } public EmployeeOperationResponse GetList(bool includeDeleted) { try { var data = _employeeBusinessLogicContract.GetAllEmployees(!includeDeleted); return EmployeeOperationResponse.OK(data.Select(MapEmployeeViewModel).ToList()); } catch (StorageException ex) { _logger.LogError(ex, "StorageException"); return EmployeeOperationResponse.InternalServerError(string.Format(_localizer["AdapterMessageStorageException"], ex.InnerException!.Message)); } catch (Exception ex) { _logger.LogError(ex, "Exception"); return EmployeeOperationResponse.InternalServerError(ex.Message); } } public EmployeeOperationResponse GetPostList(string id, bool includeDeleted) { try { var data = _employeeBusinessLogicContract.GetAllEmployeesByPost(id, !includeDeleted); return EmployeeOperationResponse.OK(data.Select(MapEmployeeViewModel).ToList()); } catch (ValidationException ex) { _logger.LogError(ex, "ValidationException"); return EmployeeOperationResponse.BadRequest(string.Format(_localizer["AdapterMessageValidationException"], ex.Message)); } catch (StorageException ex) { _logger.LogError(ex, "StorageException"); return EmployeeOperationResponse.InternalServerError(string.Format(_localizer["AdapterMessageStorageException"], ex.InnerException!.Message)); } catch (Exception ex) { _logger.LogError(ex, "Exception"); return EmployeeOperationResponse.InternalServerError(ex.Message); } } public EmployeeOperationResponse GetListByBirthDate(DateTime fromDate, DateTime toDate, bool includeDeleted) { try { var data = _employeeBusinessLogicContract.GetAllEmployeesByBirthDate( fromDate.ToUniversalTime(), toDate.ToUniversalTime(), !includeDeleted); return EmployeeOperationResponse.OK(data.Select(MapEmployeeViewModel).ToList()); } catch (IncorrectDatesException ex) { _logger.LogError(ex, "IncorrectDatesException"); return EmployeeOperationResponse.BadRequest(string.Format(_localizer["AdapterMessageIncorrectDatesException"], ex.Message)); } catch (StorageException ex) { _logger.LogError(ex, "StorageException"); return EmployeeOperationResponse.InternalServerError(string.Format(_localizer["AdapterMessageStorageException"], ex.InnerException!.Message)); } catch (Exception ex) { _logger.LogError(ex, "Exception"); return EmployeeOperationResponse.InternalServerError(ex.Message); } } public EmployeeOperationResponse GetListByEmploymentDate(DateTime fromDate, DateTime toDate, bool includeDeleted) { try { var data = _employeeBusinessLogicContract.GetAllEmployeesByEmploymentDate( fromDate.ToUniversalTime(), toDate.ToUniversalTime(), !includeDeleted); return EmployeeOperationResponse.OK(data.Select(MapEmployeeViewModel).ToList()); } catch (IncorrectDatesException ex) { _logger.LogError(ex, "IncorrectDatesException"); return EmployeeOperationResponse.BadRequest(string.Format(_localizer["AdapterMessageIncorrectDatesException"], ex.Message)); } catch (StorageException ex) { _logger.LogError(ex, "StorageException"); return EmployeeOperationResponse.InternalServerError(string.Format(_localizer["AdapterMessageStorageException"], ex.InnerException!.Message)); } catch (Exception ex) { _logger.LogError(ex, "Exception"); return EmployeeOperationResponse.InternalServerError(ex.Message); } } public EmployeeOperationResponse GetElement(string data) { try { var employee = _employeeBusinessLogicContract.GetEmployeeByData(data); return EmployeeOperationResponse.OK(MapEmployeeViewModel(employee)); } catch (ArgumentNullException ex) { _logger.LogError(ex, "ArgumentNullException"); return EmployeeOperationResponse.BadRequest(_localizer["AdapterMessageEmptyDate"]); } catch (ValidationException ex) { _logger.LogError(ex, "ValidationException"); return EmployeeOperationResponse.BadRequest(string.Format(_localizer["AdapterMessageValidationException"], ex.Message)); } catch (ElementNotFoundException ex) { _logger.LogError(ex, "ElementNotFoundException"); return EmployeeOperationResponse.NotFound(string.Format(_localizer["AdapterMessageElementNotFoundException"], data)); } catch (StorageException ex) { _logger.LogError(ex, "StorageException"); return EmployeeOperationResponse.InternalServerError(string.Format(_localizer["AdapterMessageStorageException"], ex.InnerException!.Message)); } catch (Exception ex) { _logger.LogError(ex, "Exception"); return EmployeeOperationResponse.InternalServerError(ex.Message); } } public EmployeeOperationResponse RegisterEmployee(EmployeeBindingModel employeeModel) { try { var dataModel = CustomMapper.MapObject(employeeModel); _employeeBusinessLogicContract.InsertEmployee(dataModel); return EmployeeOperationResponse.NoContent(); } catch (ArgumentNullException ex) { _logger.LogError(ex, "ArgumentNullException"); return EmployeeOperationResponse.BadRequest(_localizer["AdapterMessageEmptyDate"]); } catch (ValidationException ex) { _logger.LogError(ex, "ValidationException"); return EmployeeOperationResponse.BadRequest(string.Format(_localizer["AdapterMessageValidationException"], ex.Message)); } catch (ElementExistsException ex) { _logger.LogError(ex, "ElementExistsException"); return EmployeeOperationResponse.BadRequest(ex.Message); } catch (StorageException ex) { _logger.LogError(ex, "StorageException"); return EmployeeOperationResponse.InternalServerError(string.Format(_localizer["AdapterMessageStorageException"], ex.InnerException!.Message)); } catch (Exception ex) { _logger.LogError(ex, "Exception"); return EmployeeOperationResponse.InternalServerError(ex.Message); } } public EmployeeOperationResponse ChangeEmployeeInfo(EmployeeBindingModel employeeModel) { try { var dataModel = CustomMapper.MapObject(employeeModel); _employeeBusinessLogicContract.UpdateEmployee(dataModel); return EmployeeOperationResponse.NoContent(); } catch (ArgumentNullException ex) { _logger.LogError(ex, "ArgumentNullException"); return EmployeeOperationResponse.BadRequest(_localizer["AdapterMessageEmptyDate"]); } catch (ValidationException ex) { _logger.LogError(ex, "ValidationException"); return EmployeeOperationResponse.BadRequest(string.Format(_localizer["AdapterMessageValidationException"], ex.Message)); } catch (ElementNotFoundException ex) { _logger.LogError(ex, "ElementNotFoundException"); return EmployeeOperationResponse.BadRequest(string.Format(_localizer["AdapterMessageElementNotFoundException"], employeeModel.Id)); } catch (ElementExistsException ex) { _logger.LogError(ex, "ElementExistsException"); return EmployeeOperationResponse.BadRequest(ex.Message); } catch (StorageException ex) { _logger.LogError(ex, "StorageException"); return EmployeeOperationResponse.InternalServerError(string.Format(_localizer["AdapterMessageStorageException"], ex.InnerException!.Message)); } catch (Exception ex) { _logger.LogError(ex, "Exception"); return EmployeeOperationResponse.InternalServerError(ex.Message); } } public EmployeeOperationResponse RemoveEmployee(string id) { try { _employeeBusinessLogicContract.DeleteEmployee(id); return EmployeeOperationResponse.NoContent(); } catch (ArgumentNullException ex) { _logger.LogError(ex, "ArgumentNullException"); return EmployeeOperationResponse.BadRequest(_localizer["AdapterMessageEmptyDate"]); } catch (ValidationException ex) { _logger.LogError(ex, "ValidationException"); return EmployeeOperationResponse.BadRequest(string.Format(_localizer["AdapterMessageValidationException"], ex.Message)); } catch (ElementNotFoundException ex) { _logger.LogError(ex, "ElementNotFoundException"); return EmployeeOperationResponse.BadRequest(string.Format(_localizer["AdapterMessageElementNotFoundException"], id)); } catch (StorageException ex) { _logger.LogError(ex, "StorageException"); return EmployeeOperationResponse.InternalServerError(string.Format(_localizer["AdapterMessageStorageException"], ex.InnerException!.Message)); } catch (Exception ex) { _logger.LogError(ex, "Exception"); return EmployeeOperationResponse.InternalServerError(ex.Message); } } }