Enforce business rules for catalog title changes: only allow CatTitle to be edited when UpdateProcedure permits, with checks in the API, service, handler, and UI. This ensures consistent validation and user experience across backend and frontend.
79 lines
2.8 KiB
C#
79 lines
2.8 KiB
C#
using AutoMapper;
|
|
using DbFirst.Domain.Repositories;
|
|
using DbFirst.Domain.Entities;
|
|
using DbFirst.Domain;
|
|
|
|
namespace DbFirst.Application.Catalogs;
|
|
|
|
//TODO: create generic service to reduce code duplication
|
|
//TODO (TR): kod tekrar?n? azaltmak için generic bir servis/basit CRUD altyap?s? ekleyin
|
|
//TODO: implement CQRS pattern with MediatR
|
|
//TODO (TR): CQRS desenini MediatR ile uygulay?n
|
|
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<List<CatalogReadDto>> GetAllAsync(CancellationToken cancellationToken = default)
|
|
{
|
|
var items = await _repository.GetAllAsync(cancellationToken);
|
|
return _mapper.Map<List<CatalogReadDto>>(items);
|
|
}
|
|
|
|
public async Task<CatalogReadDto?> GetByIdAsync(int id, CancellationToken cancellationToken = default)
|
|
{
|
|
var item = await _repository.GetByIdAsync(id, cancellationToken);
|
|
return item == null ? null : _mapper.Map<CatalogReadDto>(item);
|
|
}
|
|
|
|
public async Task<CatalogReadDto?> CreateAsync(CatalogWriteDto dto, CancellationToken cancellationToken = default)
|
|
{
|
|
var existing = await _repository.GetByTitleAsync(dto.CatTitle, cancellationToken);
|
|
if (existing != null)
|
|
{
|
|
return null;
|
|
}
|
|
|
|
var entity = _mapper.Map<VwmyCatalog>(dto);
|
|
entity.AddedWho = "system";
|
|
entity.AddedWhen = DateTime.UtcNow;
|
|
entity.ChangedWho = "system";
|
|
entity.ChangedWhen = DateTime.UtcNow;
|
|
|
|
var created = await _repository.InsertAsync(entity, cancellationToken);
|
|
return _mapper.Map<CatalogReadDto>(created);
|
|
}
|
|
|
|
public async Task<CatalogReadDto?> UpdateAsync(int id, CatalogWriteDto dto, CancellationToken cancellationToken = default)
|
|
{
|
|
var existing = await _repository.GetByIdAsync(id, cancellationToken);
|
|
if (existing == null)
|
|
{
|
|
return null;
|
|
}
|
|
|
|
var entity = _mapper.Map<VwmyCatalog>(dto);
|
|
entity.Guid = id;
|
|
entity.CatTitle = dto.UpdateProcedure == CatalogUpdateProcedure.Update ? existing.CatTitle : dto.CatTitle;
|
|
entity.AddedWho = existing.AddedWho;
|
|
entity.AddedWhen = existing.AddedWhen;
|
|
entity.ChangedWho = "system";
|
|
entity.ChangedWhen = DateTime.UtcNow;
|
|
|
|
var procedure = dto.UpdateProcedure;
|
|
var updated = await _repository.UpdateAsync(id, entity, procedure, cancellationToken);
|
|
return updated == null ? null : _mapper.Map<CatalogReadDto>(updated);
|
|
}
|
|
|
|
public async Task<bool> DeleteAsync(int id, CancellationToken cancellationToken = default)
|
|
{
|
|
return await _repository.DeleteAsync(id, cancellationToken);
|
|
}
|
|
}
|