using AutoMapper; using DbFirst.Domain.DomainEntities; using DbFirst.Domain.Repositories; namespace DbFirst.Application.Catalogs; public class CatalogService : ICatalogService { private readonly ICatalogRepository _repository; private readonly IMapper _mapper; public CatalogService(ICatalogRepository repository, IMapper mapper) { _repository = repository; _mapper = mapper; } public async Task> GetAllAsync(CancellationToken cancellationToken = default) { var domainItems = await _repository.GetAllAsync(cancellationToken); return _mapper.Map>(domainItems); } public async Task GetByIdAsync(int id, CancellationToken cancellationToken = default) { var domainItem = await _repository.GetByIdAsync(id, cancellationToken); return domainItem == null ? null : _mapper.Map(domainItem); } public async Task CreateAsync(CatalogWriteDto dto, CancellationToken cancellationToken = default) { var domainItem = _mapper.Map(dto); domainItem.AddedWho = "system"; domainItem.AddedWhen = DateTime.UtcNow; domainItem.ChangedWho = "system"; domainItem.ChangedWhen = DateTime.UtcNow; var created = await _repository.AddAsync(domainItem, cancellationToken); return _mapper.Map(created); } public async Task UpdateAsync(int id, CatalogWriteDto dto, CancellationToken cancellationToken = default) { var existing = await _repository.GetByIdAsync(id, cancellationToken); if (existing == null) { return false; } var domainItem = _mapper.Map(dto); domainItem.Guid = id; domainItem.AddedWho = existing.AddedWho; domainItem.AddedWhen = existing.AddedWhen; domainItem.ChangedWho = "system"; domainItem.ChangedWhen = DateTime.UtcNow; return await _repository.UpdateAsync(id, domainItem, cancellationToken); } public async Task UpdateWithStoredProcedureAsync(int id, CatalogWriteDto dto, CancellationToken cancellationToken = default) { var existing = await _repository.GetByIdAsync(id, cancellationToken); if (existing == null) { return null; } var domainItem = _mapper.Map(dto); domainItem.Guid = id; domainItem.AddedWho = existing.AddedWho; domainItem.AddedWhen = existing.AddedWhen; domainItem.ChangedWho = "system"; domainItem.ChangedWhen = DateTime.UtcNow; var updated = await _repository.UpdateWithStoredProcedureAsync(domainItem, cancellationToken); return updated == null ? null : _mapper.Map(updated); } public async Task DeleteAsync(int id, CancellationToken cancellationToken = default) { return await _repository.DeleteAsync(id, cancellationToken); } public async Task DeleteWithStoredProcedureAsync(int id, CancellationToken cancellationToken = default) { return await _repository.DeleteWithStoredProcedureAsync(id, cancellationToken); } }