Commit graph

1016 commits

Author SHA1 Message Date
eed063c657 feat: add related subjects (symmetric links) with tabbed edit page and improved subject detail layout
Related subjects: migration with CHECK(id1 < id2) for uniqueness, repository with dual-query (no string interpolation), link/unlink use cases with 8 tests.
Edit page: Radix Tabs (Contenu / Classification), themes extracted as immediate-save SubjectThemes component, related subjects with chip+remove UI and Combobox search.
Subject detail: themes and related subjects displayed in header metadata area, 'Voir aussi' links inline.
Also extracts mapRowToEntity from subject repo for reuse, removes themes from SubjectForm (now independent).
2026-04-05 01:51:14 +02:00
a2670ffe31 feat: add themes taxonomy for subjects (N-to-N) with CRUD, assignment UI, and Radix ToggleGroup selector
Domain: Theme entity (Effect Schema), createTheme/deleteTheme/setSubjectThemes use cases with 21 tests.
Infra: themes + subject_themes tables, ThemeRepository with Supabase implementation.
UI: /themes management page, ThemeSelector (Radix ToggleGroup) in subject form, ThemeBadge on subject detail.
Permissions: assign_theme (Éloquent), add/edit/delete_theme (Idéaliste).
Also adds radix-ui as dependency for accessible UI primitives.
2026-04-02 19:04:05 +02:00
9043fcc79d fix: only close menu and refresh on actual sign-in/sign-out, not token refresh 2026-04-01 08:57:20 +02:00
41957b389a feat: navigate drafts by subject instead of loading all at once 2026-04-01 00:52:02 +02:00
c507648f14 fix: refresh server components and close burger menu on login/logout 2026-04-01 00:00:04 +02:00
da87899c1f fix: close mobile burger menu on navigation via usePathname 2026-03-31 17:26:05 +02:00
d36aaa790e fix: AdminMenu dropdown auto-aligns when button is near screen edge (mobile) 2026-03-31 16:40:05 +02:00
e1e3424bdc fix: return 404 instead of 500 when updating a non-existent draft (Fixes DEBATS-7) 2026-03-31 15:07:56 +02:00
9074610ab0 feat: clickable position title in sidebar statements, linking to figure/subject page 2026-03-31 00:32:55 +02:00
5034b1fcd7 fix: validate slugifiable fields on draft creation and update (Fixes DEBATS-G) 2026-03-31 00:26:33 +02:00
b764bedb27 feat: figure links on position page point to figure/subject page 2026-03-30 17:12:30 +02:00
93a747ea6d feat: clickable position titles on figure/subject page, extract LinkedTitle component 2026-03-30 17:05:16 +02:00
654436c905 fix: use admin client for sidebar and homepage queries, fix excludeId limit
last-statements.tsx was the only read component still using the SSR (anon) client after RLS public policies were removed, causing the sidebar to silently return empty results. Also fix fetchSummaries to request limit+1 when excluding an ID so the caller always gets the expected number of results.
2026-03-30 17:01:27 +02:00
1049b6006c feat: clickable +N overflow badge linking to subject page 2026-03-30 16:47:42 +02:00
609f402815 feat: avatar links to figure/subject page, simplify subject counters to positions only 2026-03-30 16:30:58 +02:00
4d102038f6 fix: remove dead 'Voir les arguments' link on subject detail page 2026-03-30 15:35:25 +02:00
7558182049 fix: missing space after Débats em tag on about page 2026-03-30 13:49:02 +02:00
61104822d4 feat: redesign footer with GitHub/X icons and horizontal layout 2026-03-30 12:34:27 +02:00
527cdd9314 fix: align share button left of burger menu in mobile header 2026-03-30 11:41:21 +02:00
be86f79892 feat: add share button (Web Share API + clipboard fallback)
ShareButton component with iconOnly variant, ShareButtonContext to coordinate header/page visibility, HeaderActions layout component to deduplicate CSS across detail pages.
2026-03-29 23:25:30 +02:00
1e4ac44ffa feat: add subject filter on draft validation page
Extract DraftList client component with a select to filter pending drafts by subject title. Shows draft count per subject. Filter hidden when only one subject exists.
2026-03-29 12:48:08 +02:00
c80703b9a9 fix: supprimer l'ancien dossier [positionId] — conflit de routes ambiguës avec [positionSlug] 2026-03-29 12:47:25 +02:00
2e47df0949 feat: slug sur les positions (étape 2) — NOT NULL + unique par sujet, routes /s/[slug]/position/[positionSlug], fonction SQL mise à jour 2026-03-29 12:39:17 +02:00
186ce0a0f2 feat: slug sur les positions (étape 1) — colonne nullable, script backfill, entité/repo mis à jour, slugify partagé entre les 3 entités 2026-03-29 12:25:08 +02:00
71f74fd2af feat: display and amend notoriety sources in draft validation page
Show Wikipedia URL and notoriety sources in the CreationPreview for public figures. Add editable notoriety source fields in the amendment form, hidden when a Wikipedia URL is provided. Filter empty sources before diffing.
2026-03-29 12:22:37 +02:00
b598b8a05f fix: renommer la migration RLS write pour respecter l'ordre chronologique en production 2026-03-28 10:38:34 +01:00
27943d33dd security: suppression des politiques RLS de lecture — toutes les requêtes passent par le client admin 2026-03-28 10:32:26 +01:00
8db07494ce refactor: extraction du composant SectionTitle dans le design system, suppression du CSS dupliqué entre DailySubject et SubjectSection 2026-03-28 01:59:51 +01:00
8e390bf8e9 security: toutes les mutations passent par le client admin Supabase — les politiques RLS d'écriture ont été supprimées 2026-03-28 01:50:33 +01:00
e2d55493f2 refactor: un seul error.tsx générique à la racine, suppression des 12 error.tsx dupliqués, pas de fuite de message technique 2026-03-28 01:42:46 +01:00
59242bcc81 fix: suppression import inutilisé DailySubject, correction loadingPositions au mount avec initialSubject 2026-03-28 01:35:14 +01:00
374867942d fix: déplacement des setState synchrones hors des useEffect dans les formulaires de positions 2026-03-27 18:07:41 +01:00
50da23ecd4 fix: remplacement des <img> par next/image pour les previews photo, alt vide (image décorative) 2026-03-27 17:56:48 +01:00
aca86a9039 fix: ajout de alt vide sur les img décoratives dans les OG images 2026-03-27 17:49:14 +01:00
1a264ec3e9 refactor: suppression des try/catch JSX — extraction de composants et error boundaries Next.js
Remplace le pattern try/catch englobant le JSX dans tous les server components par :
- Des composants autonomes responsables de leur propre data-fetching (HomePage)
- Des error.tsx colocalisés pour chaque route (error boundary Next.js)
- Un composant ActionLink dans le design system

