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
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:
+38
-9
@@ -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 —
|
||||
|
||||
Reference in New Issue
Block a user