MaBibli 1.0.0
Gestion de bibliothèque personnelle auto-hébergée : catalogue, prêts, scan de code-barres, consultation hors-ligne. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,69 @@
|
||||
using System.Text.Json.Serialization;
|
||||
|
||||
namespace MaBibli.Shared.Dtos;
|
||||
|
||||
/// <summary>
|
||||
/// Un prêt tel qu'exposé par l'API — en cours ou clos, la table gardant l'historique complet.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Les champs <c>Livre*</c> recopient de quoi afficher le livre sans second appel : la vue
|
||||
/// « prêts en cours » liste des prêts, mais ce que l'utilisateur y cherche est <b>le livre</b>
|
||||
/// qui n'est plus à la maison.
|
||||
/// </remarks>
|
||||
public record PretDto
|
||||
{
|
||||
public required int Id { get; init; }
|
||||
|
||||
public required int LivreId { get; init; }
|
||||
|
||||
/// <summary>Nom de l'emprunteur, texte libre : aucun lien avec les comptes YunoHost.</summary>
|
||||
public required string Emprunteur { get; init; }
|
||||
|
||||
public required DateTime DatePret { get; init; }
|
||||
|
||||
/// <summary><c>null</c> tant que le livre n'a pas été rendu.</summary>
|
||||
public DateTime? DateRetour { get; init; }
|
||||
|
||||
public string? LivreTitre { get; init; }
|
||||
|
||||
/// <summary>Auteurs du livre sur une ligne, déjà mis en forme par le serveur.</summary>
|
||||
public string? LivreAuteurs { get; init; }
|
||||
|
||||
public string? LivreCoverUrl { get; init; }
|
||||
|
||||
[JsonIgnore]
|
||||
public bool EstEnCours => DateRetour is null;
|
||||
|
||||
/// <summary>Nombre de jours écoulés depuis le départ du livre — ou durée totale s'il est rendu.</summary>
|
||||
[JsonIgnore]
|
||||
public int JoursEcoules =>
|
||||
Math.Max(0, (int)((DateRetour ?? DateTime.UtcNow) - DatePret).TotalDays);
|
||||
}
|
||||
|
||||
/// <summary>Charge utile d'un nouveau prêt.</summary>
|
||||
/// <remarks>
|
||||
/// Le livre n'y figure pas : il vient de l'URL. On ne prête pas « un livre quelconque », on prête
|
||||
/// <b>ce</b> livre-ci, depuis sa fiche.
|
||||
/// </remarks>
|
||||
public record EnregistrementPret
|
||||
{
|
||||
/// <summary>Obligatoire : un prêt sans emprunteur ne se retrouve pas.</summary>
|
||||
public string Emprunteur { get; set; } = string.Empty;
|
||||
|
||||
/// <summary>
|
||||
/// Date du prêt en UTC. <c>null</c> = maintenant.
|
||||
/// </summary>
|
||||
/// <remarks>
|
||||
/// Modifiable parce qu'on enregistre souvent un prêt <b>après</b> l'avoir fait — « tiens,
|
||||
/// Paul a mon Zola depuis Noël ». Une date future est en revanche refusée : elle ne
|
||||
/// correspondrait à rien de constatable.
|
||||
/// </remarks>
|
||||
public DateTime? DatePret { get; set; }
|
||||
}
|
||||
|
||||
/// <summary>Charge utile du retour d'un livre.</summary>
|
||||
public record RetourPret
|
||||
{
|
||||
/// <summary>Date du retour en UTC. <c>null</c> = maintenant.</summary>
|
||||
public DateTime? DateRetour { get; set; }
|
||||
}
|
||||
Reference in New Issue
Block a user