- CSS remplacé par Bootstrap
- modification route
This commit is contained in:
b.nodon
2026-03-05 15:25:41 +01:00
21 changed files with 711 additions and 32 deletions

View File

@@ -0,0 +1,6 @@
**Loïc Masi** :
- Création de 'AccueilController'
- Création de la fonction Index() -> afficher l'accueil du webzine
- Ajout de la vue 'Views/Accueil/Index.cshtml'
- Mise en place d'un Header dans 'Views/Shared/_Header.cshtml'
- Mise en place de la Sidebar dans 'Views/Shared/_Sidebar.cshtml'

View File

@@ -0,0 +1,186 @@
namespace Webzine.Entity.Fixtures;
using Entity;
using Faker;
using System;
using System.Collections.Generic;
using System.Linq;
public class DataFactory
{
/// <summary>
/// Dictionnaire contenant des données de musique réelles pour les titres générés.
/// </summary>
public Dictionary<string, (string TrackUrl, string ImageUrl)> RealMusicData { get; set; }
= new Dictionary<string, (string TrackUrl, string ImageUrl)>
{
{ "juliana_chahayed_1", ("https://open.spotify.com/intl-fr/track/0qYLUdJQMhrCFA9dNZGcnm?si=b4fd45727a354a31",
"https://i.scdn.co/image/ab67616d0000b2738e8e7b8f8f8f8f8f8f8f8f8") },
{ "mister_v_1", ("https://youtu.be/JeqUw7sGUK8?si=FnmFR2EgkVY6MhqQ",
"https://img.youtube.com/vi/JeqUw7sGUK8/maxresdefault.jpg") },
{ "compagnie_creole_1", ("https://youtu.be/wfxt1SGWAI8",
"https://img.youtube.com/vi/wfxt1SGWAI8/maxresdefault.jpg") },
{ "femto_1", ("https://open.spotify.com/intl-fr/track/0qYLUdJQMhrCFA9dNZGcnm?si=b4fd45727a354a31",
"https://i.scdn.co/image/ab67616d0000b2738e8e7b8f8f8f8f8f8f8f8f8") },
{ "chat_noir_1", ("https://youtu.be/OTi4-q-_Tj0?si=SNnLd-6Y893nL5Au",
"https://img.youtube.com/vi/OTi4-q-_Tj0/maxresdefault.jpg") },
{ "chat_noir_2", ("https://youtu.be/X-rJ01EyiAI?si=gH9m_U8oXI35OgWu",
"https://img.youtube.com/vi/X-rJ01EyiAI/maxresdefault.jpg") },
{ "chat_noir_3", ("https://youtu.be/7lIM0wSx7kQ?si=S-RAsLzd4SiCQhE4",
"https://img.youtube.com/vi/7lIM0wSx7kQ/maxresdefault.jpg") },
{ "chat_noir_4", ("https://youtu.be/dbxyKR1P8vA?si=aRzdYBhwvKptV8Ff",
"https://img.youtube.com/vi/dbxyKR1P8vA/maxresdefault.jpg") },
{ "chat_noir_5", ("https://youtu.be/DDHvKo5NnII?si=NFRkdVQL2mELP0yn",
"https://img.youtube.com/vi/DDHvKo5NnII/maxresdefault.jpg") },
{ "chat_noir_6", ("https://youtu.be/J9LgHNf2Qy0?si=YGO1ggiLkefa9901",
"https://img.youtube.com/vi/J9LgHNf2Qy0/maxresdefault.jpg") },
{ "chat_noir_7", ("https://youtu.be/oadhHk2xs6c?si=mbnJCA6SGsoYXnUK",
"https://img.youtube.com/vi/oadhHk2xs6c/maxresdefault.jpg") },
{ "chat_noir_8", ("https://youtu.be/6K1zCgkBaoE?si=quq9vQLJ-AmzjRJJ",
"https://img.youtube.com/vi/6K1zCgkBaoE/maxresdefault.jpg") },
{ "german_rapper_1", ("https://www.youtube.com/watch?v=DWpg71HJt24",
"https://img.youtube.com/vi/DWpg71HJt24/maxresdefault.jpg") },
{ "nizard_1", ("https://youtu.be/1fjA68k8DAU?si=2PuZSquVQGvfmQkZ",
"https://img.youtube.com/vi/1fjA68k8DAU/maxresdefault.jpg") },
};
public List<Artiste> GenerateArtists(int count)
{
var artists = new List<Artiste>();
for (int i = 0; i < count; i++)
{
artists.Add(new Artiste
{
IdArtiste = i + 1,
Nom = Name.FullName(),
Biographie = Lorem.Paragraph(),
Titres = new List<Titre>()
});
}
return artists;
}
/// <summary>
/// Génère une liste de styles de musique à partir d'une liste prédéfinie de noms de styles.
/// </summary>
/// <param name="count">Nombre de styles à générer (maximum 15, car il y a 15 styles prédéfinis)</param>
/// <returns>Liste de styles de musique générés</returns>
public List<Style> GenerateStyles(int count)
{
var styleNames = new[] { "Rock", "Pop", "Rap", "Électro", "Jazz", "Classique", "Reggae", "Blues", "Metal", "Folk", "Chanson française", "Hip-Hop", "R&B", "Soul", "Punk" };
var styles = new List<Style>();
for (int i = 0; i < Math.Min(count, styleNames.Length); i++)
{
styles.Add(new Style
{
IdStyle = i + 1,
Libelle = styleNames[i],
Titres = new List<Titre>(),
});
}
return styles;
}
/// <summary>
/// Génère une liste de titres de musique en utilisant des données de musique réelles pour les URL d'écoute et les jaquettes.
/// </summary>
/// <param name="count">Nombre de titres à générer</param>
/// <param name="artists">Liste des artistes à associer aux titres générés</param>
/// <returns>Liste de titres de musique générés</returns>
public List<Titre> GenerateTitres(int count, List<Artiste> artists, List<Style> styles)
{
var titres = new List<Titre>();
var random = new Random();
var musicItems = RealMusicData.Values.ToList();
for (int i = 0; i < count; i++)
{
var randomMusic = musicItems[random.Next(musicItems.Count)];
var randomArtist = artists[random.Next(artists.Count)];
int numberOfStyles = random.Next(1, 4);
var selectedStyles = styles.OrderBy(x => random.Next()).Take(numberOfStyles).ToList();
var titre = new Titre
{
IdTitre = i + 1,
IdArtiste = randomArtist.IdArtiste,
Artiste = randomArtist,
Libelle = string.Join(" ", Lorem.Words(3)),
Chronique = Lorem.Paragraph(),
DateCreation = DateTime.Now.AddDays(-random.Next(1, 365)),
Duree = random.Next(120, 360), // 2 à 6 minutes en secondes
DateSortie = DateTime.Now.AddYears(-random.Next(0, 5)).AddDays(-random.Next(1, 365)),
UrlJaquette = randomMusic.ImageUrl,
UrlEcoute = randomMusic.TrackUrl,
NbLectures = random.Next(1000, 1000000),
NbLikes = random.Next(100, 100000), // Likes entre 100 et 100 000
Album = $"Album {random.Next(1, 10)}",
Commentaires = new List<Commentaire>(),
Styles = new List<Style>(),
};
foreach (var style in selectedStyles)
{
titre.Styles.Add(style);
if (!style.Titres.Contains(titre))
{
style.Titres.Add(titre);
}
}
titres.Add(titre);
randomArtist.Titres.Add(titres.Last());
}
return titres;
}
/// <summary>
/// Génère une liste de commentaires pour les titres de musique générés, en associant chaque commentaire à un titre aléatoire.
/// </summary>
/// <param name="count">Nombre de commentaires à générer</param>
/// <param name="titres">Liste des titres de musique à associer aux commentaires générés</param>
/// <returns>Liste de commentaires générés</returns>
public List<Commentaire> GenerateCommentaires(int count, List<Titre> titres)
{
var commentaires = new List<Commentaire>();
var random = new Random();
for (int i = 0; i < count; i++)
{
var randomTitre = titres[random.Next(titres.Count)];
commentaires.Add(new Commentaire
{
IdCommentaire = i + 1,
Contenu = Lorem.Paragraph(),
Auteur = Name.FullName(),
DateCreation = DateTime.Now.AddDays(-random.Next(1, 30)), // Commentaires créés dans les 30 derniers jours
IdTitre = randomTitre.IdTitre,
Titre = randomTitre
});
randomTitre.Commentaires.Add(commentaires.Last());
}
return commentaires;
}
}

