#89 Supprimer les méthodes de controllers inutiles, les using non utilisés. Remplacer NotFound par des redirections vers les index et des logs.
This commit is contained in:
@@ -1,8 +1,4 @@
|
|||||||
using System;
|
using System.ComponentModel.DataAnnotations;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.ComponentModel.DataAnnotations;
|
|
||||||
using System.Text;
|
|
||||||
using System.Timers;
|
|
||||||
|
|
||||||
namespace Webzine.Entity
|
namespace Webzine.Entity
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,7 +1,4 @@
|
|||||||
using System;
|
using System.ComponentModel.DataAnnotations;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.ComponentModel.DataAnnotations;
|
|
||||||
using System.Text;
|
|
||||||
|
|
||||||
namespace Webzine.Entity
|
namespace Webzine.Entity
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,7 +1,4 @@
|
|||||||
using System;
|
using System.ComponentModel.DataAnnotations;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.ComponentModel.DataAnnotations;
|
|
||||||
using System.Text;
|
|
||||||
|
|
||||||
namespace Webzine.Entity
|
namespace Webzine.Entity
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -1,7 +1,4 @@
|
|||||||
using System;
|
using System.ComponentModel.DataAnnotations;
|
||||||
using System.Collections.Generic;
|
|
||||||
using System.ComponentModel.DataAnnotations;
|
|
||||||
using System.Text;
|
|
||||||
|
|
||||||
namespace Webzine.Entity
|
namespace Webzine.Entity
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -20,8 +20,8 @@ public class LocalEntityRepository : ITitreRepository
|
|||||||
/// <param name="logger">Service de journalisation injecte pour suivre les operations du repository.</param>
|
/// <param name="logger">Service de journalisation injecte pour suivre les operations du repository.</param>
|
||||||
public LocalEntityRepository(ILogger<LocalEntityRepository> logger)
|
public LocalEntityRepository(ILogger<LocalEntityRepository> logger)
|
||||||
{
|
{
|
||||||
_logger = logger;
|
this._logger = logger;
|
||||||
_logger.LogDebug(1, "NLog injected into LocalEntityRepository");
|
this._logger.LogDebug(1, "NLog injected into LocalEntityRepository");
|
||||||
|
|
||||||
var factory = new DataFactory();
|
var factory = new DataFactory();
|
||||||
var artistes = factory.GenerateArtists(10);
|
var artistes = factory.GenerateArtists(10);
|
||||||
|
|||||||
@@ -1,9 +1,7 @@
|
|||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using Microsoft.AspNetCore.Mvc.Rendering;
|
|
||||||
using Webzine.Entity;
|
using Webzine.Entity;
|
||||||
using Webzine.Entity.Fixtures;
|
using Webzine.Entity.Fixtures;
|
||||||
using Webzine.WebApplication.Areas.Administration.ViewModels.Artiste;
|
using Webzine.WebApplication.Areas.Administration.ViewModels.Artiste;
|
||||||
using Webzine.WebApplication.Areas.Administration.ViewModels.Titre;
|
|
||||||
|
|
||||||
namespace Webzine.WebApplication.Areas.Administration.Controllers;
|
namespace Webzine.WebApplication.Areas.Administration.Controllers;
|
||||||
|
|
||||||
@@ -17,15 +15,16 @@ public class ArtisteController : Controller
|
|||||||
|
|
||||||
public ArtisteController(ILogger<ArtisteController> logger)
|
public ArtisteController(ILogger<ArtisteController> logger)
|
||||||
{
|
{
|
||||||
_logger = logger;
|
this._logger = logger;
|
||||||
this._logger.LogDebug(1, "initialisation du ArtisteController d'administration");
|
this._logger.LogDebug(1, "initialisation du ArtisteController d'administration");
|
||||||
var factory = new DataFactory();
|
var factory = new DataFactory();
|
||||||
|
|
||||||
_artistes = factory.GenerateArtists(10);
|
_artistes = factory.GenerateArtists(10);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Affiche la liste des artistes. Pour l'instant, les artistes sont générés à partir de noms prédéfinis via la méthode SeedArtisteByName de la classe ArtisteFactory.
|
/// Affiche la liste des artistes. Pour l'instant, les artistes sont générés à partir de noms prédéfinis via la méthode SeedArtisteByName de la classe ArtisteFactory.
|
||||||
/// Chaque artiste est ensuite ajouté à une liste d'artistes qui est passée à la vue via un objet GroupeArtisteViewModel.
|
/// Chaque artiste est ensuite ajouté à une liste d'artistes qui est passée à la vue.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns>Redirection.</returns>
|
/// <returns>Redirection.</returns>
|
||||||
public IActionResult Index()
|
public IActionResult Index()
|
||||||
@@ -33,14 +32,9 @@ public class ArtisteController : Controller
|
|||||||
|
|
||||||
var _artistes_ordre = _artistes.OrderBy(t => t.Nom).ToList();
|
var _artistes_ordre = _artistes.OrderBy(t => t.Nom).ToList();
|
||||||
|
|
||||||
_logger.LogInformation("Initialisation du contrôleur TitreController pour l'Administration.");
|
this._logger.LogInformation("Initialisation du contrôleur TitreController pour l'Administration.");
|
||||||
|
|
||||||
GroupeArtisteViewModel groupeArtisteModel = new GroupeArtisteViewModel
|
return View(_artistes_ordre);
|
||||||
{
|
|
||||||
Artistes = _artistes_ordre
|
|
||||||
};
|
|
||||||
|
|
||||||
return View(groupeArtisteModel);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
@@ -18,9 +18,9 @@ namespace Webzine.WebApplication.Areas.Administration.Controllers
|
|||||||
/// <param name="logger">Service de journalisation injecté.</param>
|
/// <param name="logger">Service de journalisation injecté.</param>
|
||||||
public CommentaireController(ILogger<CommentaireController> logger)
|
public CommentaireController(ILogger<CommentaireController> logger)
|
||||||
{
|
{
|
||||||
_logger = logger;
|
this._logger = logger;
|
||||||
|
|
||||||
_logger.LogInformation("Initialisation du contrôleur CommentaireController.");
|
this._logger.LogInformation("Initialisation du contrôleur CommentaireController.");
|
||||||
|
|
||||||
var factory = new DataFactory(); // TODO injecter le factory via DI pour éviter de le recréer à chaque fois
|
var factory = new DataFactory(); // TODO injecter le factory via DI pour éviter de le recréer à chaque fois
|
||||||
// faire une classe statique
|
// faire une classe statique
|
||||||
@@ -31,7 +31,7 @@ namespace Webzine.WebApplication.Areas.Administration.Controllers
|
|||||||
|
|
||||||
_commentaires = factory.GenerateCommentaires(50, _titres);
|
_commentaires = factory.GenerateCommentaires(50, _titres);
|
||||||
|
|
||||||
_logger.LogInformation("Données fictives générées avec succès.");
|
this._logger.LogInformation("Données fictives générées avec succès.");
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -84,15 +84,17 @@ namespace Webzine.WebApplication.Areas.Administration.Controllers
|
|||||||
/// Affiche la vue de confirmation de suppression d'un commentaire, en récupérant les détails du commentaire à supprimer à partir de l'identifiant fourni.
|
/// Affiche la vue de confirmation de suppression d'un commentaire, en récupérant les détails du commentaire à supprimer à partir de l'identifiant fourni.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="id">L'identifiant du commentaire à supprimer.</param>
|
/// <param name="id">L'identifiant du commentaire à supprimer.</param>
|
||||||
/// <returns>La vue de confirmation de suppression avec le ViewModel contenant les détails du commentaire à supprimer, ou une réponse NotFound si le commentaire n'existe pas.</returns>
|
/// <returns>La vue de confirmation de suppression avec le ViewModel contenant les détails du commentaire à supprimer, ou une redirection vers l'index si le commentaire n'existe pas.</returns>
|
||||||
public IActionResult Delete(int id)
|
public IActionResult Delete(int id)
|
||||||
{
|
{
|
||||||
var commentaire = _commentaires
|
var commentaire = _commentaires
|
||||||
.FirstOrDefault(c => c.IdCommentaire == id);
|
.FirstOrDefault(c => c.IdCommentaire == id);
|
||||||
|
|
||||||
if (commentaire == null)
|
if (commentaire == null)
|
||||||
return NotFound(); // TODO faire une page d'erreur personnalisée pour les 404, et pas juste un message d'erreur dans la console
|
{
|
||||||
// mettre des accolades dans les if pour éviter les erreurs de maintenance, même pour une seule ligne de code
|
this._logger.LogWarning("Commentaire avec ID {Id} introuvable pour suppression.", id);
|
||||||
|
return RedirectToAction("Index");
|
||||||
|
}
|
||||||
|
|
||||||
var vm = new CommentaireDeleteViewModel
|
var vm = new CommentaireDeleteViewModel
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -20,9 +20,9 @@ public class DashboardController : Controller
|
|||||||
/// <param name="logger">Service de journalisation injecté.</param>
|
/// <param name="logger">Service de journalisation injecté.</param>
|
||||||
public DashboardController(ILogger<DashboardController> logger)
|
public DashboardController(ILogger<DashboardController> logger)
|
||||||
{
|
{
|
||||||
_logger = logger;
|
this._logger = logger;
|
||||||
|
|
||||||
_logger.LogInformation("Initialisation du contrôleur TitreController.");
|
this._logger.LogInformation("Initialisation du contrôleur TitreController.");
|
||||||
|
|
||||||
var factory = new DataFactory();
|
var factory = new DataFactory();
|
||||||
|
|
||||||
@@ -32,7 +32,7 @@ public class DashboardController : Controller
|
|||||||
|
|
||||||
factory.GenerateCommentaires(50, _titres);
|
factory.GenerateCommentaires(50, _titres);
|
||||||
|
|
||||||
_logger.LogInformation("Données fictives générées avec succès.");
|
this._logger.LogInformation("Données fictives générées avec succès.");
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
@@ -21,39 +21,22 @@ namespace Webzine.WebApplication.Areas.Administration.Controllers
|
|||||||
/// <param name="logger">Service de journalisation injecté.</param>
|
/// <param name="logger">Service de journalisation injecté.</param>
|
||||||
public StyleController(ILogger<StyleController> logger)
|
public StyleController(ILogger<StyleController> logger)
|
||||||
{
|
{
|
||||||
_logger = logger;
|
this._logger = logger;
|
||||||
|
|
||||||
_logger.LogInformation("Initialisation du contrôleur StyleController.");
|
this._logger.LogInformation("Initialisation du contrôleur StyleController.");
|
||||||
|
|
||||||
var factory = new DataFactory();
|
var factory = new DataFactory();
|
||||||
|
|
||||||
_styles = factory.GenerateStyles(10);
|
_styles = factory.GenerateStyles(10);
|
||||||
|
|
||||||
_logger.LogInformation("Données fictives générées avec succès.");
|
this._logger.LogInformation("Données fictives générées avec succès.");
|
||||||
}
|
}
|
||||||
|
|
||||||
// GET: Administration/Styles
|
// GET: Administration/Styles
|
||||||
public IActionResult Index()
|
public IActionResult Index()
|
||||||
{
|
{
|
||||||
// Création de données "bouchon" (mock) pour tester l'affichage
|
// Création de données "bouchon" (mock) pour tester l'affichage
|
||||||
var listeStyles = new List<Style> // TODO remplacer par les données générées dans le constructeur (la Factory)
|
var listeStyles = this._styles;
|
||||||
{
|
|
||||||
new Style
|
|
||||||
{
|
|
||||||
IdStyle = 1,
|
|
||||||
Libelle = "Rock",
|
|
||||||
},
|
|
||||||
new Style
|
|
||||||
{
|
|
||||||
IdStyle = 2,
|
|
||||||
Libelle = "Pop",
|
|
||||||
},
|
|
||||||
new Style
|
|
||||||
{
|
|
||||||
IdStyle = 3,
|
|
||||||
Libelle = "Jazz",
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
// Initialisation du ViewModel
|
// Initialisation du ViewModel
|
||||||
var viewModel = new StyleViewModel
|
var viewModel = new StyleViewModel
|
||||||
@@ -78,7 +61,9 @@ namespace Webzine.WebApplication.Areas.Administration.Controllers
|
|||||||
|
|
||||||
if (style == null)
|
if (style == null)
|
||||||
{
|
{
|
||||||
return this.NotFound();
|
this._logger.LogWarning("Style avec ID {Id} introuvable pour suppression.", id);
|
||||||
|
return RedirectToAction("Index");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var vm = new StyleDeleteViewModel
|
var vm = new StyleDeleteViewModel
|
||||||
@@ -99,7 +84,8 @@ namespace Webzine.WebApplication.Areas.Administration.Controllers
|
|||||||
|
|
||||||
if (style == null)
|
if (style == null)
|
||||||
{
|
{
|
||||||
return NotFound();
|
this._logger.LogWarning("Style avec ID {Id} introuvable pour style.", id);
|
||||||
|
return RedirectToAction("Index");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Mapping vers le ViewModel
|
// Mapping vers le ViewModel
|
||||||
|
|||||||
@@ -22,9 +22,9 @@ public class TitreController : Controller
|
|||||||
/// <param name="logger">Service de journalisation injecté.</param>
|
/// <param name="logger">Service de journalisation injecté.</param>
|
||||||
public TitreController(ILogger<TitreController> logger)
|
public TitreController(ILogger<TitreController> logger)
|
||||||
{
|
{
|
||||||
_logger = logger;
|
this._logger = logger;
|
||||||
|
|
||||||
_logger.LogInformation("Initialisation du contrôleur TitreController pour l'Administration.");
|
this._logger.LogInformation("Initialisation du contrôleur TitreController pour l'Administration.");
|
||||||
|
|
||||||
var factory = new DataFactory();
|
var factory = new DataFactory();
|
||||||
|
|
||||||
@@ -34,7 +34,7 @@ public class TitreController : Controller
|
|||||||
|
|
||||||
factory.GenerateCommentaires(50, _titres);
|
factory.GenerateCommentaires(50, _titres);
|
||||||
|
|
||||||
_logger.LogInformation("Données fictives générées avec succès.");
|
this._logger.LogInformation("Données fictives générées avec succès.");
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -86,7 +86,7 @@ public class TitreController : Controller
|
|||||||
/// 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>
|
||||||
/// <param name="id">L'identifiant du titre à modifier, utilisé pour récupérer les données du titre à partir de la liste des titres générés.</param>
|
/// <param name="id">L'identifiant du titre à modifier, utilisé pour récupérer les données du titre à partir de la liste des titres générés.</param>
|
||||||
/// <returns>La vue Edit avec le ViewModel contenant les données du titre à modifier, ainsi que les listes déroulantes pour les artistes et les styles. En cas d'erreur, retourne une réponse NotFound si le titre n'existe pas.</returns>
|
/// <returns>La vue Edit avec le ViewModel contenant les données du titre à modifier, ainsi que les listes déroulantes pour les artistes et les styles. </returns>
|
||||||
public IActionResult Edit(int id)
|
public IActionResult Edit(int id)
|
||||||
{
|
{
|
||||||
var titre = _titres.First(t => t.IdTitre == id);
|
var titre = _titres.First(t => t.IdTitre == id);
|
||||||
@@ -126,7 +126,7 @@ public class TitreController : Controller
|
|||||||
/// 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>
|
||||||
/// <param name="id">L'identifiant du titre à supprimer, utilisé pour récupérer les données du titre à partir de la liste des titres générés.</param>
|
/// <param name="id">L'identifiant du titre à supprimer, utilisé pour récupérer les données du titre à partir de la liste des titres générés.</param>
|
||||||
/// <returns>La vue de confirmation de suppression avec le ViewModel contenant les détails du titre à supprimer, ou une réponse NotFound si le titre n'existe pas.</returns>
|
/// <returns>La vue de confirmation de suppression avec le ViewModel contenant les détails du titre à supprimer.</returns>
|
||||||
public IActionResult Delete(int id)
|
public IActionResult Delete(int id)
|
||||||
{
|
{
|
||||||
var titre = _titres.First(t => t.IdTitre == id);
|
var titre = _titres.First(t => t.IdTitre == id);
|
||||||
|
|||||||
@@ -1,14 +0,0 @@
|
|||||||
namespace Webzine.WebApplication.Areas.Administration.ViewModels.Artiste
|
|
||||||
{
|
|
||||||
using Webzine.Entity;
|
|
||||||
/// <summary>
|
|
||||||
/// ViewModel pour afficher un groupe d'artiste.
|
|
||||||
/// </summary>
|
|
||||||
public class GroupeArtisteViewModel // TODO groupe view model pas bien, pas pertinent
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Liste d'artistes.
|
|
||||||
/// </summary>
|
|
||||||
public IEnumerable<Artiste> Artistes { get; set; } = new List<Artiste>();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
@model Webzine.WebApplication.Areas.Administration.ViewModels.Artiste.GroupeArtisteViewModel
|
@model IEnumerable<Webzine.Entity.Artiste>
|
||||||
|
|
||||||
@{
|
@{
|
||||||
ViewData["Title"] = "Artiste";
|
ViewData["Title"] = "Artiste";
|
||||||
@@ -21,7 +21,7 @@
|
|||||||
</thead>
|
</thead>
|
||||||
<tbody>
|
<tbody>
|
||||||
|
|
||||||
@foreach (var artiste in Model.Artistes)
|
@foreach (var artiste in Model)
|
||||||
{
|
{
|
||||||
<tr class="align-middle">
|
<tr class="align-middle">
|
||||||
<td class="p-2">
|
<td class="p-2">
|
||||||
@@ -29,13 +29,11 @@
|
|||||||
</td>
|
</td>
|
||||||
<td class="text-center p-2">
|
<td class="text-center p-2">
|
||||||
|
|
||||||
<a asp-action="Edit" asp-route-id="@artiste.IdArtiste"
|
<a asp-action="Edit" asp-route-id="@artiste.IdArtiste">
|
||||||
>
|
|
||||||
<i class="fa fa-edit"></i>
|
<i class="fa fa-edit"></i>
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
<a asp-action="Delete" asp-route-id="@artiste.IdArtiste"
|
<a asp-action="Delete" asp-route-id="@artiste.IdArtiste">
|
||||||
>
|
|
||||||
<i class="fa fa-trash"></i>
|
<i class="fa fa-trash"></i>
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
|
|||||||
@@ -1,7 +1,5 @@
|
|||||||
using Microsoft.AspNetCore.Mvc;
|
using Microsoft.AspNetCore.Mvc;
|
||||||
using Webzine.Entity.Fixtures;
|
using Webzine.Entity.Fixtures;
|
||||||
using Webzine.WebApplication.ViewModels;
|
|
||||||
using Webzine.WebApplication.ViewModels.Artiste;
|
|
||||||
|
|
||||||
namespace Webzine.WebApplication.Controllers
|
namespace Webzine.WebApplication.Controllers
|
||||||
{
|
{
|
||||||
@@ -16,7 +14,7 @@ namespace Webzine.WebApplication.Controllers
|
|||||||
/// <param name="logger">Service de journalisation injecté pour enregistrer les événements et les erreurs.</param>
|
/// <param name="logger">Service de journalisation injecté pour enregistrer les événements et les erreurs.</param>
|
||||||
public ArtisteController(ILogger<ArtisteController> logger)
|
public ArtisteController(ILogger<ArtisteController> logger)
|
||||||
{
|
{
|
||||||
_logger = logger;
|
this._logger = logger;
|
||||||
this._logger.LogDebug(1, "initialisation du ArtisteController");
|
this._logger.LogDebug(1, "initialisation du ArtisteController");
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -28,9 +26,13 @@ namespace Webzine.WebApplication.Controllers
|
|||||||
[HttpGet("/artiste/{nom}")]
|
[HttpGet("/artiste/{nom}")]
|
||||||
public IActionResult Index(string nom)
|
public IActionResult Index(string nom)
|
||||||
{
|
{
|
||||||
_logger.LogInformation("Tentative d'accès à l'artiste avec le nom : {NomArtiste}", nom);
|
this._logger.LogInformation("Tentative d'accès à l'artiste avec le nom : {NomArtiste}", nom);
|
||||||
|
|
||||||
if (string.IsNullOrEmpty(nom)) return RedirectToAction("Index", "Accueil");
|
if (string.IsNullOrEmpty(nom))
|
||||||
|
{
|
||||||
|
this._logger.LogWarning("Nom de l'artiste manquant dans la requête.");
|
||||||
|
return RedirectToAction("Index", "Accueil");
|
||||||
|
}
|
||||||
|
|
||||||
// On transforme "fatal-bazooka" en "Fatal Bazooka" pour la factory
|
// On transforme "fatal-bazooka" en "Fatal Bazooka" pour la factory
|
||||||
string nomPropre = System.Globalization.CultureInfo.CurrentCulture.TextInfo
|
string nomPropre = System.Globalization.CultureInfo.CurrentCulture.TextInfo
|
||||||
@@ -41,20 +43,13 @@ namespace Webzine.WebApplication.Controllers
|
|||||||
|
|
||||||
if (artiste == null)
|
if (artiste == null)
|
||||||
{
|
{
|
||||||
_logger.LogWarning("Artiste non trouvé pour le nom : {NomArtiste}", nomPropre);
|
this._logger.LogWarning("Artiste non trouvé pour le nom : {NomArtiste}", nomPropre);
|
||||||
return NotFound();
|
return RedirectToAction("Index");
|
||||||
}
|
}
|
||||||
|
|
||||||
_logger.LogInformation("Artiste trouvé : {NomArtiste}", nom);
|
this._logger.LogInformation("Artiste trouvé : {NomArtiste}", nom);
|
||||||
|
|
||||||
// On remplit le ViewModel
|
return View(artiste);
|
||||||
var viewModel = new ArtisteModel
|
|
||||||
{
|
|
||||||
Artiste = artiste,
|
|
||||||
Titres = artiste.Titres
|
|
||||||
};
|
|
||||||
|
|
||||||
return View(viewModel);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ namespace Webzine.WebApplication.Controllers
|
|||||||
/// <param name="logger">Service de journalisation injecté pour enregistrer les événements et les erreurs.</param>
|
/// <param name="logger">Service de journalisation injecté pour enregistrer les événements et les erreurs.</param>
|
||||||
public ContactController(ILogger<ContactController> logger)
|
public ContactController(ILogger<ContactController> logger)
|
||||||
{
|
{
|
||||||
_logger = logger;
|
this._logger = logger;
|
||||||
this._logger.LogDebug(1, "initialisation du ContactController");
|
this._logger.LogDebug(1, "initialisation du ContactController");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -13,14 +13,14 @@ public class RechercheController : Controller
|
|||||||
|
|
||||||
public RechercheController(ILogger<RechercheController> logger, ITitreRepository titreRepository)
|
public RechercheController(ILogger<RechercheController> logger, ITitreRepository titreRepository)
|
||||||
{
|
{
|
||||||
_logger = logger;
|
this._logger = logger;
|
||||||
_titreRepository = titreRepository;
|
this._titreRepository = titreRepository;
|
||||||
}
|
}
|
||||||
|
|
||||||
[HttpPost("")]
|
[HttpPost("")]
|
||||||
public IActionResult Index(string mot)
|
public IActionResult Index(string mot)
|
||||||
{
|
{
|
||||||
_logger.LogInformation("Recherche artistes/titres pour le mot : {Mot}.", mot);
|
this._logger.LogInformation("Recherche artistes/titres pour le mot : {Mot}.", mot);
|
||||||
|
|
||||||
var titres = _titreRepository.Search(mot)
|
var titres = _titreRepository.Search(mot)
|
||||||
.Concat(_titreRepository.SearchByStyle(mot))
|
.Concat(_titreRepository.SearchByStyle(mot))
|
||||||
|
|||||||
@@ -23,10 +23,10 @@ public class TitreController : Controller
|
|||||||
/// <param name="titreRepository">Repository des titres injecte.</param>
|
/// <param name="titreRepository">Repository des titres injecte.</param>
|
||||||
public TitreController(ILogger<TitreController> logger, ITitreRepository titreRepository)
|
public TitreController(ILogger<TitreController> logger, ITitreRepository titreRepository)
|
||||||
{
|
{
|
||||||
_logger = logger;
|
this._logger = logger;
|
||||||
_titreRepository = titreRepository;
|
this._titreRepository = titreRepository;
|
||||||
|
|
||||||
_logger.LogInformation("Initialisation du controleur TitreController.");
|
this._logger.LogInformation("Initialisation du controleur TitreController.");
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
@@ -37,14 +37,14 @@ public class TitreController : Controller
|
|||||||
[HttpGet("{id}")]
|
[HttpGet("{id}")]
|
||||||
public IActionResult Details(int id)
|
public IActionResult Details(int id)
|
||||||
{
|
{
|
||||||
_logger.LogInformation("Demande d'affichage du detail pour le titre ID {Id}.", id);
|
this._logger.LogInformation("Demande d'affichage du detail pour le titre ID {Id}.", id);
|
||||||
|
|
||||||
var titre = FindById(id);
|
var titre = this._titreRepository.Find(id);
|
||||||
|
|
||||||
if (titre == null)
|
if (titre == null)
|
||||||
{
|
{
|
||||||
_logger.LogWarning("Titre avec ID {Id} introuvable.", id);
|
this._logger.LogWarning("Titre avec ID {Id} introuvable.", id);
|
||||||
return NotFound();
|
return RedirectToAction("Index");
|
||||||
}
|
}
|
||||||
|
|
||||||
var vm = new TitreDetail
|
var vm = new TitreDetail
|
||||||
@@ -79,7 +79,7 @@ public class TitreController : Controller
|
|||||||
[HttpGet("style/{style}")]
|
[HttpGet("style/{style}")]
|
||||||
public IActionResult Style(string style)
|
public IActionResult Style(string style)
|
||||||
{
|
{
|
||||||
_logger.LogInformation("Recherche des titres pour le style : {Style}.", style);
|
this._logger.LogInformation("Recherche des titres pour le style : {Style}.", style);
|
||||||
|
|
||||||
var titresFiltres = _titreRepository.SearchByStyle(style).ToList();
|
var titresFiltres = _titreRepository.SearchByStyle(style).ToList();
|
||||||
|
|
||||||
@@ -102,15 +102,12 @@ public class TitreController : Controller
|
|||||||
{
|
{
|
||||||
this._logger.LogInformation("Ajout d'un like pour le titre ID {Id}.", model.IdTitre);
|
this._logger.LogInformation("Ajout d'un like pour le titre ID {Id}.", model.IdTitre);
|
||||||
|
|
||||||
var titre = FindById(model.IdTitre); //TODO appeler directement le repository pour éviter une requête supplémentaire
|
var titre = this._titreRepository.Find(model.IdTitre);
|
||||||
|
|
||||||
// TODO faut mettre des autres cas d'erreur, ça va faire un 404
|
|
||||||
if (titre == null)
|
if (titre == null)
|
||||||
{
|
{
|
||||||
_logger.LogWarning("Impossible d'ajouter un like. Titre ID {Id} introuvable.", model.IdTitre);
|
this._logger.LogWarning("Impossible d'ajouter un like. Titre ID {Id} introuvable.", model.IdTitre);
|
||||||
return NotFound(); // TODO va pas faire une page d'erreur personnalisée, ça va faire un 404
|
return RedirectToAction("Index");
|
||||||
// faudrait faire une page d'erreur personnalisée pour les 404, et pas juste un message d'erreur dans la console
|
|
||||||
// ou rediriger vers page accueil si le titre est pas trouvé, ça serait plus user-friendly
|
|
||||||
}
|
}
|
||||||
|
|
||||||
titre.NbLikes++;
|
titre.NbLikes++;
|
||||||
@@ -128,16 +125,16 @@ public class TitreController : Controller
|
|||||||
{
|
{
|
||||||
if (!ModelState.IsValid)
|
if (!ModelState.IsValid)
|
||||||
{
|
{
|
||||||
_logger.LogWarning("Echec de validation du modele de commentaire pour le titre ID {Id}.", model.IdTitre);
|
this._logger.LogWarning("Echec de validation du modele de commentaire pour le titre ID {Id}.", model.IdTitre);
|
||||||
return RedirectToAction("Details", new { id = model.IdTitre });
|
return RedirectToAction("Details", new { id = model.IdTitre });
|
||||||
}
|
}
|
||||||
|
|
||||||
var titre = FindById(model.IdTitre);
|
var titre = this._titreRepository.Find(model.IdTitre);
|
||||||
|
|
||||||
if (titre == null)
|
if (titre == null)
|
||||||
{
|
{
|
||||||
_logger.LogWarning("Impossible d'ajouter le commentaire. Titre ID {Id} introuvable.", model.IdTitre);
|
this._logger.LogWarning("Impossible d'ajouter le commentaire. Titre ID {Id} introuvable.", model.IdTitre);
|
||||||
return NotFound();
|
return RedirectToAction("Index");
|
||||||
}
|
}
|
||||||
|
|
||||||
var commentaire = new Commentaire
|
var commentaire = new Commentaire
|
||||||
@@ -150,16 +147,11 @@ public class TitreController : Controller
|
|||||||
|
|
||||||
titre.Commentaires.Add(commentaire);
|
titre.Commentaires.Add(commentaire);
|
||||||
|
|
||||||
_logger.LogInformation("Commentaire ajoute avec succes au titre ID {Id}.", model.IdTitre);
|
this._logger.LogInformation("Commentaire ajoute avec succes au titre ID {Id}.", model.IdTitre);
|
||||||
|
|
||||||
return RedirectToAction("Details", new { id = model.IdTitre });
|
return RedirectToAction("Details", new { id = model.IdTitre });
|
||||||
}
|
}
|
||||||
|
|
||||||
private Titre? FindById(int id) // TODO virer ça vu que ça appelle directement le repository
|
|
||||||
{
|
|
||||||
return _titreRepository.Find(id);
|
|
||||||
}
|
|
||||||
|
|
||||||
private static TitreStyleItem MapTitreItem(Titre titre)
|
private static TitreStyleItem MapTitreItem(Titre titre)
|
||||||
{
|
{
|
||||||
return new TitreStyleItem
|
return new TitreStyleItem
|
||||||
|
|||||||
@@ -1,6 +1,4 @@
|
|||||||
using Webzine.Entity;
|
namespace Webzine.WebApplication.ViewModels.Accueil
|
||||||
|
|
||||||
namespace Webzine.WebApplication.ViewModels.Accueil
|
|
||||||
{
|
{
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// ViewModel pour la page d'accueil du webzine, affichant les derniers titres et les titres les plus populaires.
|
/// ViewModel pour la page d'accueil du webzine, affichant les derniers titres et les titres les plus populaires.
|
||||||
|
|||||||
@@ -1,20 +0,0 @@
|
|||||||
using Webzine.Entity;
|
|
||||||
|
|
||||||
namespace Webzine.WebApplication.ViewModels.Artiste
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// ViewModel pour afficher les détails d'un artiste, incluant les informations de l'artiste et la liste de ses titres.
|
|
||||||
/// </summary>
|
|
||||||
public class ArtisteModel // TODO viewmodel sert à rien, c'est juste un artiste et une liste de titres, on peut faire ça directement dans la vue non ?
|
|
||||||
{
|
|
||||||
/// <summary>
|
|
||||||
/// Artiste dont on affiche les détails.
|
|
||||||
/// </summary>
|
|
||||||
public Entity.Artiste Artiste { get; set; }
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Liste des titres de l'artiste.
|
|
||||||
/// </summary>
|
|
||||||
public List<Entity.Titre> Titres { get; set; }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
@model Webzine.WebApplication.ViewModels.Artiste.ArtisteModel
|
@model Webzine.Entity.Artiste
|
||||||
|
|
||||||
@{
|
@{
|
||||||
ViewData["Title"] = "Artiste";
|
ViewData["Title"] = "Artiste";
|
||||||
@@ -6,11 +6,11 @@
|
|||||||
|
|
||||||
|
|
||||||
<div class="container">
|
<div class="container">
|
||||||
<h1>@Model.Artiste.Nom</h1>
|
<h1>@Model.Nom</h1>
|
||||||
|
|
||||||
<hr class="mb-5" />
|
<hr class="mb-5" />
|
||||||
|
|
||||||
<p class="lead">@Model.Artiste.Biographie</p>
|
<p class="lead">@Model.Biographie</p>
|
||||||
|
|
||||||
<h2 class="mt-5 mb-4">Albums</h2>
|
<h2 class="mt-5 mb-4">Albums</h2>
|
||||||
<hr class="mb-5" />
|
<hr class="mb-5" />
|
||||||
|
|||||||
Reference in New Issue
Block a user