swagger deployed at /swagger

This commit is contained in:
Clément
2025-06-10 21:17:33 +02:00
parent 6e2fdb5087
commit b0765e8aac
87 changed files with 594 additions and 2 deletions

0
laravel/resources/css/app.css Normal file → Executable file
View File

0
laravel/resources/js/app.js Normal file → Executable file
View File

0
laravel/resources/js/bootstrap.js vendored Normal file → Executable file
View File

View File

@@ -0,0 +1,432 @@
{
"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"
}
}
}
}

View File

@@ -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

0
laravel/resources/views/welcome.blade.php Normal file → Executable file
View File