152 lines
No EOL
4.8 KiB
C#
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;
|
|
}
|
|
}
|
|
} |