using Indotalent.ConfigBackEnd.Extensions; using Indotalent.Infrastructure.Database; using MediatR; namespace Indotalent.Features.Performance.Transfer.Cqrs; public class CreateTransferRequest { public string EmployeeId { get; set; } = string.Empty; public string FromBranchId { get; set; } = string.Empty; public string FromDepartmentId { get; set; } = string.Empty; public string FromDesignationId { get; set; } = string.Empty; public string ToBranchId { get; set; } = string.Empty; public string ToDepartmentId { get; set; } = string.Empty; public string ToDesignationId { get; set; } = string.Empty; public DateTime? TransferDate { get; set; } public string TransferNote { get; set; } = string.Empty; public string Status { get; set; } = string.Empty; } public class CreateTransferResponse { public string? Id { get; set; } public string? AutoNumber { get; set; } } public record CreateTransferCommand(CreateTransferRequest Data) : IRequest; public class CreateTransferHandler : IRequestHandler { private readonly AppDbContext _context; public CreateTransferHandler(AppDbContext context) => _context = context; public async Task Handle(CreateTransferCommand request, CancellationToken cancellationToken) { var entityName = nameof(Data.Entities.Transfer); var autoNo = await _context.GenerateAutoNumberAsync( entityName: entityName, prefixTemplate: $"TRF/{{Year}}/", ct: cancellationToken ); var entity = new Data.Entities.Transfer { AutoNumber = autoNo, EmployeeId = request.Data.EmployeeId, FromBranchId = request.Data.FromBranchId, FromDepartmentId = request.Data.FromDepartmentId, FromDesignationId = request.Data.FromDesignationId, ToBranchId = request.Data.ToBranchId, ToDepartmentId = request.Data.ToDepartmentId, ToDesignationId = request.Data.ToDesignationId, TransferDate = request.Data.TransferDate, TransferNote = request.Data.TransferNote, Status = request.Data.Status }; _context.Transfer.Add(entity); await _context.SaveChangesAsync(cancellationToken); return new CreateTransferResponse { Id = entity.Id, AutoNumber = entity.AutoNumber }; } }