Élimine 140 warnings ESLint react-hooks/error-boundaries.
2026-03-27 17:47:48 +01:00
b9402532e5 fix: renommer migration soft-delete pour éviter le conflit de timestamp avec add_subject_positions_summary_function (20260326120000 → 20260326130000) 2026-03-27 17:17:26 +01:00
b3b6712b86 fix: formatage Prettier sur subject-repository-supabase 2026-03-27 16:52:08 +01:00
841f377a6c feat: soft-delete — les suppressions marquent deleted_at au lieu de supprimer physiquement les données
Entités concernées : subjects, public_figures, positions, statements.
Cascade atomique via fonctions SQL (soft_delete_subject, soft_delete_public_figure, soft_delete_position).
Toutes les requêtes de lecture filtrent deleted_at IS NULL.
Vues SQL recréées pour exclure les lignes soft-deleted.
merge_positions corrigé pour soft-deleter la position source.
2026-03-27 16:13:24 +01:00
b2ef53cdf7 feat: setup Storybook 10 avec @storybook/nextjs-vite, addon a11y/docs, stories Button/TextField/AdminMenu, moduleResolution bundler pour compatibilité ESM 2026-03-27 15:55:08 +01:00
8f65e66ffc fix: recherche multi-mots sur les sujets — chaque mot doit être présent dans le titre, pas nécessairement contigus 2026-03-27 00:32:37 +01:00
3a6bf83c34 feat: recherche de sujets sur /s — composant SearchField générique dans le design system, refactorisation de PersonalitySearch pour le réutiliser 2026-03-27 00:27:03 +01:00
f2b4c4b68d fix: avatar placeholder avec initiales quand la photo de la personnalité n'existe pas 2026-03-27 00:16:07 +01:00
d04ff82ee3 feat: refonte page d'accueil — sujet du jour (seed déterministe par date), sections les plus actifs et derniers ajoutés, grille de cartes compactes, findSummaryById et findAllIds 2026-03-27 00:11:01 +01:00
12a3604db5 feat: composant FigureAvatarRow avec badge +N, read model SQL get_subject_positions_summary (CQRS), suppression du CSS mort des avatars inline 2026-03-26 23:25:36 +01:00
3c88550027 feat: AdminMenu sur les pages sujet et personnalité, composant ConfirmAction dans le design system, suppression de SubjectActions devenu obsolète 2026-03-26 10:12:41 +01:00
c090d079cd feat: suppression individuelle des brouillons — DELETE /api/drafts/:id, server action deleteDraftAction, bouton Supprimer dans la DraftCard 2026-03-26 01:36:40 +01:00
50c92a5675 chore: Next.js 16.2.0 stable — sortie du canary, suppression du .npmrc legacy-peer-deps 2026-03-26 01:04:52 +01:00
c4fb7fc342 feat: composant AdminMenu (⚙ Gérer) avec actions contextuelles, fusion dans le menu de la page position, suppression du EditLink sur la page sujet, redirect serveur après fusion, TODO.md retiré du repo 2026-03-26 00:39:55 +01:00
20aa53bb85 feat: page détail position et fusion de positions — page /s/[slug]/position/[positionId] avec prises de position, fusion transactionnelle via rpc SQL merge_positions, méthode findByPositionIdWithFigures, lien cliquable sur les titres de position 2026-03-25 22:37:43 +01:00
1032806685 feat: lien Brouillons dans le footer pour les administrateurs 2026-03-25 02:29:08 +01:00