using System.Data; using AMREZ.EOP.Abstractions.Applications.UseCases.MasterData.Allergen; using AMREZ.EOP.Abstractions.Infrastructures.Common; using AMREZ.EOP.Abstractions.Infrastructures.Repositories; using AMREZ.EOP.Contracts.DTOs.MasterData.Allergen; namespace AMREZ.EOP.Application.UseCases.MasterData.Allergen; public class UpdateAllergenUseCase : IUpdateAllergenUseCase { private readonly IAllergenRepository _repo; private readonly IUnitOfWork _uow; public UpdateAllergenUseCase(IAllergenRepository repo, IUnitOfWork uow) { _repo = repo; _uow = uow; } public async Task ExecuteAsync(Guid id, AllergenUpdateRequest req, CancellationToken ct = default) { await _uow.BeginAsync(null, IsolationLevel.ReadCommitted, ct); try { var e = await _repo.GetAsync(id, ct); if (e is null) { await _uow.RollbackAsync(ct); return null; } e.Name = req.Name.Trim(); e.NameI18n = req.NameI18n; e.Meta = req.Meta; e.IsActive = req.IsActive; await _repo.UpdateAsync(e, ct); await _uow.CommitAsync(ct); return new AllergenResponse(e.Id, e.Scope, e.Code, e.Name, e.NameI18n, e.OverridesGlobalId, e.IsActive, e.IsSystem, e.Meta); } catch { await _uow.RollbackAsync(ct); throw; } } }