diff --git a/Webzine.Business.Contracts/Dto/TitreAdminDTO.cs b/Webzine.Business.Contracts/Dto/TitreAdminDTO.cs new file mode 100644 index 0000000..2c2454b --- /dev/null +++ b/Webzine.Business.Contracts/Dto/TitreAdminDTO.cs @@ -0,0 +1,57 @@ +namespace Webzine.Business.Contracts.Dto; + +/// +/// Dto transportant les données métier d'un titre saisi en administration. +/// +public class TitreAdminDTO +{ + /// + /// Identifiant du titre (0 lors d'une création). + /// + public int Id { get; set; } + + /// + /// Identifiant de l'artiste sélectionné. + /// + public int IdArtiste { get; set; } + + /// + /// Libellé du titre. + /// + public string Libelle { get; set; } = string.Empty; + + /// + /// Nom de l'album. + /// + public string Album { get; set; } = string.Empty; + + /// + /// Texte de la chronique. + /// + public string Chronique { get; set; } = string.Empty; + + /// + /// Date de sortie du titre. + /// + public DateTime DateSortie { get; set; } + + /// + /// Durée en secondes. + /// + public int Duree { get; set; } + + /// + /// URL de la jaquette. + /// + public string UrlJaquette { get; set; } = string.Empty; + + /// + /// URL d'écoute. + /// + public string? UrlEcoute { get; set; } + + /// + /// Identifiants des styles sélectionnés. + /// + public List Styles { get; set; } = new (); +} \ No newline at end of file diff --git a/Webzine.Business.Contracts/ITitreAdminService.cs b/Webzine.Business.Contracts/ITitreAdminService.cs new file mode 100644 index 0000000..e14a7a7 --- /dev/null +++ b/Webzine.Business.Contracts/ITitreAdminService.cs @@ -0,0 +1,22 @@ +namespace Webzine.Business.Contracts; + +using Webzine.Business.Contracts.Dto; + +/// +/// Service responsable des opérations d'administration sur les titres. +/// Orchestre la résolution des dépendances (artiste, styles) et la persistance. +/// +public interface ITitreAdminService +{ + /// + /// Crée un nouveau titre à partir des données du formulaire d'administration. + /// + /// Les données saisies dans le formulaire de création. + void CreerTitre(TitreAdminDTO commande); + + /// + /// Met à jour un titre existant à partir des données du formulaire d'administration. + /// + /// Les données saisies dans le formulaire de modification. + void ModifierTitre(TitreAdminDTO commande); +} \ No newline at end of file diff --git a/Webzine.Business/TitreAdminService.cs b/Webzine.Business/TitreAdminService.cs new file mode 100644 index 0000000..111ad69 --- /dev/null +++ b/Webzine.Business/TitreAdminService.cs @@ -0,0 +1,124 @@ +namespace Webzine.Business; + +using Microsoft.Extensions.Logging; + +using Webzine.Business.Contracts.Dto; +using Webzine.Business.Contracts; +using Webzine.Entity; +using Webzine.Repository.Contracts; + +/// +/// Implémentation de . +/// Orchestre la résolution des styles, la construction de l'entité +/// et la délégation au repository. +/// +public class TitreAdminService : ITitreAdminService +{ + private readonly ITitreRepository titreRepository; + private readonly IArtisteRepository artisteRepository; + private readonly IStyleRepository styleRepository; + private readonly ILogger logger; + + /// + /// Initializes a new instance of the class. + /// + /// Repository des titres. + /// Repository des artistes. + /// Repository des styles. + /// Service de journalisation. + public TitreAdminService( + ITitreRepository titreRepository, + IArtisteRepository artisteRepository, + IStyleRepository styleRepository, + ILogger logger) + { + this.titreRepository = titreRepository; + this.artisteRepository = artisteRepository; + this.styleRepository = styleRepository; + this.logger = logger; + } + + /// + public void CreerTitre(TitreAdminDTO commande) + { + this.logger.LogInformation( + "Création d'un nouveau titre '{Libelle}' pour l'artiste ID {IdArtiste}.", + commande.Libelle, + commande.IdArtiste); + + Artiste artiste = this.artisteRepository.Find(commande.IdArtiste); + List