feat(api-detail): isCurrent + setCurrent + màj doc et seeder
- Shared types : ajout isCurrent sur ApiEntry et ApiEntryListItem - Backend entity : colonne is_current (boolean, default true) - Backend service : isCurrent calculé à la création, setCurrent() marque une version comme courante (siblings → false) - Backend controller : POST /api/apis/:id/set-current - Frontend ApiService : méthode setCurrent() - Browse/upload : affichage badge "Courante" via isCurrent - Seeder : données de démo mises à jour - Documentation : api-reference, architecture, local-setup, CLAUDE.md Generated with [Claude Code](https://claude.ai/code) via [Happy](https://happy.engineering) Co-Authored-By: Claude <noreply@anthropic.com> Co-Authored-By: Happy <yesreply@happy.engineering>
This commit is contained in:
@@ -83,22 +83,37 @@ Injecte des données de démonstration au démarrage (idempotent : ne re-seed qu
|
||||
|
||||
```sql
|
||||
CREATE TABLE api_entries (
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
title VARCHAR(255) NOT NULL,
|
||||
version VARCHAR(50) NOT NULL,
|
||||
description TEXT,
|
||||
type VARCHAR(10) NOT NULL CHECK (type IN ('ASYNCAPI', 'OPENAPI')),
|
||||
yaml_content TEXT NOT NULL,
|
||||
html_path VARCHAR(500),
|
||||
status VARCHAR(10) NOT NULL DEFAULT 'PENDING'
|
||||
CHECK (status IN ('PENDING', 'GENERATED', 'ERROR')),
|
||||
error_message TEXT,
|
||||
category_id VARCHAR(36),
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||||
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
||||
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
||||
convention VARCHAR(30) NOT NULL DEFAULT 'CONSULTER'
|
||||
CHECK (convention IN ('CONSULTER','ENREGISTRER','ETRE_NOTIFIE')),
|
||||
name VARCHAR(255) NOT NULL DEFAULT '',
|
||||
provider VARCHAR(255) NOT NULL DEFAULT '',
|
||||
version_major INT NOT NULL DEFAULT 0,
|
||||
version_minor INT NOT NULL DEFAULT 0,
|
||||
version_patch INT NOT NULL DEFAULT 0,
|
||||
description TEXT,
|
||||
type VARCHAR(10) NOT NULL CHECK (type IN ('ASYNCAPI', 'OPENAPI')),
|
||||
yaml_content TEXT NOT NULL,
|
||||
html_path VARCHAR(500),
|
||||
status VARCHAR(10) NOT NULL DEFAULT 'PENDING'
|
||||
CHECK (status IN ('PENDING', 'GENERATED', 'ERROR')),
|
||||
error_message TEXT,
|
||||
category_id VARCHAR(36),
|
||||
contact_functional_name VARCHAR(255) NOT NULL DEFAULT '',
|
||||
contact_functional_entity VARCHAR(255) NOT NULL DEFAULT '',
|
||||
contact_functional_email VARCHAR(255) NOT NULL DEFAULT '',
|
||||
contact_technical_name VARCHAR(255) NOT NULL DEFAULT '',
|
||||
contact_technical_entity VARCHAR(255) NOT NULL DEFAULT '',
|
||||
contact_technical_email VARCHAR(255) NOT NULL DEFAULT '',
|
||||
created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(),
|
||||
updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW()
|
||||
);
|
||||
```
|
||||
|
||||
> `title` et `version` sont des champs calculés (pas en DB) :
|
||||
> - `title` = `CONVENTION_LABEL + ' ' + name` (ex: `"Consulter Petstore"`)
|
||||
> - `version` = `"major.minor.patch"` (ex: `"1.0.0"`)
|
||||
|
||||
### Table `categories`
|
||||
|
||||
```sql
|
||||
@@ -114,7 +129,7 @@ CREATE TABLE categories (
|
||||
```
|
||||
|
||||
> Les relations `category_id` / `parent_id` sont des colonnes varchar sans contrainte de clé étrangère TypeORM.
|
||||
> La suppression d'une catégorie désassocie automatiquement ses APIs et sous-catégories enfants (logique applicative).
|
||||
> La suppression d'une catégorie est **rejetée avec 400** si le dossier contient des APIs ou des sous-dossiers (vérification applicative avant `DELETE`).
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user