Implémente C1 à C5 pour les séries et cycles
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This commit is contained in:
co-authored by
Copilot
parent
3d5e73838e
commit
ddc60898da
@@ -83,6 +83,14 @@ public static class SeriesEndpoints
|
||||
.Produces<SerieDto>()
|
||||
.Produces(StatusCodes.Status404NotFound);
|
||||
|
||||
groupe.MapPut("/{id:int}/sous-series/ordre", async (
|
||||
int id, OrdreSeries ordre, IServiceSeries service, CancellationToken ct) =>
|
||||
Repondre(await service.ReordonnerSousSeriesAsync(id, ordre.Ids, ct)))
|
||||
.WithName("ReordonnerSousSeries")
|
||||
.WithSummary("Fixe l'ordre de lecture des séries directement contenues dans un cycle.")
|
||||
.Produces<SerieDto>()
|
||||
.Produces(StatusCodes.Status404NotFound);
|
||||
|
||||
groupe.MapPut("/elements/{elementId:int}/livre", async (
|
||||
int elementId,
|
||||
RattachementLivre rattachement,
|
||||
|
||||
@@ -42,6 +42,9 @@ public interface IServiceSeries
|
||||
Task<ResultatSerie> ReordonnerAsync(
|
||||
int serieId, IReadOnlyList<int> idsOrdonnes, CancellationToken ct = default);
|
||||
|
||||
Task<ResultatSerie> ReordonnerSousSeriesAsync(
|
||||
int serieId, IReadOnlyList<int> idsOrdonnes, CancellationToken ct = default);
|
||||
|
||||
/// <summary>Bascule un tome manquant vers la liste d'envies <b>de l'appelant</b>.</summary>
|
||||
Task<ResultatSouhait> MettreEnEnviesAsync(
|
||||
int elementId, string? utilisateur, CancellationToken ct = default);
|
||||
@@ -321,6 +324,37 @@ public sealed class ServiceSeries(MaBibliDbContext db, IServiceSouhaits souhaits
|
||||
return await RelireAsync(serieId, ct);
|
||||
}
|
||||
|
||||
public async Task<ResultatSerie> ReordonnerSousSeriesAsync(
|
||||
int serieId, IReadOnlyList<int> idsOrdonnes, CancellationToken ct = default)
|
||||
{
|
||||
if (!await db.Series.AnyAsync(s => s.Id == serieId, ct))
|
||||
{
|
||||
return ResultatSerie.Introuvable;
|
||||
}
|
||||
|
||||
var enfants = await db.Series
|
||||
.Where(s => s.SerieParenteId == serieId)
|
||||
.ToListAsync(ct);
|
||||
var parId = enfants.ToDictionary(s => s.Id);
|
||||
var position = 0;
|
||||
|
||||
foreach (var id in idsOrdonnes.Distinct())
|
||||
{
|
||||
if (parId.Remove(id, out var enfant))
|
||||
{
|
||||
enfant.Position = position++;
|
||||
}
|
||||
}
|
||||
|
||||
foreach (var oublie in parId.Values.OrderBy(s => s.Position).ThenBy(s => s.Id))
|
||||
{
|
||||
oublie.Position = position++;
|
||||
}
|
||||
|
||||
await db.SaveChangesAsync(ct);
|
||||
return await RelireAsync(serieId, ct);
|
||||
}
|
||||
|
||||
public async Task<ResultatSouhait> MettreEnEnviesAsync(
|
||||
int elementId, string? utilisateur, CancellationToken ct = default)
|
||||
{
|
||||
@@ -343,8 +377,6 @@ public sealed class ServiceSeries(MaBibliDbContext db, IServiceSouhaits souhaits
|
||||
// ⚠️ Ici et seulement ici, une série (commune) écrit dans une liste d'envies
|
||||
// (personnelle). L'envie est donc celle de l'APPELANT, jamais celle du foyer : deux
|
||||
// membres peuvent vouloir le même tome manquant, chacun dans sa liste.
|
||||
// Aucun auteur n'est transmis : une position dans une saga n'en porte pas, et en
|
||||
// inventer un fausserait le rapprochement avec le catalogue.
|
||||
return await souhaits.AjouterAsync(
|
||||
new EnregistrementSouhait { Titre = element.Titre }, utilisateur, ct);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user