using System.ComponentModel.DataAnnotations; namespace GerbilManagerWebAPI.Models { /// /// Ein erzeugter Abgabevertrag (FEAT-13). Die .docx liegt wie die Fotos im /// Datei-Root (Contracts:RootPath bzw. contract-storage/), in der DB steht /// nur der Dateiname. Tiere hängen über /// (Join-Entity statt uuid[]-Spalte: referenzielle Integrität, „Verträge /// eines Tieres“ bleibt abfragbar, und pro Tier-Zeile ist später Platz für /// Zusatzdaten wie den Einzelpreis). /// public class SaleContract { [Key] public Guid Id { get; set; } /// Abnehmer (Käufer-Block des Vertrags). public Guid ContactId { get; set; } public Contact? Contact { get; set; } /// Kaufpreis in Euro (gesamt). public decimal Price { get; set; } public DateOnly HandoverDate { get; set; } /// Datum der Unterschriftszeile (Standard: Übergabedatum). public DateOnly ContractDate { get; set; } /// Dateiname der erzeugten .docx im Vertrags-Dateiroot. public required string FileName { get; set; } public DateTimeOffset CreatedAt { get; set; } public List Animals { get; set; } = []; } /// Join-Zeile Vertrag ↔ Tier (zusammengesetzter Schlüssel). public class SaleContractAnimal { public Guid SaleContractId { get; set; } public Guid GerbilId { get; set; } public Gerbil? Gerbil { get; set; } /// Optional gewähltes Tierfoto () fürs Vertragsbild. /// Nur die Id wird gespeichert; beim PDF-Rendern wird die Datei nachgeladen. public Guid? PhotoId { get; set; } } }