Files
adastra_api/src/swagger/articles.yaml
T

367 lines
10 KiB
YAML

paths:
/api/cms/articles:
get:
summary: Récupère la liste paginée des articles
description: Retourne une liste paginée de tous les articles. L'authentification est optionnelle.
tags:
- Articles
parameters:
- in: query
name: page
schema:
type: integer
default: 1
description: Numéro de page
- in: query
name: limit
schema:
type: integer
default: 20
description: Nombre d'articles par page
- in: query
name: search
schema:
type: string
description: Terme de recherche pour les articles
responses:
'200':
description: Liste des articles récupérée avec succès
content:
application/json:
schema:
type: object
properties:
articles:
type: array
items:
$ref: '#/components/schemas/Article'
articlesCount:
type: integer
'400':
description: Erreur de validation
'500':
description: Erreur serveur
post:
summary: Crée un nouvel article
description: Crée un nouvel article avec les données fournies. Authentification requise.
tags:
- Articles
security:
- bearerAuth: []
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- article
properties:
article:
type: object
required:
- title
- description
- body
properties:
title:
type: string
example: "Titre de l'article"
description:
type: string
example: "Description courte"
body:
type: string
example: "Contenu complet de l'article"
tagList:
type: array
items:
type: string
example: ["tag1", "tag2"]
responses:
'201':
description: Article créé avec succès
content:
application/json:
schema:
type: object
properties:
article:
$ref: '#/components/schemas/Article'
'400':
description: Données invalides
'401':
description: Non authentifié
'422':
description: Erreur de validation des données
/api/cms/articles/feed:
get:
summary: Récupère le fil d'actualité des articles
description: Retourne les articles des utilisateurs suivis par l'utilisateur authentifié
tags:
- Articles
security:
- bearerAuth: []
parameters:
- in: query
name: page
schema:
type: integer
default: 1
description: Numéro de page
- in: query
name: limit
schema:
type: integer
default: 20
description: Nombre d'articles par page
responses:
'200':
description: Fil d'actualité récupéré avec succès
content:
application/json:
schema:
type: object
properties:
articles:
type: array
items:
$ref: '#/components/schemas/Article'
articlesCount:
type: integer
'401':
description: Non authentifié
'500':
description: Erreur serveur
/api/cms/articles/{slug}:
get:
summary: Récupère un article par son slug
description: Retourne les détails complets d'un article spécifique
tags:
- Articles
parameters:
- in: path
name: slug
required: true
schema:
type: string
description: Le slug unique de l'article
responses:
'200':
description: Article récupéré avec succès
content:
application/json:
schema:
type: object
properties:
article:
$ref: '#/components/schemas/Article'
'404':
description: Article non trouvé
'500':
description: Erreur serveur
put:
summary: Met à jour un article
description: Met à jour un article existant. Seul l'auteur peut modifier son article. Authentification requise.
tags:
- Articles
security:
- bearerAuth: []
parameters:
- in: path
name: slug
required: true
schema:
type: string
description: Le slug unique de l'article
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- article
properties:
article:
type: object
properties:
title:
type: string
description:
type: string
body:
type: string
tagList:
type: array
items:
type: string
responses:
'200':
description: Article mis à jour avec succès
content:
application/json:
schema:
type: object
properties:
article:
$ref: '#/components/schemas/Article'
'401':
description: Non authentifié
'403':
description: Vous n'êtes pas autorisé à modifier cet article
'404':
description: Article non trouvé
'422':
description: Erreur de validation des données
delete:
summary: Supprime un article
description: Supprime un article existant. Seul l'auteur peut supprimer son article. Authentification requise.
tags:
- Articles
security:
- bearerAuth: []
parameters:
- in: path
name: slug
required: true
schema:
type: string
description: Le slug unique de l'article
responses:
'200':
description: Article supprimé avec succès
'401':
description: Non authentifié
'403':
description: Vous n'êtes pas autorisé à supprimer cet article
'404':
description: Article non trouvé
'500':
description: Erreur serveur
/api/cms/articles/{slug}/favorite:
post:
summary: Ajoute un article aux favoris
description: Ajoute un article à la liste des favoris de l'utilisateur authentifié
tags:
- Articles
security:
- bearerAuth: []
parameters:
- in: path
name: slug
required: true
schema:
type: string
description: Le slug unique de l'article
responses:
'200':
description: Article ajouté aux favoris avec succès
content:
application/json:
schema:
type: object
properties:
article:
$ref: '#/components/schemas/Article'
'401':
description: Non authentifié
'404':
description: Article non trouvé
'500':
description: Erreur serveur
delete:
summary: Retire un article des favoris
description: Retire un article de la liste des favoris de l'utilisateur authentifié
tags:
- Articles
security:
- bearerAuth: []
parameters:
- in: path
name: slug
required: true
schema:
type: string
description: Le slug unique de l'article
responses:
'200':
description: Article retiré des favoris avec succès
content:
application/json:
schema:
type: object
properties:
article:
$ref: '#/components/schemas/Article'
'401':
description: Non authentifié
'404':
description: Article non trouvé
'500':
description: Erreur serveur
components:
schemas:
Article:
type: object
properties:
slug:
type: string
description: Identifiant unique de l'article (généré à partir du titre)
example: "mon-premier-article"
title:
type: string
description: Titre de l'article
example: "Mon Premier Article"
description:
type: string
description: Description courte de l'article
example: "Description courte pour le résumé"
body:
type: string
description: Contenu complet de l'article
example: "Contenu complet de l'article..."
tagList:
type: array
items:
type: string
description: Liste des tags associés à l'article
example: ["tag1", "tag2"]
author:
type: object
properties:
username:
type: string
image:
type: string
bio:
type: string
following:
type: boolean
description: Informations de l'auteur de l'article
createdAt:
type: string
format: date-time
description: Date/heure de création de l'article
example: "2024-01-15T10:30:00Z"
updatedAt:
type: string
format: date-time
description: Date/heure de la dernière mise à jour
example: "2024-01-15T10:30:00Z"
favorited:
type: boolean
description: Indique si l'article est mis en favori par l'utilisateur authentifié
favoritesCount:
type: integer
description: Nombre de fois que cet article a été ajouté aux favoris
example: 5