Phase 1 : squelette de la solution (3 projets .NET 10)

Mise en place de la structure de base, sans aucune fonctionnalité métier :

- MaBibli.sln à la racine, avec trois projets ciblant net10.0
- MaBibli.Client : Blazor WebAssembly PWA (dotnet new blazorwasm --pwa),
  pages d'exemple du modèle (Counter, Weather) retirées
- MaBibli.Api : ASP.NET Core, sert aussi les fichiers statiques du client
  (UseBlazorFrameworkFiles + MapFallbackToFile), via le package
  Microsoft.AspNetCore.Components.WebAssembly.Server
- MaBibli.Shared : entités et enums partagés (Livre, Pret, Format, Statut),
  conformes au modèle de données de CLAUDE.md — AjoutePar est une simple
  traçabilité, Pret est une table séparée pour garder l'historique complet
- EF Core + SQLite dans l'API : MaBibliDbContext, chaîne de connexion,
  et migration initiale InitialCreate vérifiée par un database update
- dotnet-tools.json : dotnet-ef épinglé en outil local

Vérifié : dotnet build sans avertissement, et
dotnet publish MaBibli.Api -c Release -r linux-x64 --self-contained
produit un dossier unique dont le wwwroot contient bien _framework/.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
mathieu
2026-08-17 21:52:37 +02:00
co-authored by Claude Opus 5
parent 4467456b8b
commit 4990e41f3e
79 changed files with 60699 additions and 0 deletions
+38
View File
@@ -0,0 +1,38 @@
namespace MaBibli.Shared.Entites;
/// <summary>
/// Un livre du catalogue. La bibliothèque est <b>commune</b> à tous les utilisateurs.
/// </summary>
public class Livre
{
public int Id { get; set; }
/// <summary>ISBN tel que saisi ou scanné (EAN-13 le plus souvent). Peut être absent.</summary>
public string? Isbn { get; set; }
public string Titre { get; set; } = string.Empty;
public string? Auteur { get; set; }
public string? Editeur { get; set; }
public Format Format { get; set; }
public Statut Statut { get; set; }
/// <summary>URL de la couverture (OpenLibrary), pas de fichier stocké localement.</summary>
public string? CoverUrl { get; set; }
public DateTime DateAjout { get; set; }
/// <summary>
/// <c>YNH_USER</c> de la personne qui a saisi le livre.
/// <b>Traçabilité uniquement : ne JAMAIS filtrer les lectures sur ce champ.</b>
/// La bibliothèque est commune ; ce champ existe pour savoir qui a ajouté quoi,
/// et pour permettre un cloisonnement ultérieur sans migration de schéma.
/// </summary>
public string? AjoutePar { get; set; }
/// <summary>Historique complet des prêts de ce livre (pas seulement le prêt en cours).</summary>
public List<Pret> Prets { get; set; } = [];
}