Files
2026-07-21 14:22:06 +07:00

75 lines
3.5 KiB
C#

using Indotalent.ConfigBackEnd.Extensions;
using Indotalent.Features.Payroll.Payrolls.Cqrs;
using Indotalent.Features.Payroll.PayrollDetails.Cqrs;
using MediatR;
using Microsoft.AspNetCore.Authentication.JwtBearer;
namespace Indotalent.Features.Payroll.Payrolls;
public static class PayrollsEndpoint
{
public static void MapPayrollsEndpoints(this IEndpointRouteBuilder app)
{
var group = app.MapGroup("/payroll").WithTags("Payrolls")
.RequireAuthorization(policy => policy.AddAuthenticationSchemes(JwtBearerDefaults.AuthenticationScheme)
.RequireAuthenticatedUser());
group.MapGet("/", async (IMediator mediator) =>
{
var result = await mediator.Send(new GetPayrollProcessListQuery(new GetPayrollProcessListRequest()));
return result.ToApiResponse("Payroll processes retrieved successfully");
})
.WithName("GetPayrollProcessList");
group.MapGet("/{id}", async (string id, IMediator mediator) =>
{
var result = await mediator.Send(new GetPayrollProcessByIdQuery(new GetPayrollProcessByIdRequest { Id = id }));
return result.ToApiResponse(result is not null
? "Payroll process detail retrieved successfully"
: $"Payroll process with ID {id} not found");
})
.WithName("GetPayrollProcessById");
group.MapPost("/", async (CreatePayrollProcessRequest request, IMediator mediator) =>
{
var result = await mediator.Send(new CreatePayrollProcessCommand(request));
return result.ToApiResponse("Payroll calculation completed successfully", StatusCodes.Status201Created);
})
.WithName("CreatePayrollProcess");
group.MapPost("/update", async (UpdatePayrollProcessRequest request, IMediator mediator) =>
{
var result = await mediator.Send(new UpdatePayrollProcessCommand(request));
return result.ToApiResponse("Payroll process updated successfully");
})
.WithName("UpdatePayrollProcess");
group.MapPost("/delete/{id}", async (string id, IMediator mediator) =>
{
var result = await mediator.Send(new DeletePayrollProcessByIdCommand(new DeletePayrollProcessByIdRequest { Id = id }));
return true.ToApiResponse("Payroll process deleted successfully");
})
.WithName("DeletePayrollProcessById");
group.MapGet("/detail/list/{processId}", async (string processId, IMediator mediator) =>
{
var result = await mediator.Send(new GetPayrollDetailListByProcessIdQuery(new GetPayrollDetailListByProcessIdRequest { PayrollProcessId = processId }));
return result.ToApiResponse("Payroll employee details retrieved successfully");
})
.WithName("GetPayrollDetailListByProcessId");
group.MapGet("/detail/{id}", async (string id, IMediator mediator) =>
{
var result = await mediator.Send(new GetPayrollDetailByIdQuery(new GetPayrollDetailByIdRequest { Id = id }));
return result.ToApiResponse("Employee payroll component detail retrieved successfully");
})
.WithName("GetPayrollDetailById");
group.MapGet("/detail/slip/{id}", async (string id, IMediator mediator) =>
{
var result = await mediator.Send(new GetPayrollSlipByIdQuery(new GetPayrollSlipByIdRequest { Id = id }));
return result.ToApiResponse("Payroll slip retrieved successfully");
})
.WithName("GetPayrollSlipById");
}
}