Permet de consulter les jours précédents du Mur de la Honte, pour tout le monde
Build and deploy / deploy (push) Successful in 36s

wall_notes_today() devient wall_notes_for_date(p_date default null) — même garantie d'anonymat qu'avant, juste paramétrée par jour plutôt que figée sur aujourd'hui. Nouvelle RPC wall_note_days() (dates ayant au moins une note, sans contenu ni auteur) peuple un sélecteur de jour au-dessus de la grille, visible par tous — pas seulement les Archontes via l'historique complet, qui lui révèle l'auteur. wall_note_reaction_counts() gagne le même paramètre p_date. Le compteur "X/12 aujourd'hui" et l'éligibilité à publier restent toujours basés sur aujourd'hui, peu importe le jour consulté.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
Valentin ROBIN
2026-08-25 18:15:34 +02:00
parent 203afafec2
commit 0eaebb7a05
4 changed files with 134 additions and 32 deletions
+38 -9
View File
@@ -1369,12 +1369,16 @@ end $$;
-- Seul moyen pour un Citoyen de voir les notes des autres sans jamais
-- exposer qui les a écrites côté client : la RLS ne peut pas masquer une
-- colonne pour certaines lignes, donc cette RPC (SECURITY DEFINER) fait le
-- filtre elle-même et ne renvoie jamais user_id. Le type de retour change
-- (ajout d'image_url) : drop explicite requis, create or replace ne peut
-- pas changer le type de retour d'une fonction existante.
-- filtre elle-même et ne renvoie jamais user_id. Paramétrée par jour
-- (p_date, Europe/Paris) plutôt que hardcodée sur aujourd'hui — remplace
-- wall_notes_today(), pour que n'importe qui (pas seulement les Archontes
-- via « Historique complet » plus bas, qui révèle lui l'auteur) puisse
-- consulter les jours précédents, toujours sans jamais exposer qui a
-- écrit quoi. p_date à null (par défaut) = aujourd'hui, pour que l'appel
-- de chargement initial de la page reste un simple appel sans argument.
drop function if exists public.wall_notes_today();
create or replace function public.wall_notes_today()
create or replace function public.wall_notes_for_date(p_date date default null)
returns table (id uuid, text text, image_url text, created_at timestamptz)
language sql
security definer
@@ -1382,11 +1386,28 @@ set search_path = public
as $$
select w.id, w.text, w.image_url, w.created_at
from public.wall_notes w
where (w.created_at at time zone 'Europe/Paris')::date = (now() at time zone 'Europe/Paris')::date
where (w.created_at at time zone 'Europe/Paris')::date = coalesce(p_date, (now() at time zone 'Europe/Paris')::date)
order by w.created_at asc;
$$;
grant execute on function public.wall_notes_today() to authenticated;
grant execute on function public.wall_notes_for_date(date) to authenticated;
-- Liste des jours ayant au moins une note (jamais le contenu ni l'auteur,
-- juste la date) : peuple le sélecteur de jour de wall_notes_for_date()
-- côté client, pour tout le monde — contrairement à l'historique complet
-- avec auteur plus bas, réservé aux Archontes.
create or replace function public.wall_note_days()
returns table (note_date date)
language sql
security definer
set search_path = public
as $$
select distinct (w.created_at at time zone 'Europe/Paris')::date as note_date
from public.wall_notes w
order by note_date desc;
$$;
grant execute on function public.wall_note_days() to authenticated;
-- Seul point d'entrée pour publier une note. Pas de gel via tribunal_date
-- (contrairement au Char) : contrairement à la soirée de clôture, c'est une
@@ -1523,7 +1544,15 @@ exception
when duplicate_object then null;
end $$;
create or replace function public.wall_note_reaction_counts()
-- Paramétrée par jour (comme wall_notes_for_date ci-dessus, même p_date à
-- null = aujourd'hui, donc les anciens appels sans argument continuent de
-- fonctionner à l'identique). L'ancienne surcharge à 0 argument est
-- explicitement supprimée : create or replace ne remplace que la même
-- signature, sinon les deux versions coexisteraient (même remarque que
-- pour post_wall_note plus haut).
drop function if exists public.wall_note_reaction_counts();
create or replace function public.wall_note_reaction_counts(p_date date default null)
returns table (note_id uuid, emoji text, count bigint)
language sql
security definer
@@ -1532,11 +1561,11 @@ as $$
select r.note_id, r.emoji, count(*) as count
from public.wall_note_reactions r
join public.wall_notes w on w.id = r.note_id
where (w.created_at at time zone 'Europe/Paris')::date = (now() at time zone 'Europe/Paris')::date
where (w.created_at at time zone 'Europe/Paris')::date = coalesce(p_date, (now() at time zone 'Europe/Paris')::date)
group by r.note_id, r.emoji;
$$;
grant execute on function public.wall_note_reaction_counts() to authenticated;
grant execute on function public.wall_note_reaction_counts(date) to authenticated;
-- Bascule une réaction (ajoute si absente, retire si déjà posée) en un seul
-- aller-retour : un delete puis, si rien n'a été supprimé, un insert —