Ajout de valid quote reste plus que des affichanges et la raison

pull/10/head
Maxime ROCHER 4 months ago
parent 069c587cde
commit 9f1a7cb6b8

@ -1,21 +0,0 @@
using Microsoft.AspNetCore.Components;
using WF_WebAdmin.Model;
namespace WF_WebAdmin.Pages
{
public partial class ValidQuote
{
private Quote[] quotes;
[Inject]
public HttpClient Http { get; set; }
[Inject]
public NavigationManager NavigationManager { get; set; }
protected override async Task OnInitializedAsync()
{
quotes = await Http.GetFromJsonAsync<Quote[]>($"{NavigationManager.BaseUri}fake-dataValidQuote.json");
}
}
}

@ -1,26 +1,36 @@
@page "/ValidQuote"
@using WF_WebAdmin.Model
@if(quotes != null){
<h3>Citations non validées</h3>
@if (quotes is null)
{
<p>Chargement des citations...</p>
}
else if (quotes.Count == 0)
{
<p>Aucune citation en attente de validation.</p>
}
else
{
<p>Citations en attente de validation :</p>
@foreach (var quote in quotes)
{
<div class="QuoteDiv">
<img class="imgQuote" src="@quote.ImgPath" />
<p class="idQuote"><strong>Identifiant de la citation :</strong>@quote.Id </p>
<p class="contentQuote"><strong>Citation:</strong>@quote.Content</p>
<p class="CaracterQuote"><strong>Personnage :</strong> @quote.Charac</p>
<p class="SourceQuote"><strong>Source :</strong> @quote.TitleSrc</p>
<p class="langueQuote"><strong>Langue :</strong> @quote.Langue</p>
<p class="UserPropositionQuote">@quote.UserProposition a proposé cette citation</p>
<button>Valider la citation</button>
<button>Rejetter la citation</button>
<p><strong>ID :</strong> @quote.Id</p>
<p><strong>Contenu :</strong> @quote.Content</p>
<p><strong>Langue :</strong> @quote.Langue</p>
<p><strong>Likes :</strong> @quote.Like</p>
<p><strong>Personnage :</strong> @quote.Charac</p>
<p><strong>Image :</strong> @quote.ImgPath</p>
<p><strong>Source :</strong> @quote.TitleSrc</p>
<p><strong>Date de source :</strong> @quote.DateSrc.ToShortDateString()</p>
<p><strong>Utilisateur proposition :</strong> @quote.UserProposition</p>
<button @onclick="() => ValiderQuote(quote.Id)">Valider</button>
<button @onclick="() => RejeterQuote(quote.Id)">Rejeter</button>
</div>
}
}

@ -0,0 +1,139 @@
using Microsoft.AspNetCore.Components;
using Npgsql;
using System.Data;
using WF_WebAdmin.Model;
using System.Collections.Generic;
using System;
using System.Threading.Tasks;
using System.Linq;
namespace WF_WebAdmin.Pages
{
public partial class ValidQuote
{
// Chaîne de connexion à adapter
private const string connectionString =
"Host=localhost;Port=5432;Database=wikifantasy3;Username=postgres;Password=postgres";
private List<Quote> quotes;
protected override async Task OnInitializedAsync()
{
// On charge toutes les citations dont isValide = false
quotes = await LoadNotValidatedQuotesAsync();
}
/// <summary>
/// Charge toutes les citations non validées (isValide = false)
/// et mappe les colonnes vers ton modèle.
/// </summary>
private async Task<List<Quote>> LoadNotValidatedQuotesAsync()
{
var result = new List<Quote>();
try
{
using var con = new NpgsqlConnection(connectionString);
await con.OpenAsync();
// Sélection des colonnes réellement présentes en DB
// + placeholders pour les autres
var sql = @"
SELECT
id_quote AS Id,
content AS Content,
likes AS ""Like"",
langue AS Langue,
-- Champs pas vraiment en DB : placeholders
'' AS Charac,
'' AS ImgPath,
'' AS TitleSrc,
now() AS DateSrc,
'' AS UserProposition
FROM quote
WHERE isValide = false
";
using var cmd = new NpgsqlCommand(sql, con);
using var reader = await cmd.ExecuteReaderAsync();
while (await reader.ReadAsync())
{
var q = new Quote
{
Id = reader.GetInt32(reader.GetOrdinal("Id")),
Content = reader.GetString(reader.GetOrdinal("Content")),
Like = reader.GetInt32(reader.GetOrdinal("Like")),
Langue = reader.GetString(reader.GetOrdinal("Langue")),
// placeholders
Charac = reader.GetString(reader.GetOrdinal("Charac")),
ImgPath = reader.GetString(reader.GetOrdinal("ImgPath")),
TitleSrc = reader.GetString(reader.GetOrdinal("TitleSrc")),
DateSrc = reader.GetDateTime(reader.GetOrdinal("DateSrc")),
UserProposition = reader.GetString(reader.GetOrdinal("UserProposition"))
};
result.Add(q);
}
}
catch (Exception ex)
{
Console.WriteLine($"[Erreur] LoadNotValidatedQuotesAsync : {ex.Message}");
}
return result;
}
/// <summary>
/// Met à jour isValide = true pour la citation.
/// </summary>
private async Task ValiderQuote(int quoteId)
{
try
{
using var con = new NpgsqlConnection(connectionString);
await con.OpenAsync();
var sql = "UPDATE quote SET isValide = true WHERE id_quote = @Id";
using var cmd = new NpgsqlCommand(sql, con);
cmd.Parameters.AddWithValue("Id", quoteId);
int rowsAffected = await cmd.ExecuteNonQueryAsync();
if (rowsAffected > 0)
{
// Supprime la quote de la liste pour l'enlever de l'affichage
quotes.RemoveAll(q => q.Id == quoteId);
}
}
catch (Exception ex)
{
Console.WriteLine($"[Erreur] ValiderQuote : {ex.Message}");
}
}
/// <summary>
/// Supprime complètement la citation de la base.
/// </summary>
private async Task RejeterQuote(int quoteId)
{
try
{
using var con = new NpgsqlConnection(connectionString);
await con.OpenAsync();
var sql = "DELETE FROM quote WHERE id_quote = @Id";
using var cmd = new NpgsqlCommand(sql, con);
cmd.Parameters.AddWithValue("Id", quoteId);
int rowsAffected = await cmd.ExecuteNonQueryAsync();
if (rowsAffected > 0)
{
quotes.RemoveAll(q => q.Id == quoteId);
}
}
catch (Exception ex)
{
Console.WriteLine($"[Erreur] RejeterQuote : {ex.Message}");
}
}
}
}

@ -7,4 +7,8 @@
<RootNamespace>WF_WebAdmin</RootNamespace>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Npgsql" Version="9.0.2" />
</ItemGroup>
</Project>

Loading…
Cancel
Save