Merge conflict différence de 'AccueilController' ajout de logger

This commit is contained in:
Loic Masi
2026-03-05 16:24:08 +01:00
25 changed files with 840 additions and 64 deletions

View File

@@ -0,0 +1,70 @@
@model Webzine.WebApplication.ViewModels.ArtisteModel
@{
ViewData["Title"] = "Artiste";
}
<div class="container">
<h1>@Model.Artiste.Nom</h1>
<hr class="mb-5" />
<p class="lead">@Model.Artiste.Biographie</p>
<h2 class="mt-5 mb-4">Albums</h2>
<hr class="mb-5" />
@* On groupe les titres par nom d'album *@
@{
var albumsGroupes = Model.Titres
.OrderBy(t => t.Libelle) // Trie les titres par ordre alphabétique au sein de chaque groupe futur
.GroupBy(t => t.Album) // Groupe par nom d'album
.OrderBy(g => g.Key); // Trie les albums par ordre alphabétique (la clé du groupe)
}
@foreach (var groupe in albumsGroupes)
{
// On récupère le premier titre du groupe pour afficher l'image de l'album
var premierTitre = groupe.First();
<div class="row mb-5 align-items-start">
<div class="col-md-3 mb-3">
<img src="@premierTitre.UrlJaquette"
class="img-fluid shadow-sm rounded border"
alt="Pochette de @groupe.Key" />
</div>
<div class="col-md-9">
<h3 class="h4 pb-2">@groupe.Key</h3>
<table class="table table-hover table-sm mt-3">
<thead class="text-muted">
<tr>
<th style="width: 80px">Durée</th>
<th>Titre</th>
</tr>
</thead>
<tbody>
@foreach (var titre in groupe)
{
// Conversion des secondes en format MM:SS
var minutes = titre.Duree / 60;
var secondes = titre.Duree % 60;
var dureeFormatee = $"{minutes}:{secondes:D2}";
<tr>
<td class="text-secondary font-monospace">@dureeFormatee</td>
<td>
<span class="text-primary fw-bold" style="cursor:pointer">
@titre.Libelle
</span>
</td>
</tr>
}
</tbody>
</table>
</div>
</div>
}
</div>

View File

@@ -0,0 +1,66 @@
@{
ViewData["Title"] = "Contact";
}
<div class="container">
<h1>Contact</h1>
<div>
C.U.C.D.B - DIIAGE <br />
69 Avenue Aristide Briand<br />
21000 Dijon</p>
</div>
<div>
<i class="fa-solid fa-phone"></i> Phone : 03 80 40 50 60<br />
<i class="fa-solid fa-envelope"></i> secretariat@cucdb.fr
</div>
</div>
<div class="container mt-5">
<h2>Suivez-nous</h2>
<div class="row g-4 text-center">
<div class="col-md-4">
<a href="#" class="card h-100 p-4 shadow-sm border-0 bg-light-subtle text-decoration-none">
<i class="fa-solid fa-link fa-3x text-primary mb-3"></i>
<div class="fw-bold text-primary">Site officiel du DIIAGE</div>
</a>
</div>
<div class="col-md-4">
<a href="#" class="card h-100 p-4 shadow-sm border-0 bg-light-subtle text-decoration-none">
<i class="fa-brands fa-facebook fa-3x text-primary mb-3"></i>
<div class="fw-bold text-primary">Facebook</div>
</a>
</div>
<div class="col-md-4">
<a href="#" class="card h-100 p-4 shadow-sm border-0 bg-light-subtle text-decoration-none">
<i class="fa-brands fa-instagram fa-3x text-primary mb-3"></i>
<div class="fw-bold text-primary">Instagram</div>
</a>
</div>
<div class="col-md-4">
<a href="#" class="card h-100 p-4 shadow-sm border-0 bg-light-subtle text-decoration-none">
<i class="fa-brands fa-linkedin fa-3x text-primary mb-3"></i>
<div class="fw-bold text-primary">LinkedIn</div>
</a>
</div>
<div class="col-md-4">
<a href="#" class="card h-100 p-4 shadow-sm border-0 bg-light-subtle text-decoration-none">
<i class="fa-solid fa-map fa-3x text-primary mb-3"></i>
<div class="fw-bold text-primary">Google Maps</div>
</a>
</div>
<div class="col-md-4">
<a href="#" class="card h-100 p-4 shadow-sm border-0 bg-light-subtle text-decoration-none">
<i class="fa-brands fa-twitter fa-3x text-primary mb-3"></i>
<div class="fw-bold text-primary">Twitter</div>
</a>
</div>
</div>
</div>

View File

@@ -6,8 +6,9 @@
<title>@ViewData["Title"] - Webzine</title>
@* Ajout de bootstrap *@
<script src="./js/bootstrap.min.js" defer></script>
<link rel="stylesheet" href="./css/bootstrap.min.css">
<script src="~/js/bootstrap.min.js" defer></script>
<link rel="stylesheet" href="~/css/app.css">
<link rel="stylesheet" href="~/css/bootstrap.min.css">
@* Ajout de font-awesome *@
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.1/css/all.min.css">

View File

