94 lines
4.2 KiB
C#
94 lines
4.2 KiB
C#
using Microsoft.AspNetCore.Builder;
|
|
using Microsoft.AspNetCore.Http;
|
|
using Microsoft.AspNetCore.Routing;
|
|
using Microsoft.EntityFrameworkCore;
|
|
using SIFinance.Modules.SousTraitants.Dtos;
|
|
using SIFinance.Shared.Entities;
|
|
|
|
namespace SIFinance.Modules.SousTraitants.Endpoints;
|
|
|
|
public static class OrganismesEndpoints
|
|
{
|
|
public static IEndpointRouteBuilder MapOrganismesEndpoints(this IEndpointRouteBuilder app)
|
|
{
|
|
var group = app.MapGroup("/api/soustraitants/organismes").WithTags("SousTraitants-Organismes").RequireAuthorization();
|
|
|
|
group.MapGet("", async (SIFinanceDbContext db, CancellationToken ct) =>
|
|
await db.Organismes
|
|
.AsNoTracking()
|
|
.Where(o => o.Statut == "ACTIF")
|
|
.OrderBy(o => o.RaisonSociale)
|
|
.Select(o => new OrganismeDto(o.Id, o.RaisonSociale, o.Siret, o.Statut))
|
|
.ToListAsync(ct));
|
|
|
|
group.MapGet("/all", async (SIFinanceDbContext db, CancellationToken ct) =>
|
|
await db.Organismes
|
|
.AsNoTracking()
|
|
.OrderBy(o => o.RaisonSociale)
|
|
.Select(o => new OrganismeDetailDto(o.Id, o.RaisonSociale, o.Siret, o.Email, o.Telephone, o.Adresse, o.Statut, o.DateCreation))
|
|
.ToListAsync(ct));
|
|
|
|
group.MapPost("", async (OrganismeSaveDto input, SIFinanceDbContext db, CancellationToken ct) =>
|
|
{
|
|
if (string.IsNullOrWhiteSpace(input.RaisonSociale))
|
|
return Results.BadRequest(new { error = "La raison sociale est requise." });
|
|
|
|
var organisme = new Organisme
|
|
{
|
|
RaisonSociale = input.RaisonSociale.Trim(),
|
|
Siret = string.IsNullOrWhiteSpace(input.Siret) ? null : input.Siret.Trim(),
|
|
Email = string.IsNullOrWhiteSpace(input.Email) ? null : input.Email.Trim(),
|
|
Telephone = string.IsNullOrWhiteSpace(input.Telephone) ? null : input.Telephone.Trim(),
|
|
Adresse = string.IsNullOrWhiteSpace(input.Adresse) ? null : input.Adresse.Trim(),
|
|
Statut = input.Statut,
|
|
DateCreation = DateTime.UtcNow,
|
|
};
|
|
|
|
db.Organismes.Add(organisme);
|
|
await db.SaveChangesAsync(ct);
|
|
|
|
return Results.Created($"/api/soustraitants/organismes/{organisme.Id}",
|
|
new OrganismeDetailDto(organisme.Id, organisme.RaisonSociale, organisme.Siret, organisme.Email, organisme.Telephone, organisme.Adresse, organisme.Statut, organisme.DateCreation));
|
|
});
|
|
|
|
group.MapPut("/{id:int}", async (int id, OrganismeSaveDto input, SIFinanceDbContext db, CancellationToken ct) =>
|
|
{
|
|
if (string.IsNullOrWhiteSpace(input.RaisonSociale))
|
|
return Results.BadRequest(new { error = "La raison sociale est requise." });
|
|
|
|
var organisme = await db.Organismes.FirstOrDefaultAsync(o => o.Id == id, ct);
|
|
if (organisme is null) return Results.NotFound();
|
|
|
|
organisme.RaisonSociale = input.RaisonSociale.Trim();
|
|
organisme.Siret = string.IsNullOrWhiteSpace(input.Siret) ? null : input.Siret.Trim();
|
|
organisme.Email = string.IsNullOrWhiteSpace(input.Email) ? null : input.Email.Trim();
|
|
organisme.Telephone = string.IsNullOrWhiteSpace(input.Telephone) ? null : input.Telephone.Trim();
|
|
organisme.Adresse = string.IsNullOrWhiteSpace(input.Adresse) ? null : input.Adresse.Trim();
|
|
organisme.Statut = input.Statut;
|
|
|
|
await db.SaveChangesAsync(ct);
|
|
return Results.NoContent();
|
|
});
|
|
|
|
group.MapDelete("/{id:int}", async (int id, SIFinanceDbContext db, CancellationToken ct) =>
|
|
{
|
|
var organisme = await db.Organismes.FirstOrDefaultAsync(o => o.Id == id, ct);
|
|
if (organisme is null) return Results.NotFound();
|
|
|
|
db.Organismes.Remove(organisme);
|
|
try
|
|
{
|
|
await db.SaveChangesAsync(ct);
|
|
}
|
|
catch (DbUpdateException)
|
|
{
|
|
return Results.BadRequest(new { error = "Impossible de supprimer cet organisme : des contrats y sont rattachés." });
|
|
}
|
|
|
|
return Results.NoContent();
|
|
});
|
|
|
|
return app;
|
|
}
|
|
}
|