diff --git a/laravel/openapi-swagger.yml b/laravel/openapi-swagger.yml new file mode 100644 index 0000000..8b7f90b --- /dev/null +++ b/laravel/openapi-swagger.yml @@ -0,0 +1,281 @@ +openapi: 3.0.4 +info: + title: Blog API + description: |- + Projet Laravel avec Sanctum pour l'authentification + license: + name: Creative Commons 4.0 + url: https://creativecommons.org/licenses/by/4.0/ + version: 1.0.0 +servers: + - url: https://isi2.ale-pri.com/api/ + description: Serveur de production + - url: http://localhost:8000/api/ + description: Serveur de développement local +tags: + - name: billets + description: Opérations sur les billets + - name: commentaires + description: Operations sur les commentaires + - name: user + description: Operations about user +paths: + /billets: + get: + tags: + - billets + summary: Liste des billets + operationId: getBillets + responses: + '200': + description: Liste des billets + content: + application/json: + schema: + type: object + properties: + data: + type: array + items: + $ref: '#/components/schemas/Billet' + /login: + post: + responses: + '200': + description: Authentification réussie + content: + application/json: + schema: + $ref: '#/components/schemas/TokenResponse' + '401': + description: Authentification échouée + tags: + - user + summary: Authentification de l'utilisateur + operationId: loginUser + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/LoginRequest' + /register: + post: + responses: + '201': + description: Utilisateur créé avec succès + content: + application/json: + schema: + $ref: '#/components/schemas/TokenResponse' + '422': + description: Erreur de validation + tags: + - user + summary: Enregistrement d'un nouvel utilisateur + operationId: registerUser + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/RegisterRequest' + /user: + get: + security: + - sanctum: [] + tags: + - user + summary: Récupérer les informations de l'utilisateur connecté + operationId: getUser + responses: + '200': + description: Informations de l'utilisateur + content: + application/json: + schema: + $ref: '#/components/schemas/User' + '401': + description: Non autorisé + /user/logout: + post: + security: + - sanctum: [] + tags: + - user + summary: Déconnexion de l'utilisateur + operationId: logoutUser + responses: + '204': + description: Déconnexion réussie + '401': + description: Non autorisé + /billets/{id}: + get: + security: + - sanctum: [] + tags: + - billets + summary: Détails d'un billet + operationId: getBilletById + parameters: + - name: id + in: path + required: true + schema: + type: integer + description: ID du billet + responses: + '200': + description: Détails du billet + content: + application/json: + schema: + $ref: '#/components/schemas/BilletWithComments' + '404': + description: Billet non trouvé + /commentaires: + post: + security: + - sanctum: [] + tags: + - commentaires + summary: Ajouter un commentaire à un billet + operationId: addComment + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/CommentaireRequest' + responses: + '201': + description: Commentaire ajouté avec succès + content: + application/json: + schema: + $ref: '#/components/schemas/Commentaire' + '422': + description: Erreur de validation + + +components: + schemas: + Billet: + type: object + properties: + Date: + type: string + format: date-time + example: '2023-10-01' + Titre: + type: string + example: Billet 1 + Contenu: + type: string + example: Lorem ipsum dolor sit amet. + BilletWithComments: + type: object + properties: + Date: + type: string + format: date-time + example: '2023-10-01' + Titre: + type: string + example: Billet 1 + Contenu: + type: string + example: Lorem ipsum dolor sit amet. + Commentaires: + type: array + items: + $ref: '#/components/schemas/Commentaire' + Commentaire: + type: object + properties: + COM_DATE: + type: string + format: date-time + example: '2023-10-01' + COM_AUTEUR: + type: string + example: John Doe + COM_CONTENU: + type: string + example: Lorem ipsum dolor sit amet. + billet_id: + type: integer + example: 1 + user_id: + type: integer + example: 1 + CommentaireRequest: + type: object + properties: + COM_DATE: + type: string + format: date-time + example: '2023-10-01' + COM_CONTENU: + type: string + example: Lorem ipsum dolor sit amet. + billet_id: + type: integer + example: 1 + user_id: + type: integer + example: 1 + LoginRequest: + type: object + properties: + email: + type: string + format: email + example: au@secou.rs + password: + type: string + format: password + example: secret123 + TokenResponse: + type: object + properties: + token: + type: string + example: 1|a2b3c4d5e6f7g8h9i0j + type: + type: string + example: Bearer + RegisterRequest: + type: object + properties: + name: + type: string + example: John Doe + email: + type: string + format: email + example: au@secou.rs + password: + type: string + format: password + example: secret123 + User: + type: object + properties: + id: + type: integer + example: 1 + name: + type: string + example: John Doe + email: + type: string + format: email + example: au@secou.rs + securitySchemes: + sanctum: + type: http + scheme: bearer + bearerFormat: Bearer + description: Utiliser le token Bearer pour l'authentification \ No newline at end of file