View File

@@ -1,5 +1,6 @@
namespace Webzine.EntitiesContext; namespace Webzine.Entity.Fixtures;
public class SeedDataLocal public class SeedDataLocal
{ {
} }

View File

@@ -0,0 +1,12 @@
using Webzine.Entity;
namespace Webzine.Repository.Contracts;
public interface ILocalEntityRepository
{
List<Artiste> Artistes { get; set; }
List<Style> Styles { get; set; }
List<Titre> Titres { get; set; }
List<Commentaire> Commentaires { get; set; }
void Seed();
}

View File

@@ -1,4 +1,4 @@
// using Webzine.Entity; using Webzine.Entity;
namespace Webzine.Repository.Contracts namespace Webzine.Repository.Contracts
{ {

View File

@@ -21,4 +21,8 @@
</Content> </Content>
</ItemGroup> </ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Webzine.Entity\Webzine.Entity.csproj" />
</ItemGroup>
</Project> </Project>

View File

@@ -1,5 +1,45 @@
namespace Webzine.Repository; using Webzine.Repository.Contracts;
using Microsoft.Extensions.Logging;
public class LocalEntityRepository namespace Webzine.Repository;
using Entity;
using Entity.Fixtures;
public class LocalEntityRepository : ILocalEntityRepository
{ {
private readonly ILogger<LocalEntityRepository> _logger;
public LocalEntityRepository(ILogger<LocalEntityRepository> logger)
{
this._logger = logger;
this._logger.LogDebug(1, "NLog injected into LocalEntityRepository");
}
public List<Artiste> Artistes { get; set; }
public List<Style> Styles { get; set; }
public List<Titre> Titres { get; set; }
public List<Commentaire> Commentaires { get; set; }
/// <summary>
/// Permet de remplir les listes d'entités avec des données de test.
/// </summary>
public void Seed()
{
this._logger.LogInformation("Seed was called");
try
{
var seedData = new DataFactory();
Artistes = seedData.GenerateArtists(10);
Styles = seedData.GenerateStyles(8);
Titres = seedData.GenerateTitres(seedData.RealMusicData.Count, Artistes);
Commentaires = seedData.GenerateCommentaires(30, Titres);
this._logger.LogInformation("Seed was completed");
}
catch (Exception e)
{
this._logger.LogError(e, "An error occurred while seeding the data");
throw;
}
}
} }

View File

@@ -8,6 +8,7 @@
<ItemGroup> <ItemGroup>
<PackageReference Include="Faker.Net" Version="2.0.163" /> <PackageReference Include="Faker.Net" Version="2.0.163" />
<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="10.0.3" />
<PackageReference Include="NLog" Version="6.1.1" /> <PackageReference Include="NLog" Version="6.1.1" />
<PackageReference Include="StyleCop.Analyzers" Version="1.1.118"> <PackageReference Include="StyleCop.Analyzers" Version="1.1.118">
<PrivateAssets>all</PrivateAssets> <PrivateAssets>all</PrivateAssets>
@@ -21,4 +22,15 @@
</Content> </Content>
</ItemGroup> </ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Webzine.Entity\Webzine.Entity.csproj" />
<ProjectReference Include="..\Webzine.Repository.Contracts\Webzine.Repository.Contracts.csproj" />
</ItemGroup>
<ItemGroup>
<Reference Include="Microsoft.Testing.Platform">
<HintPath>..\..\..\..\..\..\..\.nuget\packages\microsoft.testing.platform\2.0.1\lib\net9.0\Microsoft.Testing.Platform.dll</HintPath>
</Reference>
</ItemGroup>
</Project> </Project>

View File

@@ -0,0 +1,83 @@
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
namespace Webzine.WebApplication.Controllers
{
public class AccueilController : Controller
{
// GET: AccueilController
public ActionResult Index()
{
return View();
}
// GET: AccueilController/Details/5
public ActionResult Details(int id)
{
return View();
}
// GET: AccueilController/Create
public ActionResult Create()
{
return View();
}
// POST: AccueilController/Create
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(IFormCollection collection)
{
try
{
return RedirectToAction(nameof(Index));
}
catch
{
return View();
}
}
// GET: AccueilController/Edit/5
public ActionResult Edit(int id)
{
return View();
}
// POST: AccueilController/Edit/5
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Edit(int id, IFormCollection collection)
{
try
{
return RedirectToAction(nameof(Index));
}
catch
{
return View();
}
}
// GET: AccueilController/Delete/5
public ActionResult Delete(int id)
{
return View();
}
// POST: AccueilController/Delete/5
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Delete(int id, IFormCollection collection)
{
try
{
return RedirectToAction(nameof(Index));
}
catch
{
return View();
}
}
}
}

View File

@@ -1,7 +1,9 @@
using NLog; using NLog;
using NLog.Web; using NLog.Web;
using Webzine.Repository;
using Webzine.Repository.Contracts;
// Early init of NLog to allow startup and exception logging, before host is built // Initiation du logger NLog pour la classe courante afin de pouvoir l'utiliser pour logger des messages d'information, d'erreur, etc avant la construction de l'application.
var logger = LogManager.Setup().LoadConfigurationFromAppSettings().GetCurrentClassLogger(); var logger = LogManager.Setup().LoadConfigurationFromAppSettings().GetCurrentClassLogger();
logger.Debug("init main"); logger.Debug("init main");
@@ -9,25 +11,28 @@ try
{ {
var builder = WebApplication.CreateBuilder(args); var builder = WebApplication.CreateBuilder(args);
// Ajoute les services n<EFBFBD>cessaires pour permettre l'utilisation des // Ajoute les services nécessaires pour permettre l'utilisation des
// controllers avec des vues. // controllers avec des vues.
builder.Services.AddControllersWithViews() builder.Services.AddControllersWithViews()
// Ajoute la compilation des vues lors de l'ex<EFBFBD>cution de l'application. // Ajoute la compilation des vues lors de l'exécution de l'application.
// Cela nous <EFBFBD>vite de recompiler l'application <EFBFBD> chaque modification de vue. // Cela nous évite de recompiler l'application à chaque modification de vue.
// N<EFBFBD>cessite le package Nuget Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation. // Nécessite le package Nuget Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.
.AddRazorRuntimeCompilation(); .AddRazorRuntimeCompilation();
// NLog: Setup NLog for Dependency injection // NLog: Setup NLog for Dependency injection
builder.Logging.ClearProviders(); builder.Logging.ClearProviders();
builder.Host.UseNLog(); builder.Host.UseNLog();
// Register LocalEntityRepository as a singleton
builder.Services.AddSingleton<ILocalEntityRepository, LocalEntityRepository>();
var app = builder.Build(); var app = builder.Build();
// Active la possibilit<EFBFBD> de servir des fichiers statiques pr<EFBFBD>sents dans // Active la possibilité de servir des fichiers statiques présents dans
// le dossier wwwroot. // le dossier wwwroot.
app.UseStaticFiles(); app.UseStaticFiles();
// Active le middleware permettant le routage des requ<EFBFBD>tes entrantes. // Active le middleware permettant le routage des requétes entrantes.
app.UseRouting(); app.UseRouting();
@@ -38,21 +43,28 @@ try
// Ajoute un endpoint permettant de router les urls // Ajoute un endpoint permettant de router les urls
// avec la forme /controller/action/id(optionnel). // avec la forme /controller/action/id(optionnel).
// Equivalent <20> app.MapDefaultControllerRoute()
app.MapControllerRoute( app.MapControllerRoute(
name: "default", name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}"); pattern: "{controller=Accueil}/{action=Index}/{id?}");
// Permet de remplir les listes d'entités du repository avec des donn<6E>es de test.
using (var scope = app.Services.CreateScope())
{
var repository = scope.ServiceProvider.GetRequiredService<ILocalEntityRepository>();
repository.Seed();
}
app.Run(); app.Run();
} }
catch (Exception exception) catch (Exception exception)
{ {
// NLog: catch setup errors // NLog: attrape les exceptions non gérées et les logge.
logger.Error(exception, "Stopped program because of exception"); logger.Error(exception, "Stopped program because of exception");
throw; throw;
} }
finally finally
{ {
// Ensure to flush and stop internal timers/threads before application-exit (Avoid segmentation fault on Linux) // Assure que NLog flush tous les messages de log avant de fermer l'application.
NLog.LogManager.Shutdown(); NLog.LogManager.Shutdown();
} }

View File

@@ -0,0 +1,178 @@
@*
For more information on enabling MVC for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860
*@
@{
ViewData["Title"] = "Accueil";
}
<h1>Derniers titres chroniqués</h1>
<div class="container">
<div class="container bg-light row p-3 mt-3">
<div class="col-auto">
<img class="img-thumbnail"
src="data:image/png;base64,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" alt="Alternate Text" />
</div>
<div class="col">
<a class="text-primary text-decoration-none fw-light h4">Justice - D.A.N.C.E</a>
<p class="mt-2 mb-3 text-muted ">
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum
dolore eu fugiat nulla pariatur, Ut enim ad minim veniam quis nostrud
exercitation ullamco laboris nisi ut aliquip ex ea commodo ...
</p>
<div class="d-flex flex-wrap align-items-center gap-3">
<a class="btn btn-primary btn-sm">Lire la suite</a>
<div class="d-flex align-items-center text-muted small">
<i class="fa-solid fa-calendar"></i>
17/12/2022 11:08:08
</div>
<div class="d-flex align-items-center text-muted small">
<i class="fa-solid fa-tags"></i>
<a class="text-decoration-none m-1">Electro disco</a>
</div>
</div>
</div>
</div>
<div class="container bg-light row p-3 mt-3">
<div class="col-auto">
<img class="img-thumbnail"
src="data:image/png;base64,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" alt="Alternate Text" />
</div>
<div class="col">
<a class="text-primary text-decoration-none fw-light h4">Justice - D.A.N.C.E</a>
<p class="mt-2 mb-3 text-muted ">
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum
dolore eu fugiat nulla pariatur, Ut enim ad minim veniam quis nostrud
exercitation ullamco laboris nisi ut aliquip ex ea commodo ...
</p>
<div class="d-flex flex-wrap align-items-center gap-3">
<a class="btn btn-primary btn-sm">Lire la suite</a>
<div class="d-flex align-items-center text-muted small">
<i class="fa-solid fa-calendar"></i>
17/12/2022 11:08:08
</div>
<div class="d-flex align-items-center text-muted small">
<i class="fa-solid fa-tags"></i>
<a class="text-decoration-none m-1">Electro disco</a>
</div>
</div>
</div>
</div>
<div class="container bg-light row p-3 mt-3">
<div class="col-auto">
<img class="img-thumbnail"
src="data:image/png;base64,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" alt="Alternate Text" />
</div>
<div class="col">
<a class="text-primary text-decoration-none fw-light h4">Justice - D.A.N.C.E</a>
<p class="mt-2 mb-3 text-muted ">
Duis aute irure dolor in reprehenderit in voluptate velit esse cillum
dolore eu fugiat nulla pariatur, Ut enim ad minim veniam quis nostrud
exercitation ullamco laboris nisi ut aliquip ex ea commodo ...
</p>
<div class="d-flex flex-wrap align-items-center gap-3">
<a class="btn btn-primary btn-sm">Lire la suite</a>
<div class="d-flex align-items-center text-muted small">
<i class="fa-solid fa-calendar"></i>
17/12/2022 11:08:08
</div>
<div class="d-flex align-items-center text-muted small">
<i class="fa-solid fa-tags"></i>
<a class="text-decoration-none m-1">Electro disco</a>
</div>
</div>
</div>
</div>
</div>
<div class="row justify-content-end">
<button class="btn btn-secondary col-auto mt-3">Titres plus anciens >></button>
</div>
<h1 class="mt-5">Titres les plus populaires</h1>
<div class="container">
<div class="row">
<div class="card col m-1" style="width: 18rem;">
<img class="card-img-top"
src="data:image/png;base64,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" alt="Alternate Text" />
<div class="card-body">
<a class="card-link" href="#">Album</a><br />
par <a class="card-link">Artiste</a>
</div>
</div>
<div class="card col m-1" style="width: 18rem;">
<img class="card-img-top"
src="data:image/png;base64,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" alt="Alternate Text" />
<div class="card-body">
<a class="card-link" href="#">Album</a><br />
par <a class="card-link">Artiste</a>
</div>
</div>
<div class="card col m-1" style="width: 18rem;">
<img class="card-img-top"
src="data:image/png;base64,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" alt="Alternate Text" />
<div class="card-body">
<a class="card-link" href="#">Album</a><br />
par <a class="card-link">Artiste</a>
</div>
</div>
</div>
</div>

View File

@@ -0,0 +1,58 @@
@*
For more information on enabling MVC for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860
*@
@{
}
<header>
<nav class="navbar navbar-expand-lg navbar-dark bg-dark">
<div class="container-fluid">
<!-- Logo -->
<a class="navbar-brand" href="#">Webzine</a>
<!-- bouton mobile -->
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarWebzine">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarWebzine">
<!-- Menu -->
<ul class="navbar-nav me-auto mb-2 mb-lg-0">
<li class="nav-item">
<a class="nav-link active" href="#">
<i class="fa-solid fa-house"></i> Accueil
</a>
</li>
@* TODO : Modifier, il s'agit d'une liste *@
<li class="nav-item">
<a class="nav-link" href="#">
<i class="fa-solid fa-screwdriver-wrench"></i> Administration
</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">
<i class="fa-solid fa-envelope"></i> Contact
</a>
</li>
</ul>
<!-- Barre de recherche -->
<form class="d-flex">
<div class="input-group">
<div class="form-outline">
<input class="form-control me-2" type="search" placeholder="Trouver un artiste / titre">
</div>
<button class="btn btn-primary" type="submit">
<i class="fa-solid fa-magnifying-glass"></i>
</button>
</div>
</form>
</div>
</div>
</nav>
</header>

View File

@@ -1,15 +1,26 @@
<!DOCTYPE html> <!DOCTYPE html>
<html lang="fr"> <html lang="fr">
<head> <head>
<meta charset="utf-8"> <meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="viewport" content="width=device-width, initial-scale=1">
<title>@ViewData["Title"] - Mon Application</title> <title>@ViewData["Title"] - Webzine</title>
</head>
@* Ajout de bootstrap *@
<script src="./js/bootstrap.min.js" defer></script>
<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">
</head>
<body> <body>
<main> <div class="container">
@await Html.PartialAsync("_Header")
<div class="row mt-5">
<main class="col-9">
@RenderBody() @RenderBody()
</main> </main>
@await Html.PartialAsync("_Sidebar")
</div>
</div>
</body> </body>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.3.8/dist/js/bootstrap.bundle.min.js" integrity="sha384-FKyoEForCGlyvwx9Hj09JcYn3nv7wiPVlz7YYwJrWVcXK/BmnVDxM+D2scQbITxI" crossorigin="anonymous"></script>
</html> </html>

View File

@@ -0,0 +1,55 @@
@*
For more information on enabling MVC for empty projects, visit https://go.microsoft.com/fwlink/?LinkID=397860
*@
@{
}
<aside class="col-3">
<div>
<h2>À propos</h2>
<p>Retrouvez les dernières pépites sur notre webzine.</p>
</div>
<div>
<h2>Styles</h2>
<ul>
<li><a href="#">Acid house</a></li>
<li><a href="#">Ambienr</a></li>
<li><a href="#">Deep house</a></li>
<li><a href="#">Disco</a></li>
<li><a href="#">Downtempo</a></li>
<li><a href="#">Drum n bass</a></li>
<li><a href="#">Dub Techno</a></li>
<li><a href="#">Acid house</a></li>
<li><a href="#">Acid house</a></li>
<li><a href="#">Acid house</a></li>
<li><a href="#">Acid house</a></li>
<li><a href="#">Acid house</a></li>
<li><a href="#">Acid house</a></li>
<li><a href="#">Acid house</a></li>
<li><a href="#">Ambienr</a></li>
<li><a href="#">Deep house</a></li>
<li><a href="#">Disco</a></li>
<li><a href="#">Downtempo</a></li>
<li><a href="#">Drum n bass</a></li>
<li><a href="#">Dub Techno</a></li>
<li><a href="#">Acid house</a></li>
<li><a href="#">Acid house</a></li>
<li><a href="#">Acid house</a></li>
<li><a href="#">Acid house</a></li>
<li><a href="#">Acid house</a></li>
<li><a href="#">Acid house</a></li>
<li><a href="#">Acid house</a></li>
<li><a href="#">Ambienr</a></li>
<li><a href="#">Deep house</a></li>
<li><a href="#">Disco</a></li>
<li><a href="#">Downtempo</a></li>
<li><a href="#">Drum n bass</a></li>
<li><a href="#">Dub Techno</a></li>
<li><a href="#">Acid house</a></li>
<li><a href="#">Acid house</a></li>
<li><a href="#">Acid house</a></li>
<li><a href="#">Acid house</a></li>
<li><a href="#">Acid house</a></li>
<li><a href="#">Acid house</a></li>
</ul>
</div>
</aside>

View File

@@ -7,6 +7,13 @@
<DockerDefaultTargetOS>Linux</DockerDefaultTargetOS> <DockerDefaultTargetOS>Linux</DockerDefaultTargetOS>
</PropertyGroup> </PropertyGroup>
<ItemGroup>
<Compile Remove="Views\Accueils\**" />
<Content Remove="Views\Accueils\**" />
<EmbeddedResource Remove="Views\Accueils\**" />
<None Remove="Views\Accueils\**" />
</ItemGroup>
<ItemGroup> <ItemGroup>
<Content Include="..\.dockerignore"> <Content Include="..\.dockerignore">
<Link>.dockerignore</Link> <Link>.dockerignore</Link>
@@ -19,14 +26,13 @@
<ItemGroup> <ItemGroup>
<Folder Include="Areas\Admin\Controllers\" /> <Folder Include="Areas\Admin\Controllers\" />
<Folder Include="wwwroot\data\" /> <Folder Include="wwwroot\data\" />
<Folder Include="wwwroot\js\" />
<Folder Include="wwwroot\lib\" /> <Folder Include="wwwroot\lib\" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<PackageReference Include="Faker.Net" Version="2.0.163" /> <PackageReference Include="Faker.Net" Version="2.0.163" />
<PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="10.0.3" /> <PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="10.0.3" />
<PackageReference Include="NLog.Web.AspNetCore" Version="6.1.1" /> <PackageReference Include="NLog.Web.AspNetCore" Version="5.*" />
<PackageReference Include="NLog" Version="6.1.1" /> <PackageReference Include="NLog" Version="6.1.1" />
<PackageReference Include="StyleCop.Analyzers" Version="1.1.118"> <PackageReference Include="StyleCop.Analyzers" Version="1.1.118">
<PrivateAssets>all</PrivateAssets> <PrivateAssets>all</PrivateAssets>
@@ -34,8 +40,4 @@
</PackageReference> </PackageReference>
</ItemGroup> </ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Webzine.Entity\Webzine.Entity.csproj" />
</ItemGroup>
</Project> </Project>

View File

@@ -2,5 +2,9 @@
<Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup> <PropertyGroup>
<ActiveDebugProfile>https</ActiveDebugProfile> <ActiveDebugProfile>https</ActiveDebugProfile>
<Controller_SelectedScaffolderID>MvcControllerWithActionsScaffolder</Controller_SelectedScaffolderID>
<Controller_SelectedScaffolderCategoryPath>root/Common/MVC/Controller</Controller_SelectedScaffolderCategoryPath>
<View_SelectedScaffolderID>RazorViewEmptyScaffolder</View_SelectedScaffolderID>
<View_SelectedScaffolderCategoryPath>root/Common/MVC/View</View_SelectedScaffolderCategoryPath>
</PropertyGroup> </PropertyGroup>
</Project> </Project>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long