feat: implémentation TitreAdminService pour la gestion des titres et ajout TitreAdminModèle de commande

This commit is contained in:
mirage
2026-03-31 16:53:34 +02:00
parent 21e1ab438c
commit 7c373d081b
8 changed files with 276 additions and 23 deletions

View File

@@ -1,5 +1,8 @@
namespace Webzine.WebApplication.Areas.Administration.Controllers;
using Business.Contracts;
using Business.Contracts.Models;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.Rendering;
@@ -17,6 +20,7 @@ public class TitreController : Controller
private readonly ITitreRepository titreRepository;
private readonly IArtisteRepository artisteRepository;
private readonly IStyleRepository styleRepository;
private readonly ITitreAdminService titreAdminService;
/// <summary>
/// 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="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>
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.titreRepository = titreRepository;
this.artisteRepository = artisteRepository;
this.styleRepository = styleRepository;
this.titreAdminService = titreAdminService;
}
/// <summary>
@@ -81,6 +87,23 @@ public class TitreController : Controller
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(TitreAdminCommande model)
{
if (this.ModelState.IsValid)
{
this.titreAdminService.CreerTitre(model);
return this.RedirectToAction("Index");
}
return this.View(model);
}
/// <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.
/// </summary>
@@ -121,6 +144,23 @@ public class TitreController : Controller
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(TitreAdminCommande model)
{
if (this.ModelState.IsValid)
{
this.titreAdminService.ModifierTitre(model);
return this.RedirectToAction("Index");
}
return this.View(model);
}
/// <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.
/// </summary>
@@ -152,8 +192,9 @@ public class TitreController : Controller
if (titre != null)
{
this.titreRepository.Delete(titre);
return this.RedirectToAction("Index");
}
return this.RedirectToAction("Index");
return this.View(model);
}
}

View File

@@ -6,6 +6,8 @@ using Microsoft.EntityFrameworkCore;
using NLog;
using NLog.Web;
using Webzine.Business;
using Webzine.Business.Contracts;
using Webzine.EntitiesContext;
using Webzine.Entity;
using Webzine.Entity.Fixtures;
@@ -66,6 +68,8 @@ try
builder.Services.AddSingleton<InMemoryDataStore>();
}
builder.Services.AddScoped<ITitreAdminService, TitreAdminService>();
// 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.
builder.Services.AddResponseCompression();

View File

@@ -34,6 +34,8 @@
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Webzine.Business.Contracts\Webzine.Business.Contracts.csproj" />
<ProjectReference Include="..\Webzine.Business\Webzine.Business.csproj" />
<ProjectReference Include="..\Webzine.EntitiesContext\Webzine.EntitiesContext.csproj" />
<ProjectReference Include="..\Webzine.Entity\Webzine.Entity.csproj" />
<ProjectReference Include="..\Webzine.Repository\Webzine.Repository.csproj" />