feat: initial scaffold — MVP catalogue de données d'API

- Backend NestJS : CRUD api_entries + categories, upload YAML multi-fichiers,
  génération docs AsyncAPI (@asyncapi/cli@6.0.0) et OpenAPI (redocly)
- Fix: route wildcard GET /api/apis/:id/*path pour servir les assets statiques
  (CSS/JS) générés par AsyncAPI HTML template (contournement bug path-to-regexp v8)
- Frontend Angular 19 : pages catalog, browse, api-detail, doc-viewer, upload (DSFR)
- Seeder de données de démo (idempotent)
- Docker Compose dev + Dockerfiles + manifests K8s
- Documentation : README, architecture, référence API REST

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:
z3n
2026-05-22 08:42:54 +00:00
commit 921a6e652b
87 changed files with 16719 additions and 0 deletions

View File

@@ -0,0 +1,27 @@
import { IsString, IsNotEmpty, IsIn, IsOptional, IsUUID } from 'class-validator';
import { ApiType } from '@datacat/shared';
export class CreateApiEntryDto {
@IsString()
@IsNotEmpty()
title!: string;
@IsString()
@IsNotEmpty()
version!: string;
@IsString()
@IsOptional()
description?: string;
@IsIn(['ASYNCAPI', 'OPENAPI'])
type!: ApiType;
@IsString()
@IsNotEmpty()
yamlContent!: string;
@IsUUID()
@IsOptional()
categoryId?: string;
}

View File

@@ -0,0 +1,19 @@
import { IsString, IsOptional, IsUUID } from 'class-validator';
export class UpdateApiEntryDto {
@IsString()
@IsOptional()
title?: string;
@IsString()
@IsOptional()
version?: string;
@IsString()
@IsOptional()
description?: string;
@IsUUID()
@IsOptional()
categoryId?: string | null;
}