493 lines
14 KiB
YAML
493 lines
14 KiB
YAML
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' }
|