using Indotalent.ConfigBackEnd.Extensions; using Indotalent.Features.Organization.Employee.Cqrs; using MediatR; using Microsoft.AspNetCore.Authentication.JwtBearer; namespace Indotalent.Features.Organization.Employee; public static class EmployeeEndpoint { public static void MapEmployeeEndpoints(this IEndpointRouteBuilder app) { var group = app.MapGroup("/employee") .WithTags("Employees") .RequireAuthorization(policy => policy.AddAuthenticationSchemes(JwtBearerDefaults.AuthenticationScheme) .RequireAuthenticatedUser()); group.MapGet("/", async (IMediator mediator) => (await mediator.Send(new GetEmployeeListQuery())).ToApiResponse("Employee list retrieved successfully")); group.MapGet("/lookup", async (IMediator mediator) => (await mediator.Send(new LookupQuery())).ToApiResponse("Lookups retrieved successfully")); group.MapGet("/{id}", async (string id, IMediator mediator) => (await mediator.Send(new GetEmployeeByIdQuery(id))).ToApiResponse("Employee detail retrieved successfully")); group.MapPost("/", async (CreateEmployeeRequest request, IMediator mediator) => (await mediator.Send(new CreateEmployeeCommand(request))).ToApiResponse("Employee created successfully", StatusCodes.Status201Created)); group.MapPost("/update", async (UpdateEmployeeRequest request, IMediator mediator) => (await mediator.Send(new UpdateEmployeeCommand(request))).ToApiResponse("Employee updated successfully")); group.MapPost("/delete/{id}", async (string id, IMediator mediator) => (await mediator.Send(new DeleteEmployeeByIdCommand(new DeleteEmployeeByIdRequest(id)))).ToApiResponse("Employee deleted successfully")); group.MapGet("/income/list/{employeeId}", async (string employeeId, IMediator mediator) => (await mediator.Send(new GetEmployeeIncomeListByEmployeeIdQuery(employeeId))).ToApiResponse("Employee income list retrieved")); group.MapGet("/income/{id}", async (string id, IMediator mediator) => (await mediator.Send(new GetEmployeeIncomeByIdQuery(id))).ToApiResponse("Employee income detail retrieved")); group.MapPost("/income", async (CreateEmployeeIncomeRequest request, IMediator mediator) => (await mediator.Send(new CreateEmployeeIncomeCommand(request))).ToApiResponse("Employee income created", StatusCodes.Status201Created)); group.MapPost("/income/update", async (UpdateEmployeeIncomeRequest request, IMediator mediator) => (await mediator.Send(new UpdateEmployeeIncomeCommand(request))).ToApiResponse("Employee income updated")); group.MapPost("/income/delete/{id}", async (string id, IMediator mediator) => (await mediator.Send(new DeleteEmployeeIncomeByIdCommand(new DeleteEmployeeIncomeByIdRequest(id)))).ToApiResponse("Employee income deleted successfully")); group.MapGet("/deduction/list/{employeeId}", async (string employeeId, IMediator mediator) => (await mediator.Send(new GetEmployeeDeductionListByEmployeeIdQuery(employeeId))).ToApiResponse("Employee deduction list retrieved")); group.MapGet("/deduction/{id}", async (string id, IMediator mediator) => (await mediator.Send(new GetEmployeeDeductionByIdQuery(id))).ToApiResponse("Employee deduction detail retrieved")); group.MapPost("/deduction", async (CreateEmployeeDeductionRequest request, IMediator mediator) => (await mediator.Send(new CreateEmployeeDeductionCommand(request))).ToApiResponse("Employee deduction created", StatusCodes.Status201Created)); group.MapPost("/deduction/update", async (UpdateEmployeeDeductionRequest request, IMediator mediator) => (await mediator.Send(new UpdateEmployeeDeductionCommand(request))).ToApiResponse("Employee deduction updated")); group.MapPost("/deduction/delete/{id}", async (string id, IMediator mediator) => (await mediator.Send(new DeleteEmployeeDeductionByIdCommand(new DeleteEmployeeDeductionByIdRequest(id)))).ToApiResponse("Employee deduction deleted successfully")); } }