Vitrine publique (accueil, architecture, statut) + recherche plein texte
- Nouvelles pages publiques sans routeur externe (History API minimale, useRoute/RouteLink) : accueil, /architecture (état réel du projet, honnête sur les limites), /statut (télémétrie live de tripoli-edge lue directement sur /healthz et /metrics, aucune donnée simulée). - Recherche façon Spotlight dans TopBar : nouvel endpoint GET /api/search côté tripoli-api, recherche plein texte Postgres (tsvector généré + index GIN) sur le nom ET le contenu des fichiers texte extrait à l'upload (formats texte/code, borné à 5 Mio) ; extraits de résultat via ts_headline. - AuthLayout : logo cliquable vers l'accueil. Vérifié : tsc --noEmit propre, npm run build propre, cargo build -p tripoli-api propre. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
This commit is contained in:
parent
ddd0fbc0cb
commit
3172b3e256
15 changed files with 858 additions and 20 deletions
13
tripoli-api/migrations/0003_search.sql
Normal file
13
tripoli-api/migrations/0003_search.sql
Normal file
|
|
@ -0,0 +1,13 @@
|
|||
-- Recherche plein texte façon Spotlight : sur le nom du fichier *et* sur
|
||||
-- son contenu extrait à l'upload (voir files::upload). Colonne générée
|
||||
-- STORED plutôt que calculée à la volée dans chaque requête : l'index
|
||||
-- GIN a besoin d'une colonne matérialisée pour être utilisable.
|
||||
ALTER TABLE files ADD COLUMN content_text TEXT;
|
||||
|
||||
ALTER TABLE files ADD COLUMN search_vector tsvector
|
||||
GENERATED ALWAYS AS (
|
||||
setweight(to_tsvector('french', coalesce(filename, '')), 'A') ||
|
||||
setweight(to_tsvector('french', coalesce(content_text, '')), 'B')
|
||||
) STORED;
|
||||
|
||||
CREATE INDEX files_search_vector_idx ON files USING GIN (search_vector);
|
||||
Loading…
Add table
Add a link
Reference in a new issue