Merge branch 'dev' into j3/TODO_erreurs
# Conflicts: # Webzine.Repository/DbTitreRepository.cs
This commit is contained in:
57
Webzine.Business.Contracts/Dto/TitreAdminDTO.cs
Normal file
57
Webzine.Business.Contracts/Dto/TitreAdminDTO.cs
Normal file
@@ -0,0 +1,57 @@
|
|||||||
|
namespace Webzine.Business.Contracts.Dto;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Dto transportant les données métier d'un titre saisi en administration.
|
||||||
|
/// </summary>
|
||||||
|
public class TitreAdminDTO
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Identifiant du titre (0 lors d'une création).
|
||||||
|
/// </summary>
|
||||||
|
public int Id { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Identifiant de l'artiste sélectionné.
|
||||||
|
/// </summary>
|
||||||
|
public int IdArtiste { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Libellé du titre.
|
||||||
|
/// </summary>
|
||||||
|
public string Libelle { get; set; } = string.Empty;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Nom de l'album.
|
||||||
|
/// </summary>
|
||||||
|
public string Album { get; set; } = string.Empty;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Texte de la chronique.
|
||||||
|
/// </summary>
|
||||||
|
public string Chronique { get; set; } = string.Empty;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Date de sortie du titre.
|
||||||
|
/// </summary>
|
||||||
|
public DateTime DateSortie { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Durée en secondes.
|
||||||
|
/// </summary>
|
||||||
|
public int Duree { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// URL de la jaquette.
|
||||||
|
/// </summary>
|
||||||
|
public string UrlJaquette { get; set; } = string.Empty;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// URL d'écoute.
|
||||||
|
/// </summary>
|
||||||
|
public string? UrlEcoute { get; set; }
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Identifiants des styles sélectionnés.
|
||||||
|
/// </summary>
|
||||||
|
public List<int> Styles { get; set; } = new ();
|
||||||
|
}
|
||||||
22
Webzine.Business.Contracts/ITitreAdminService.cs
Normal file
22
Webzine.Business.Contracts/ITitreAdminService.cs
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
namespace Webzine.Business.Contracts;
|
||||||
|
|
||||||
|
using Webzine.Business.Contracts.Dto;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Service responsable des opérations d'administration sur les titres.
|
||||||
|
/// Orchestre la résolution des dépendances (artiste, styles) et la persistance.
|
||||||
|
/// </summary>
|
||||||
|
public interface ITitreAdminService
|
||||||
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Crée un nouveau titre à partir des données du formulaire d'administration.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="commande">Les données saisies dans le formulaire de création.</param>
|
||||||
|
void CreerTitre(TitreAdminDTO commande);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Met à jour un titre existant à partir des données du formulaire d'administration.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="commande">Les données saisies dans le formulaire de modification.</param>
|
||||||
|
void ModifierTitre(TitreAdminDTO commande);
|
||||||
|
}
|
||||||
124
Webzine.Business/TitreAdminService.cs
Normal file
124
Webzine.Business/TitreAdminService.cs
Normal file
@@ -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;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Implémentation de <see cref="ITitreAdminService"/>.
|
||||||
|
/// Orchestre la résolution des styles, la construction de l'entité
|
||||||
|
/// et la délégation au repository.
|
||||||
|
/// </summary>
|
||||||
|
public class TitreAdminService : ITitreAdminService
|
||||||
|
{
|
||||||
|
private readonly ITitreRepository titreRepository;
|
||||||
|
private readonly IArtisteRepository artisteRepository;
|
||||||
|
private readonly IStyleRepository styleRepository;
|
||||||
|
private readonly ILogger<TitreAdminService> logger;
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Initializes a new instance of the <see cref="TitreAdminService"/> class.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="titreRepository">Repository des titres.</param>
|
||||||
|
/// <param name="artisteRepository">Repository des artistes.</param>
|
||||||
|
/// <param name="styleRepository">Repository des styles.</param>
|
||||||
|
/// <param name="logger">Service de journalisation.</param>
|
||||||
|
public TitreAdminService(
|
||||||
|
ITitreRepository titreRepository,
|
||||||
|
IArtisteRepository artisteRepository,
|
||||||
|
IStyleRepository styleRepository,
|
||||||
|
ILogger<TitreAdminService> logger)
|
||||||
|
{
|
||||||
|
this.titreRepository = titreRepository;
|
||||||
|
this.artisteRepository = artisteRepository;
|
||||||
|
this.styleRepository = styleRepository;
|
||||||
|
this.logger = logger;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <inheritdoc/>
|
||||||
|
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<Style> styles = this.ResoudreStyles(commande.Styles);
|
||||||
|
|
||||||
|
var titre = new Titre
|
||||||
|
{
|
||||||
|
IdArtiste = artiste.IdArtiste,
|
||||||
|
Artiste = artiste,
|
||||||
|
Libelle = commande.Libelle,
|
||||||
|
Album = commande.Album,
|
||||||
|
Chronique = commande.Chronique,
|
||||||
|
DateCreation = DateTime.UtcNow,
|
||||||
|
DateSortie = commande.DateSortie,
|
||||||
|
Duree = commande.Duree,
|
||||||
|
UrlJaquette = commande.UrlJaquette,
|
||||||
|
UrlEcoute = commande.UrlEcoute ?? string.Empty,
|
||||||
|
Styles = styles,
|
||||||
|
Commentaires = new List<Commentaire>(),
|
||||||
|
};
|
||||||
|
|
||||||
|
this.titreRepository.Add(titre);
|
||||||
|
|
||||||
|
this.logger.LogInformation("Titre '{Libelle}' créé avec succès (ID {IdTitre}).", titre.Libelle, titre.IdTitre);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <inheritdoc/>
|
||||||
|
public void ModifierTitre(TitreAdminDTO commande)
|
||||||
|
{
|
||||||
|
this.logger.LogInformation("Modification du titre ID {Id} ('{Libelle}').", commande.Id, commande.Libelle);
|
||||||
|
|
||||||
|
List<Style> styles = this.ResoudreStyles(commande.Styles);
|
||||||
|
|
||||||
|
// On charge le titre existant pour ne pas écraser NbLectures / NbLikes
|
||||||
|
Titre existant = this.titreRepository.Find(commande.Id);
|
||||||
|
|
||||||
|
existant.IdArtiste = commande.IdArtiste;
|
||||||
|
existant.Libelle = commande.Libelle;
|
||||||
|
existant.Album = commande.Album;
|
||||||
|
existant.Chronique = commande.Chronique;
|
||||||
|
existant.DateSortie = commande.DateSortie;
|
||||||
|
existant.Duree = commande.Duree;
|
||||||
|
existant.UrlJaquette = commande.UrlJaquette;
|
||||||
|
existant.UrlEcoute = commande.UrlEcoute ?? string.Empty;
|
||||||
|
|
||||||
|
existant.Styles.Clear();
|
||||||
|
foreach (var style in styles)
|
||||||
|
{
|
||||||
|
existant.Styles.Add(style);
|
||||||
|
}
|
||||||
|
|
||||||
|
this.titreRepository.Update(existant);
|
||||||
|
|
||||||
|
this.logger.LogInformation("Titre ID {Id} modifié avec succès.", commande.Id);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Résout les entités <see cref="Style"/> à partir d'une liste d'identifiants.
|
||||||
|
/// Les identifiants introuvables sont ignorés avec un avertissement.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="styleIds">Identifiants des styles sélectionnés.</param>
|
||||||
|
/// <returns>Liste des styles résolus.</returns>
|
||||||
|
private List<Style> ResoudreStyles(List<int> styleIds)
|
||||||
|
{
|
||||||
|
var styles = new List<Style>();
|
||||||
|
|
||||||
|
foreach (int id in styleIds)
|
||||||
|
{
|
||||||
|
Style style = this.styleRepository.Find(id);
|
||||||
|
|
||||||
|
styles.Add(style);
|
||||||
|
}
|
||||||
|
|
||||||
|
this.logger.LogDebug("{NbResolus}/{NbDemandes} styles résolus avec succès.", styles.Count, styleIds.Count);
|
||||||
|
|
||||||
|
return styles;
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -27,4 +27,10 @@
|
|||||||
<ProjectReference Include="..\Webzine.Repository.Contracts\Webzine.Repository.Contracts.csproj" />
|
<ProjectReference Include="..\Webzine.Repository.Contracts\Webzine.Repository.Contracts.csproj" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
|
||||||
|
<ItemGroup>
|
||||||
|
<Reference Include="Microsoft.Extensions.Logging.Abstractions">
|
||||||
|
<HintPath>..\..\..\..\..\..\..\.nuget\packages\microsoft.extensions.logging.abstractions\10.0.5\lib\net10.0\Microsoft.Extensions.Logging.Abstractions.dll</HintPath>
|
||||||
|
</Reference>
|
||||||
|
</ItemGroup>
|
||||||
|
|
||||||
</Project>
|
</Project>
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ public class DbTitreRepository : ITitreRepository
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
this.logger.LogInformation("Ajout d'un nouveau titre: {Libelle}", titre.Libelle);
|
this.logger.LogInformation("Ajout d'un nouveau titre: {Libelle}", titre.Libelle);
|
||||||
|
this.logger.LogDebug("Début de l'ajout du titre en base de données");
|
||||||
|
|
||||||
this.context.Titres.Add(titre);
|
this.context.Titres.Add(titre);
|
||||||
this.context.SaveChanges();
|
this.context.SaveChanges();
|
||||||
@@ -56,7 +57,8 @@ public class DbTitreRepository : ITitreRepository
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
var count = Enumerable.Count(this.context.Titres);
|
this.logger.LogDebug("Comptage des titres en base de données");
|
||||||
|
var count = this.context.Titres.Count();
|
||||||
this.logger.LogDebug("Nombre total de titres: {Count}", count);
|
this.logger.LogDebug("Nombre total de titres: {Count}", count);
|
||||||
return count;
|
return count;
|
||||||
}
|
}
|
||||||
@@ -73,6 +75,7 @@ public class DbTitreRepository : ITitreRepository
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
this.logger.LogInformation("Suppression du titre avec l'ID: {IdTitre}", titre.IdTitre);
|
this.logger.LogInformation("Suppression du titre avec l'ID: {IdTitre}", titre.IdTitre);
|
||||||
|
this.logger.LogDebug("Début de la suppression du titre en base de données");
|
||||||
|
|
||||||
this.context.Titres.Remove(titre);
|
this.context.Titres.Remove(titre);
|
||||||
this.context.SaveChanges();
|
this.context.SaveChanges();
|
||||||
@@ -97,6 +100,7 @@ public class DbTitreRepository : ITitreRepository
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
this.logger.LogDebug("Recherche des titres avec offset: {Offset}, limit: {Limit}", offset, limit);
|
this.logger.LogDebug("Recherche des titres avec offset: {Offset}, limit: {Limit}", offset, limit);
|
||||||
|
this.logger.LogDebug("Préparation de la requête avec les inclusions Artiste et Styles");
|
||||||
|
|
||||||
var titres = this.context.Titres
|
var titres = this.context.Titres
|
||||||
.Include(t => t.Artiste)
|
.Include(t => t.Artiste)
|
||||||
@@ -104,9 +108,9 @@ public class DbTitreRepository : ITitreRepository
|
|||||||
.OrderBy(t => t.Libelle)
|
.OrderBy(t => t.Libelle)
|
||||||
.Skip(offset)
|
.Skip(offset)
|
||||||
.Take(limit)
|
.Take(limit)
|
||||||
.AsNoTracking();
|
.ToList();
|
||||||
|
|
||||||
this.logger.LogDebug("La liste de titres a été récupérée.");
|
this.logger.LogDebug("{Count} titres trouvés", titres.Count);
|
||||||
return titres;
|
return titres;
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
@@ -122,10 +126,12 @@ public class DbTitreRepository : ITitreRepository
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
this.logger.LogInformation("Incrémentation du nombre de lectures pour le titre ID: {IdTitre}", titre.IdTitre);
|
this.logger.LogInformation("Incrémentation du nombre de lectures pour le titre ID: {IdTitre}", titre.IdTitre);
|
||||||
|
this.logger.LogDebug("Recherche du titre en base de données");
|
||||||
|
|
||||||
var existingTitre = this.context.Titres.Find(titre.IdTitre);
|
var existingTitre = this.context.Titres.Find(titre.IdTitre);
|
||||||
if (existingTitre != null)
|
if (existingTitre != null)
|
||||||
{
|
{
|
||||||
|
this.logger.LogDebug("Titre trouvé, incrémentation du compteur de lectures");
|
||||||
existingTitre.NbLectures++;
|
existingTitre.NbLectures++;
|
||||||
this.context.SaveChanges();
|
this.context.SaveChanges();
|
||||||
this.logger.LogDebug("Nouveau nombre de lectures: {NbLectures}", existingTitre.NbLectures);
|
this.logger.LogDebug("Nouveau nombre de lectures: {NbLectures}", existingTitre.NbLectures);
|
||||||
@@ -153,14 +159,20 @@ public class DbTitreRepository : ITitreRepository
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
this.logger.LogInformation("Incrémentation du nombre de likes pour le titre ID: {IdTitre}", titre.IdTitre);
|
this.logger.LogInformation("Incrémentation du nombre de likes pour le titre ID: {IdTitre}", titre.IdTitre);
|
||||||
|
this.logger.LogDebug("Recherche du titre en base de données");
|
||||||
|
|
||||||
var existingTitre = this.context.Titres.Find(titre.IdTitre);
|
var existingTitre = this.context.Titres.Find(titre.IdTitre);
|
||||||
if (existingTitre != null)
|
if (existingTitre != null)
|
||||||
{
|
{
|
||||||
|
this.logger.LogDebug("Titre trouvé, incrémentation du compteur de likes");
|
||||||
existingTitre.NbLikes++;
|
existingTitre.NbLikes++;
|
||||||
this.context.SaveChanges();
|
this.context.SaveChanges();
|
||||||
this.logger.LogDebug("Nouveau nombre de likes: {NbLikes}", existingTitre.NbLikes);
|
this.logger.LogDebug("Nouveau nombre de likes: {NbLikes}", existingTitre.NbLikes);
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
this.logger.LogWarning("Titre avec l'ID {IdTitre} non trouvé pour l'incrémentation des likes", titre.IdTitre);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
catch (DbUpdateException ex)
|
catch (DbUpdateException ex)
|
||||||
{
|
{
|
||||||
@@ -221,15 +233,17 @@ public class DbTitreRepository : ITitreRepository
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
this.logger.LogInformation("Recherche des titres avec le mot-clé: {Mot}", mot);
|
this.logger.LogInformation("Recherche des titres avec le mot-clé: {Mot}", mot);
|
||||||
|
this.logger.LogDebug("Préparation de la requête de recherche avec les inclusions");
|
||||||
|
|
||||||
var titres = this.context.Titres
|
var titres = this.context.Titres
|
||||||
.Include(t => t.Artiste)
|
.Include(t => t.Artiste)
|
||||||
.Include(t => t.Styles)
|
.Include(t => t.Styles)
|
||||||
.Where(t => t.Libelle.ToLower().Contains(mot.ToLower()))
|
.Where(t => t.Libelle.ToLower().Contains(mot.ToLower()))
|
||||||
.OrderBy(t => t.Libelle)
|
.OrderBy(t => t.Libelle)
|
||||||
.AsNoTracking();
|
.AsNoTracking()
|
||||||
|
.ToList();
|
||||||
|
|
||||||
this.logger.LogDebug("La liste de titres a été récupérée.");
|
this.logger.LogDebug("{Count} titres trouvés correspondant à '{Mot}'", titres.Count, mot);
|
||||||
return titres;
|
return titres;
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
@@ -271,14 +285,17 @@ public class DbTitreRepository : ITitreRepository
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
|
this.logger.LogDebug("Récupération de tous les titres");
|
||||||
|
this.logger.LogDebug("Préparation de la requête avec les inclusions Artiste et Styles");
|
||||||
|
|
||||||
var titres = this.context.Titres
|
var titres = this.context.Titres
|
||||||
.Include(t => t.Artiste)
|
.Include(t => t.Artiste)
|
||||||
.Include(t => t.Styles)
|
.Include(t => t.Styles)
|
||||||
.Include(t => t.Commentaires)
|
.Include(t => t.Commentaires)
|
||||||
.OrderBy(t => t.Libelle)
|
.OrderBy(t => t.Libelle)
|
||||||
.AsNoTracking();
|
.ToList();
|
||||||
|
|
||||||
this.logger.LogDebug("La liste de titres a été récupérée avec FindAll.");
|
this.logger.LogDebug("{Count} titres récupérés", titres.Count);
|
||||||
return titres;
|
return titres;
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
@@ -294,15 +311,16 @@ public class DbTitreRepository : ITitreRepository
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
this.logger.LogInformation("Recherche des titres par style: {Libelle}", libelle);
|
this.logger.LogInformation("Recherche des titres par style: {Libelle}", libelle);
|
||||||
|
this.logger.LogDebug("Préparation de la requête de recherche par style");
|
||||||
|
|
||||||
var titres = this.context.Titres
|
var titres = this.context.Titres
|
||||||
.Include(t => t.Artiste)
|
.Include(t => t.Artiste)
|
||||||
.Include(t => t.Styles)
|
.Include(t => t.Styles)
|
||||||
.Where(t => t.Styles.Any(s => s.Libelle.ToLower() == libelle.ToLower()))
|
.Where(t => t.Styles.Any(s => s.Libelle.ToLower() == libelle.ToLower()))
|
||||||
.OrderBy(t => t.Libelle)
|
.OrderBy(t => t.Libelle)
|
||||||
.AsNoTracking();
|
.ToList();
|
||||||
|
|
||||||
this.logger.LogDebug("La liste de titres a été récupérée pour le style '{Libelle}'", libelle);
|
this.logger.LogDebug("{Count} titres trouvés pour le style '{Libelle}'", titres.Count, libelle);
|
||||||
return titres;
|
return titres;
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
|
|||||||
@@ -1,10 +1,13 @@
|
|||||||
namespace Webzine.WebApplication.Areas.Administration.Controllers;
|
namespace Webzine.WebApplication.Areas.Administration.Controllers;
|
||||||
|
|
||||||
|
using Business.Contracts;
|
||||||
|
|
||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using Microsoft.AspNetCore.Mvc.Rendering;
|
using Microsoft.AspNetCore.Mvc.Rendering;
|
||||||
|
|
||||||
using Webzine.Entity;
|
using Webzine.Entity;
|
||||||
using Webzine.Repository.Contracts;
|
using Webzine.Repository.Contracts;
|
||||||
|
using Webzine.Business.Contracts.Dto;
|
||||||
using Webzine.WebApplication.Areas.Administration.ViewModels.Titre;
|
using Webzine.WebApplication.Areas.Administration.ViewModels.Titre;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -17,6 +20,7 @@ public class TitreController : Controller
|
|||||||
private readonly ITitreRepository titreRepository;
|
private readonly ITitreRepository titreRepository;
|
||||||
private readonly IArtisteRepository artisteRepository;
|
private readonly IArtisteRepository artisteRepository;
|
||||||
private readonly IStyleRepository styleRepository;
|
private readonly IStyleRepository styleRepository;
|
||||||
|
private readonly ITitreAdminService titreAdminService;
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Initializes a new instance of the <see cref="TitreController"/> class.
|
/// Initializes a new instance of the <see cref="TitreController"/> class.
|
||||||
@@ -26,12 +30,14 @@ public class TitreController : Controller
|
|||||||
/// <param name="titreRepository">Repository des titres injecté pour accéder aux données des titres.</param>
|
/// <param name="titreRepository">Repository des titres injecté pour accéder aux données des titres.</param>
|
||||||
/// <param name="artisteRepository">Repository des artistes injecté pour accéder aux données des artistes, nécessaires pour les associations avec les titres.</param>
|
/// <param name="artisteRepository">Repository des artistes injecté pour accéder aux données des artistes, nécessaires pour les associations avec les titres.</param>
|
||||||
/// <param name="styleRepository">Repository des styles injecté pour accéder aux données des styles, nécessaires pour les associations avec les titres.</param>
|
/// <param name="styleRepository">Repository des styles injecté pour accéder aux données des styles, nécessaires pour les associations avec les titres.</param>
|
||||||
public TitreController(ILogger<TitreController> logger, ITitreRepository titreRepository, IArtisteRepository artisteRepository, IStyleRepository styleRepository)
|
/// <param name="titreAdminService">Service Titre Administration injecté gérant Edit et Crée.</param>
|
||||||
|
public TitreController(ILogger<TitreController> logger, ITitreRepository titreRepository, IArtisteRepository artisteRepository, IStyleRepository styleRepository, ITitreAdminService titreAdminService)
|
||||||
{
|
{
|
||||||
this.logger = logger;
|
this.logger = logger;
|
||||||
this.titreRepository = titreRepository;
|
this.titreRepository = titreRepository;
|
||||||
this.artisteRepository = artisteRepository;
|
this.artisteRepository = artisteRepository;
|
||||||
this.styleRepository = styleRepository;
|
this.styleRepository = styleRepository;
|
||||||
|
this.titreAdminService = titreAdminService;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -81,6 +87,23 @@ public class TitreController : Controller
|
|||||||
return this.View(model);
|
return this.View(model);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Traite la soumission du formulaire de création d'un titre.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="model">Données saisies dans le formulaire.</param>
|
||||||
|
/// <returns>Redirection vers Index en cas de succès, réaffichage du formulaire sinon.</returns>
|
||||||
|
[HttpPost]
|
||||||
|
public IActionResult Create(TitreAdminDTO model)
|
||||||
|
{
|
||||||
|
if (this.ModelState.IsValid)
|
||||||
|
{
|
||||||
|
this.titreAdminService.CreerTitre(model);
|
||||||
|
return this.RedirectToAction("Index");
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.View(model);
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Affiche le formulaire de modification d'un titre existant dans la vue Edit, en préremplissant les champs avec les données du titre sélectionné. Les listes déroulantes pour les artistes et les styles sont également remplies pour permettre à l'utilisateur de modifier ces associations.
|
/// Affiche le formulaire de modification d'un titre existant dans la vue Edit, en préremplissant les champs avec les données du titre sélectionné. Les listes déroulantes pour les artistes et les styles sont également remplies pour permettre à l'utilisateur de modifier ces associations.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -121,6 +144,23 @@ public class TitreController : Controller
|
|||||||
return this.View(model);
|
return this.View(model);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Traite la soumission du formulaire de modification d'un titre.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="model">Données saisies dans le formulaire.</param>
|
||||||
|
/// <returns>Redirection vers Index en cas de succès, réaffichage du formulaire sinon.</returns>
|
||||||
|
[HttpPost]
|
||||||
|
public IActionResult Edit(TitreAdminDTO model)
|
||||||
|
{
|
||||||
|
if (this.ModelState.IsValid)
|
||||||
|
{
|
||||||
|
this.titreAdminService.ModifierTitre(model);
|
||||||
|
return this.RedirectToAction("Index");
|
||||||
|
}
|
||||||
|
|
||||||
|
return this.View(model);
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Affiche la vue de confirmation de suppression d'un titre, en récupérant les détails du titre à supprimer à partir de l'identifiant fourni. Le ViewModel contient les informations essentielles du titre, telles que le libellé et le nom de l'artiste, pour permettre à l'utilisateur de confirmer la suppression.
|
/// Affiche la vue de confirmation de suppression d'un titre, en récupérant les détails du titre à supprimer à partir de l'identifiant fourni. Le ViewModel contient les informations essentielles du titre, telles que le libellé et le nom de l'artiste, pour permettre à l'utilisateur de confirmer la suppression.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -163,8 +203,9 @@ public class TitreController : Controller
|
|||||||
if (titre != null)
|
if (titre != null)
|
||||||
{
|
{
|
||||||
this.titreRepository.Delete(titre);
|
this.titreRepository.Delete(titre);
|
||||||
|
return this.RedirectToAction("Index");
|
||||||
}
|
}
|
||||||
|
|
||||||
return this.RedirectToAction("Index");
|
return this.View(model);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -85,6 +85,7 @@ try
|
|||||||
}
|
}
|
||||||
|
|
||||||
builder.Services.AddScoped<IDashboardService, DashboardService>();
|
builder.Services.AddScoped<IDashboardService, DashboardService>();
|
||||||
|
builder.Services.AddScoped<ITitreAdminService, TitreAdminService>();
|
||||||
|
|
||||||
// https://learn.microsoft.com/fr-fr/aspnet/core/performance/response-compression?view=aspnetcore-10.0#configuration
|
// https://learn.microsoft.com/fr-fr/aspnet/core/performance/response-compression?view=aspnetcore-10.0#configuration
|
||||||
// Ajoute le service de compression des réponses HTTP pour réduire la taille des données envoyées au client et améliorer les performances de l'application.
|
// Ajoute le service de compression des réponses HTTP pour réduire la taille des données envoyées au client et améliorer les performances de l'application.
|
||||||
|
|||||||
Reference in New Issue
Block a user