feat(browse): gestion CRUD des dossiers depuis la page Browse

- Ajout boutons Modifier/Supprimer sur chaque tuile de dossier
- Supprimer visible uniquement si dossier vide (0 APIs, 0 sous-dossiers)
- Modale Angular (sans fr-modal DSFR) pour créer/éditer un dossier
- Backend: remove() lève BadRequestException si dossier non vide
- Ajout fichiers YAML de démo (OpenAPI Petstore, AsyncAPI User Events)

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 13:59:16 +00:00
parent 921a6e652b
commit 93fadb43f9
4 changed files with 376 additions and 31 deletions

View File

@@ -0,0 +1,101 @@
asyncapi: "3.0.0"
info:
title: User Events API
version: "1.0.0"
description: API événementielle pour les actions utilisateurs
channels:
userSignedUp:
address: user.signed.up
messages:
userSignedUp:
$ref: "#/components/messages/UserSignedUp"
userLoggedIn:
address: user.logged.in
messages:
userLoggedIn:
$ref: "#/components/messages/UserLoggedIn"
orderPlaced:
address: order.placed
messages:
orderPlaced:
$ref: "#/components/messages/OrderPlaced"
operations:
onUserSignedUp:
action: receive
channel:
$ref: "#/channels/userSignedUp"
onUserLoggedIn:
action: receive
channel:
$ref: "#/channels/userLoggedIn"
onOrderPlaced:
action: receive
channel:
$ref: "#/channels/orderPlaced"
components:
messages:
UserSignedUp:
name: UserSignedUp
title: Utilisateur inscrit
summary: Émis lorsqu'un utilisateur crée un compte
payload:
type: object
required:
- userId
- email
- createdAt
properties:
userId:
type: string
format: uuid
email:
type: string
format: email
createdAt:
type: string
format: date-time
UserLoggedIn:
name: UserLoggedIn
title: Utilisateur connecté
summary: Émis lorsqu'un utilisateur se connecte
payload:
type: object
required:
- userId
- loginAt
properties:
userId:
type: string
format: uuid
loginAt:
type: string
format: date-time
OrderPlaced:
name: OrderPlaced
title: Commande passée
summary: Émis lorsqu'une commande est créée
payload:
type: object
required:
- orderId
- userId
- total
properties:
orderId:
type: string
format: uuid
userId:
type: string
format: uuid
total:
type: number
format: float
items:
type: array
items:
type: object
properties:
productId:
type: string
quantity:
type: integer