Ajoute les suggestions de questions des Citoyens et les emails sur Admin
Build and deploy / deploy (push) Successful in 35s

Chaque Citoyen peut proposer une question pour Le Char depuis /profile
(upsert via submit_chariot_question, figée dès la date du Tribunal
comme les scores d'Icare). Les Archontes modèrent ces suggestions
directement sur /char/questions (ajouter à la banque ou rejeter).

/admin affiche maintenant l'email de chaque membre via une nouvelle
RPC admin_list_members(), seule façon d'exposer auth.users.email sans
passer par la service_role key côté client.

Corrige au passage deux bugs découverts pendant les tests : la
policy interne de admin_list_members() référençait id/role sans les
qualifier, ambigus avec les colonnes du RETURNS TABLE (erreur
Postgres 42702) ; et l'auteur d'une suggestion s'affichait toujours
comme "un Citoyen" car le embed profiles(...) avait été mal retypé en
tableau alors qu'il est retourné en objet à l'exécution.
This commit is contained in:
Valentin ROBIN
2026-08-19 01:22:36 +02:00
parent 0c4814f4d6
commit 76fa8cd451
8 changed files with 411 additions and 56 deletions
+14
View File
@@ -10,6 +10,13 @@ export type QuestionRow = {
created_at: string;
};
export type SubmissionRow = {
user_id: string;
text: string;
updated_at: string;
profiles: { pseudo: string; avatar_url: string | null } | null;
};
export default async function CharQuestionsPage() {
const supabase = await createClient();
const {
@@ -45,6 +52,12 @@ export default async function CharQuestionsPage() {
.eq("id", true)
.single();
const { data: submissions } = await supabase
.from("chariot_submissions")
.select("user_id, text, updated_at, profiles(pseudo, avatar_url)")
.order("updated_at", { ascending: true })
.returns<SubmissionRow[]>();
return (
<div className="mx-auto w-full max-w-2xl px-4 py-8">
<div className="mb-6 text-center">
@@ -62,6 +75,7 @@ export default async function CharQuestionsPage() {
<QuestionsView
initialQuestions={questions ?? []}
initialRevealedId={settings?.chariot_revealed_question_id ?? null}
initialSubmissions={submissions ?? []}
/>
</div>
);