init
This commit is contained in:
492
openapi.yaml
Normal file
492
openapi.yaml
Normal file
@@ -0,0 +1,492 @@
|
||||
openapi: 3.1.0
|
||||
info:
|
||||
title: OXSpeak Server API
|
||||
version: 1.0.0
|
||||
description: API HTTP exposée par le serveur OXSpeak.
|
||||
servers:
|
||||
- url: http://localhost:7000
|
||||
paths:
|
||||
/health:
|
||||
get:
|
||||
summary: Vérifie l'état du service
|
||||
responses:
|
||||
'200':
|
||||
description: OK
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: object
|
||||
properties:
|
||||
status:
|
||||
type: string
|
||||
example: ok
|
||||
|
||||
/auth/channel/login/:
|
||||
get:
|
||||
summary: Authentification par clé publique (renvoie un JWT)
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/AuthRequest'
|
||||
responses:
|
||||
'200':
|
||||
description: Jeton JWT généré
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/AuthResponse'
|
||||
'400':
|
||||
description: Requête invalide
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/Error'
|
||||
'500':
|
||||
description: Erreur interne
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/Error'
|
||||
|
||||
/api/server/:
|
||||
get:
|
||||
summary: Liste des serveurs
|
||||
responses:
|
||||
'200':
|
||||
description: Liste de serveurs
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: array
|
||||
items:
|
||||
$ref: '#/components/schemas/Server'
|
||||
'500':
|
||||
description: Erreur serveur
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/Error'
|
||||
post:
|
||||
summary: Crée un serveur
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/CreateServerRequest'
|
||||
responses:
|
||||
'201':
|
||||
description: Serveur créé
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/Server'
|
||||
'400': { description: Requête invalide }
|
||||
'500': { description: Erreur interne }
|
||||
|
||||
/api/server/{id}/:
|
||||
parameters:
|
||||
- name: id
|
||||
in: path
|
||||
required: true
|
||||
schema:
|
||||
type: string
|
||||
format: uuid
|
||||
get:
|
||||
summary: Détail d'un serveur
|
||||
responses:
|
||||
'200':
|
||||
description: Serveur
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/Server'
|
||||
'404': { description: Introuvable }
|
||||
'500': { description: Erreur interne }
|
||||
put:
|
||||
summary: Met à jour un serveur
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/UpdateServerRequest'
|
||||
responses:
|
||||
'200':
|
||||
description: Serveur mis à jour
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/Server'
|
||||
'400': { description: Requête invalide }
|
||||
'404': { description: Introuvable }
|
||||
'500': { description: Erreur interne }
|
||||
delete:
|
||||
summary: Supprime un serveur
|
||||
responses:
|
||||
'204': { description: Supprimé }
|
||||
'404': { description: Introuvable }
|
||||
'500': { description: Erreur interne }
|
||||
|
||||
/api/category/:
|
||||
get:
|
||||
summary: Liste des catégories
|
||||
responses:
|
||||
'200':
|
||||
description: Liste des catégories
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: array
|
||||
items:
|
||||
$ref: '#/components/schemas/Category'
|
||||
'500': { description: Erreur interne }
|
||||
post:
|
||||
summary: Crée une catégorie
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/CreateCategoryRequest'
|
||||
responses:
|
||||
'201':
|
||||
description: Catégorie créée
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/Category'
|
||||
'400': { description: Requête invalide }
|
||||
'500': { description: Erreur interne }
|
||||
|
||||
/api/category/{id}/:
|
||||
parameters:
|
||||
- name: id
|
||||
in: path
|
||||
required: true
|
||||
schema:
|
||||
type: string
|
||||
format: uuid
|
||||
get:
|
||||
summary: Détail d'une catégorie
|
||||
responses:
|
||||
'200':
|
||||
description: Catégorie
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/Category'
|
||||
'404': { description: Introuvable }
|
||||
'500': { description: Erreur interne }
|
||||
put:
|
||||
summary: Met à jour une catégorie
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/UpdateCategoryRequest'
|
||||
responses:
|
||||
'200':
|
||||
description: Catégorie mise à jour
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/Category'
|
||||
'400': { description: Requête invalide }
|
||||
'404': { description: Introuvable }
|
||||
'500': { description: Erreur interne }
|
||||
delete:
|
||||
summary: Supprime une catégorie
|
||||
responses:
|
||||
'204': { description: Supprimé }
|
||||
'404': { description: Introuvable }
|
||||
'500': { description: Erreur interne }
|
||||
|
||||
/api/channel/:
|
||||
get:
|
||||
summary: Liste des canaux
|
||||
responses:
|
||||
'200':
|
||||
description: Liste des canaux
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: array
|
||||
items:
|
||||
$ref: '#/components/schemas/Channel'
|
||||
'500': { description: Erreur interne }
|
||||
post:
|
||||
summary: Crée un canal
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/CreateChannelRequest'
|
||||
responses:
|
||||
'201':
|
||||
description: Canal créé
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/Channel'
|
||||
'400': { description: Requête invalide }
|
||||
'500': { description: Erreur interne }
|
||||
|
||||
/api/channel/{id}/:
|
||||
parameters:
|
||||
- name: id
|
||||
in: path
|
||||
required: true
|
||||
schema:
|
||||
type: string
|
||||
format: uuid
|
||||
get:
|
||||
summary: Détail d'un canal
|
||||
responses:
|
||||
'200':
|
||||
description: Canal
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/Channel'
|
||||
'404': { description: Introuvable }
|
||||
'500': { description: Erreur interne }
|
||||
put:
|
||||
summary: Met à jour un canal
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/UpdateChannelRequest'
|
||||
responses:
|
||||
'200':
|
||||
description: Canal mis à jour
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/Channel'
|
||||
'400': { description: Requête invalide }
|
||||
'404': { description: Introuvable }
|
||||
'500': { description: Erreur interne }
|
||||
delete:
|
||||
summary: Supprime un canal
|
||||
responses:
|
||||
'204': { description: Supprimé }
|
||||
'404': { description: Introuvable }
|
||||
'500': { description: Erreur interne }
|
||||
|
||||
/api/message/:
|
||||
get:
|
||||
summary: Liste des messages
|
||||
responses:
|
||||
'200':
|
||||
description: Liste des messages
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
type: array
|
||||
items:
|
||||
$ref: '#/components/schemas/Message'
|
||||
'500': { description: Erreur interne }
|
||||
post:
|
||||
summary: Crée un message
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/CreateMessageRequest'
|
||||
responses:
|
||||
'201':
|
||||
description: Message créé
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/Message'
|
||||
'400': { description: Requête invalide }
|
||||
'500': { description: Erreur interne }
|
||||
|
||||
/api/message/{id}/:
|
||||
parameters:
|
||||
- name: id
|
||||
in: path
|
||||
required: true
|
||||
schema:
|
||||
type: string
|
||||
format: uuid
|
||||
get:
|
||||
summary: Détail d'un message
|
||||
responses:
|
||||
'200':
|
||||
description: Message
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/Message'
|
||||
'404': { description: Introuvable }
|
||||
'500': { description: Erreur interne }
|
||||
put:
|
||||
summary: Met à jour un message
|
||||
requestBody:
|
||||
required: true
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/UpdateMessageRequest'
|
||||
responses:
|
||||
'200':
|
||||
description: Message mis à jour
|
||||
content:
|
||||
application/json:
|
||||
schema:
|
||||
$ref: '#/components/schemas/Message'
|
||||
'400': { description: Requête invalide }
|
||||
'404': { description: Introuvable }
|
||||
'500': { description: Erreur interne }
|
||||
delete:
|
||||
summary: Supprime un message
|
||||
responses:
|
||||
'204': { description: Supprimé }
|
||||
'404': { description: Introuvable }
|
||||
'500': { description: Erreur interne }
|
||||
|
||||
components:
|
||||
schemas:
|
||||
UUID:
|
||||
type: string
|
||||
format: uuid
|
||||
|
||||
Error:
|
||||
type: object
|
||||
properties:
|
||||
error:
|
||||
type: string
|
||||
|
||||
AuthRequest:
|
||||
type: object
|
||||
required: [pub_key]
|
||||
properties:
|
||||
pub_key:
|
||||
type: string
|
||||
description: Clé publique du client
|
||||
|
||||
AuthResponse:
|
||||
type: object
|
||||
properties:
|
||||
JWT:
|
||||
type: string
|
||||
|
||||
Server:
|
||||
type: object
|
||||
properties:
|
||||
id: { $ref: '#/components/schemas/UUID' }
|
||||
name: { type: string }
|
||||
created_at: { type: string, format: date-time }
|
||||
updated_at: { type: string, format: date-time }
|
||||
required: [id, name, created_at, updated_at]
|
||||
|
||||
CreateServerRequest:
|
||||
type: object
|
||||
required: [name]
|
||||
properties:
|
||||
name: { type: string }
|
||||
password: { type: string, nullable: true }
|
||||
|
||||
UpdateServerRequest:
|
||||
type: object
|
||||
required: [name]
|
||||
properties:
|
||||
name: { type: string }
|
||||
password: { type: string, nullable: true }
|
||||
|
||||
Category:
|
||||
type: object
|
||||
properties:
|
||||
id: { $ref: '#/components/schemas/UUID' }
|
||||
server_id: { $ref: '#/components/schemas/UUID' }
|
||||
name: { type: string }
|
||||
created_at: { type: string, format: date-time }
|
||||
updated_at: { type: string, format: date-time }
|
||||
required: [id, server_id, name, created_at, updated_at]
|
||||
|
||||
CreateCategoryRequest:
|
||||
type: object
|
||||
required: [server_id, name]
|
||||
properties:
|
||||
server_id: { $ref: '#/components/schemas/UUID' }
|
||||
name: { type: string }
|
||||
|
||||
UpdateCategoryRequest:
|
||||
type: object
|
||||
required: [name]
|
||||
properties:
|
||||
name: { type: string }
|
||||
|
||||
Channel:
|
||||
type: object
|
||||
properties:
|
||||
id: { $ref: '#/components/schemas/UUID' }
|
||||
server_id: { $ref: '#/components/schemas/UUID' }
|
||||
category_id: { $ref: '#/components/schemas/UUID' }
|
||||
position: { type: integer, format: int32 }
|
||||
type: { $ref: '#/components/schemas/ChannelType' }
|
||||
name: { type: string, nullable: true }
|
||||
created_at: { type: string, format: date-time }
|
||||
updated_at: { type: string, format: date-time }
|
||||
required: [id, position, type, created_at, updated_at]
|
||||
|
||||
ChannelType:
|
||||
type: string
|
||||
enum: [text, voice, dm]
|
||||
|
||||
CreateChannelRequest:
|
||||
type: object
|
||||
required: [type]
|
||||
properties:
|
||||
server_id: { $ref: '#/components/schemas/UUID' }
|
||||
category_id: { $ref: '#/components/schemas/UUID' }
|
||||
position: { type: integer, format: int32 }
|
||||
type: { $ref: '#/components/schemas/ChannelType' }
|
||||
name: { type: string, nullable: true }
|
||||
|
||||
UpdateChannelRequest:
|
||||
type: object
|
||||
properties:
|
||||
server_id: { $ref: '#/components/schemas/UUID' }
|
||||
category_id: { $ref: '#/components/schemas/UUID' }
|
||||
position: { type: integer, format: int32 }
|
||||
type: { $ref: '#/components/schemas/ChannelType' }
|
||||
name: { type: string, nullable: true }
|
||||
|
||||
Message:
|
||||
type: object
|
||||
properties:
|
||||
id: { $ref: '#/components/schemas/UUID' }
|
||||
channel_id: { $ref: '#/components/schemas/UUID' }
|
||||
user_id: { $ref: '#/components/schemas/UUID' }
|
||||
content: { type: string }
|
||||
created_at: { type: string, format: date-time }
|
||||
edited_at: { type: string, format: date-time, nullable: true }
|
||||
reply_to_id: { $ref: '#/components/schemas/UUID' }
|
||||
required: [id, channel_id, user_id, content, created_at]
|
||||
|
||||
CreateMessageRequest:
|
||||
type: object
|
||||
required: [channel_id, user_id, content]
|
||||
properties:
|
||||
channel_id: { $ref: '#/components/schemas/UUID' }
|
||||
user_id: { $ref: '#/components/schemas/UUID' }
|
||||
content: { type: string }
|
||||
reply_to_id: { $ref: '#/components/schemas/UUID' }
|
||||
|
||||
UpdateMessageRequest:
|
||||
type: object
|
||||
required: [content]
|
||||
properties:
|
||||
content: { type: string }
|
||||
reply_to_id: { $ref: '#/components/schemas/UUID' }
|
||||
Reference in New Issue
Block a user