@@ -0,0 +1,193 @@
@model Webzine.WebApplication.ViewsModels.Titre.TitreDetail
@{
ViewData["Title"] = Model.Details.Libelle;
}
<div class="container mt-4">
<div class="mb-3">
<h2>
<a asp-area="" asp-controller="" asp-action="" asp-route-style="@Model.Details.ArtisteNom">@Model.Details.ArtisteNom</a>
- @Model.Details.Libelle
</h2>
<div class="d-flex justify-content-between align-items-center pb-2 mb-3">
<div class="text-muted small d-flex align-items-center gap-4">
<!-- Date -->
<span class="text-dark">
<i class="fa fa-calendar me-1"></i>
Le @Model.Details.DateSortie.ToString("dd/MM/yyyy 'à' HH:mm")
</span>
<!-- Likes -->
<span>
<i class="fa fa-heart text-dark me-1"></i>
@Model.Details.NbLikes
</span>
<!-- Styles -->
<span class="text-dark">
<i class="fa fa-tags me-1"></i>
Styles :
@for (int i = 0; i < Model.Details.Styles.Count; i++)
{
var style = Model.Details.Styles[i];
<a class="text-primary text-decoration-none fw-semibold"
asp-controller="Titre"
asp-action="Style"
asp-route-style="@style.Libelle">
@style.Libelle
</a>
@if (i < Model.Details.Styles.Count - 1)
{
<span>, </span>
}
}
</span>
</div>
<!-- ACTION BUTTONS -->
<div class="d-flex gap-2">
<form asp-action="Like" method="post">
<input type="hidden" name="IdTitre" value="@Model.Details.IdTitre" />
<button type="submit" class="btn btn-outline-primary btn-sm">
<i class="fa fa-thumbs-up me-1"></i> Like
</button>
</form>
<a class="btn text-primary btn-sm">
<i class="fa fa-pen-to-square me-1"></i> Editer
</a>
</div>
</div>
</div>
<!-- CONTENU -->
<div class="row mt-4">
<div class="col-md-8">
<p class="text-justify">
@Model.Details.Chronique
</p>
</div>
<div class="col-md-4 text-center">
<img src="@Model.Details.UrlJaquette"
class="img-fluid rounded shadow"
alt="Jaquette" />
</div>
</div>
<!-- LECTEUR -->
@if (!string.IsNullOrEmpty(Model.Details.UrlEcoute))
{
<div class="mt-4">
<iframe width="100%" height="315"
src="@Model.Details.UrlEcoute"
title="Lecteur"
allowfullscreen>
</iframe>
</div>
}
<!-- FORMULAIRE COMMENTAIRE -->
<div class="mt-4 mb-4">
<div>
<h4 class="mb-4">Donne ton avis sur le titre</h4>
<form asp-action="Comment" method="post">
<input type="hidden" name="IdTitre" value="@Model.Details.IdTitre"/>
<div class="row mb-3 align-items-center">
<label class="col-sm-2 col-form-label">
Nom<span class="text-danger">*</span>
</label>
<div class="col">
<input name="Auteur"
class="form-control input-full"
placeholder="Votre nom"
required />
</div>
</div>
<div class="row mb-3 align-items-start">
<label class="col-sm-2 col-form-label">
Commentaire<span class="text-danger">*</span>
</label>
<div class="col">
<textarea name="Contenu"
rows="3"
class="form-control input-full"
placeholder="Votre commentaire..."
required></textarea>
</div>
</div>
<div class="row">
<div class="col-sm-6 offset-sm-2">
<button type="submit" class="btn btn-primary">
Envoyer
</button>
</div>
</div>
</form>
</div>
</div>
<!-- COMMENTAIRES -->
<div class="mt-4">
<h4 class="mb-4">Commentaires</h4>
@if (Model.Details.Commentaires.Any())
{
foreach (var comment in Model.Details.Commentaires.OrderByDescending(c => c.DateCreation))
{
<div class="row mb-4">
<div class="col-sm-1"></div>
<div class="col-sm-6 d-flex">
<img src="/images/avatar.png"
width="50"
height="50"
class="rounded-circle me-3 shadow-sm"
alt="avatar" />
<div>
<strong>@comment.Auteur</strong>,
<span class="text-muted small">
le @comment.DateCreation.ToString("dd/MM/yyyy HH:mm")
</span>
<p class="mb-0">@comment.Contenu</p>
</div>
</div>
</div>
}
}
else
{
<div class="row">
<div class="col-sm-6 offset-sm-2">
<p class="text-muted">Aucun commentaire pour le moment.</p>
</div>
</div>
}
</div>
</div>

View File

@@ -0,0 +1,50 @@
@model Webzine.WebApplication.ViewsModels.Titre.TitreStyle
@{
ViewData["Title"] = $"Titres - {Model.StyleName}";
Layout = "_Layout";
}
<div class="container mt-4">
<div class="row">
<!-- COLUMN -->
<div class="col-md-8">
<h1 class="mb-4 titre-h1">Titres ayant le style @Model.StyleName</h1>
@if (!Model.Titres.Any())
{
<div class="alert alert-info">
Aucun titre trouvé.
</div>
}
else
{
@foreach (var titre in Model.Titres)
{
<div class="titre-item d-flex align-items-start">
<!-- Image -->
<div class="me-3">
<img src="@titre.UrlJaquette" alt="@titre.Libelle" />
</div>
<!-- Infos -->
<div>
<a asp-action="Details"
asp-route-id="@titre.IdTitre"
class="titre-link">
@titre.ArtisteNom - @titre.Libelle
</a>
<div class="titre-duree">
Durée : @TimeSpan.FromSeconds(titre.Duree).ToString(@"mm\:ss")
</div>
</div>
</div>
}
}
</div>
</div>
</div>