ultimate/Service/CompanyService.cs
Frede Hundewadt 6c13b606ef update
2023-12-11 14:05:07 +01:00

152 lines
No EOL
4.8 KiB
C#

// ***********************************************************************
// Assembly : Service
// Author : frede
// Created : 2023 06 11 08:44
//
// Last Modified By : frede
// Last Modified On : 2023 06 11 08:44
// ***********************************************************************
// <copyright file="CompanyService.cs" company="FCS">
// Copyright (C) 2023-2023 FCS Frede's Computer Services.
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU Affero General Public License as
// published by the Free Software Foundation, either version 3 of the
// License, or (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU Affero General Public License for more details.
//
// You should have received a copy of the GNU Affero General Public License
// along with this program. If not, see [https://www.gnu.org/licenses]
// </copyright>
// <summary></summary>
// ***********************************************************************
using AutoMapper;
using Contracts;
using Entities;
using Entities.Exceptions;
using Service.Contracts;
using Shared.DataTransferObjects;
namespace Service;
internal sealed class CompanyService : ICompanyService
{
private readonly IRepositoryManager _repository;
private readonly ILoggerManager _logger;
private readonly IMapper _mapper;
public CompanyService(IRepositoryManager repository, ILoggerManager logger, IMapper mapper)
{
_repository = repository;
_logger = logger;
_mapper = mapper;
}
public IEnumerable<CompanyDto> GetAllCompanies(bool trackChanges)
{
var companies = _repository.Company.GetAllCompanies(trackChanges);
var companiesDto = _mapper.Map<IEnumerable<CompanyDto>>(companies);
return companiesDto;
}
public CompanyDto GetCompany(Guid companyId, bool trackChanges)
{
var company = _repository.Company.GetCompany(companyId, trackChanges);
switch (company)
{
case null:
throw new CompanyNotFoundException(companyId);
default:
{
var companyDto = _mapper.Map<CompanyDto>(company);
return companyDto;
}
}
}
public CompanyDto CreateCompany(CompanyCreateDto? company)
{
var companyEntity = _mapper.Map<Company>(company);
_repository.Company.CreateCompany(companyEntity);
_repository.Save();
var result = _mapper.Map<CompanyDto>(companyEntity);
return result;
}
public IEnumerable<CompanyDto> GetByIds(IEnumerable<Guid> ids, bool trackChanges)
{
switch (ids)
{
case null:
throw new IdParametersBadRequestException();
}
var entities = _repository.Company.GetByIds(ids, trackChanges);
if (ids.Count() != entities.Count())
throw new CollectionByIdsBadRequestException();
var result = _mapper.Map<IEnumerable<CompanyDto>>(entities);
return result;
}
public (IEnumerable<CompanyDto> companies, string ids) CreateCompanyCollection(IEnumerable<CompanyCreateDto> companyCollection)
{
if (companyCollection is null)
{
throw new CollectionByIdsBadRequestException();
}
var entities = _mapper.Map<IEnumerable<Company>>(companyCollection);
foreach (var company in entities)
{
_repository.Company.CreateCompany(company);
}
_repository.Save();
var result = _mapper.Map<IEnumerable<CompanyDto>>(entities);
var ids = string.Join(",", entities.Select(c => c.Id));
return (result, ids);
}
public void DeleteCompany(Guid companyId, bool trackChanges)
{
var company = _repository.Company.GetCompany(companyId, trackChanges);
switch (company)
{
case null:
throw new CompanyNotFoundException(companyId);
default:
_repository.Company.DeleteCompany(company, trackChanges);
_repository.Save();
break;
}
}
public void UpdateCompany(Guid companyId, CompanyUpdateDto? companyUpdate, bool trackChanges)
{
var companyEntity = _repository.Company.GetCompany(companyId, trackChanges);
switch (companyEntity)
{
case null:
throw new CompanyNotFoundException(companyId);
default:
_mapper.Map(companyUpdate, companyEntity);
_repository.Save();
break;
}
}
}