add API documentation yaml

Co-authored-by: Djalim Simaila <DjalimSimaila@users.noreply.github.com>
This commit is contained in:
Thomas Rubini 2023-02-16 09:48:21 +01:00
parent 54ec5640f1
commit 59735916a1
No known key found for this signature in database
GPG Key ID: C7D287C8C1CAC373
2 changed files with 497 additions and 0 deletions

495
api_doc.yml Normal file
View File

@ -0,0 +1,495 @@
openapi: 3.0.0
info:
title: Truth Inquiry
description: "Serious Game sur le theme de la communication non verbale"
version: 1.0.0
contact:
email: contact@simailadjalim.fr
license:
name: MIT
url: https://www.mit.edu/~amini/LICENSE.md
servers:
- url: truthInquiry.simailadjalim.fr
# Definition des tags ------------------------
tags:
- name: "pages"
description: "Chemins liés à une page web"
- name: "api"
description: "Chemins liés à l'api interne au serveur"
# Endpoints
paths:
/:
get:
tags:
- pages
summary: "Page d'accueil du site web"
description: "Page d'accueil du site web, elle contient des liens vers les pages de contacts et de mention legales ainsi que le bouton pour lancer le jeu."
operationId: homePage
responses:
"200":
description: "La page d'accueil est retournée au navigateur web"
content:
text/html: {}
/solo:
get:
tags:
- pages
summary: "Page du jeu lors d'une partie solo"
description: "Page de jeu du mode solo, elle contient toute la logique du jeu du moment où le joueur entre son pseudo et le moment ou la partie d'arrete"
operationId: singlePage
responses:
"200":
description: "La page de jeu seul est retournée au navigateur web"
content:
text/html: {}
/multi:
get:
tags:
- pages
summary: "Page du jeu lors d'une partie multijoueurs"
description: "Page de jeu du mode multijoueur, elle contient uniquement la logique du jeu pendant la partie multijoueur."
operationId: multiPage
responses:
"200":
description: "La page de jeu multijoueur est retournée au navigateur web."
content:
text/html: {}
/legal:
get:
tags:
- pages
summary: "Page de mentions legales"
description: "Page des mentions legales du site web, comme son nom l'indique elle affiche les mentions legales."
operationId: mentionLegales
responses:
"200":
description: "La page de mentions legales est retournée au navigateur"
content:
text/html: {}
#TODO change
/privacy:
get:
tags:
- pages
summary: "Page de contact"
description: "Page de contact du site web, elle affiche les informations de contact pour contacter les mainteneurs du site web."
operationId: contact
responses:
"200":
description: "La page de contact est retournée au navigateur web"
content:
text/html: {}
#TODO
#/licenses
/lobby/{game_id}:
get:
tags:
- pages
summary: "Page de la room multijoueur"
description: "Page representant la salle avant le lancement d'une partie multijoueur, elle affiche tout les joueurs present dans la salle, elle sert aussi a rejoindre la salle pour toute personne possedant le lien."
parameters:
- in: path
name: game_id
schema:
type: string
required: true
description: gameId
operationId: invite
responses:
"200":
description: "La page de la salle est retournée au navigateur web."
content:
text/html: {}
"404":
description: "La salle n'existe pas ou n'existe plus."
content:
text/html: {}
# Api ------------------------
/api/v1/createGame:
post:
tags:
- api
summary: "Demande une nouvelle session de jeu multijoueur au serveur"
description: "Cette route crée une salle de jeu multijoueur dans le serveur, elle octroie ensuite les droit de creation de la salle a l'utilisateur dont le pseudo est donné en parametre post et lui retourne l'identifiant de la game"
operationId: create_game
requestBody:
description: "Le pseudo de la personne souhaitant crée une partie"
required: true
content:
application/json:
schema:
type: object
properties:
username:
$ref: "#/components/schemas/username"
responses:
"200":
description: "Retourne un object json contenant le code erreur de la requete, l'identifiant de la partie, ainsi que l'identifiant de la partie. Signifiant donc que la partie existe bien du coté du serveur"
content:
application/json:
schema:
$ref: "#/components/schemas/newGameData"
text/plain; charset=utf-8:
schema:
type: string
/api/v1/joinGame:
post:
tags:
- api
summary: "Ajoute l'utilisateur dans une partie en cours"
description: "Cette route ajoute dans la partie identifié par l'identifiant de jeu l'utilisateur indentifié par son pseudo"
operationId: join_game
requestBody:
description: "Un objet json contenant l'identifiant de la partie (game_id) ainsi que le pseudo (username) de l'utilisateur souhaitant rejoindre la partie "
required: true
content:
application/json:
schema:
$ref: "#/components/schemas/joinGameData"
responses:
"200":
description: "Retourne le code erreur de la requete."
content:
application/json:
schema:
type: object
properties:
error:
$ref: "#/components/schemas/error"
text/plain; charset=utf-8:
schema:
type: string
/api/v1/isOwner:
post:
tags:
- api
summary: "Informe si le joueur est le createur de la partie ou non"
description : "Cette route sert a determiner si le joueur qui fait la requette est le createur de la partie ou non"
operationId: is_owner
parameters:
- in : cookie
name: is_owner
description: "Booleen attribué par le serveur determinant si le joueur actuel est celui qui a crée la salle"
schema:
type: boolean
responses:
"200":
description: Retourne le code erreur de la requete ainsi qu'un booleen qui determine le status du joueur
content:
application/json:
schema:
type: object
properties:
error:
$ref: "#/components/schemas/error"
owner:
type: boolean
description: booleen determinant si le joueur est le createur de la partie
/api/v1/startGame:
post:
tags:
- api
summary: "Crée les données necessaire au demarage d'une session de jeu"
description: "Cette route crée les données necessaire au bon fonctionnement du jeu, c'est a dire qu'elle choisit les personnages, leurs salles, leurs reactions ainsi que leurs reponses et les stoque dans sa memoire en attendant que les clients les recuperent"
operationId: startGame
parameters:
- in: cookie
name: is_owner
required: true
description: "Booleen attribué par le serveur determinant si le joueur actuel est celui qui a crée la salle"
schema:
type: boolean
- in: cookie
name: "game_id"
required: true
description: "Identifiant de la partie a lancer"
schema:
type: string
responses:
"200":
description: "Retourne le code erreur de la requete, '0' signifiant que les données ont correctement été generées"
content:
application/json:
schema:
type: object
properties:
error:
$ref: "#/components/schemas/error"
/api/v1/getGameData:
post:
tags:
- api
summary: "Recupere les données du jeu"
description: "Cette route recupere les données necessaire au bon fonctionnement du jeu, c'est a dire les personnages a afficher, leurs textes, leurs reactions ainsi que leurs reponses"
operationId: getGame
parameters:
- in: cookie
name: "game_id"
required: true
description: "Identifiant de la partie a lancer"
schema:
type: string
responses:
"200":
description: "Retourne le code erreur de la requete, et les données du jeu s'il n'y a pas eu d'erreur"
content:
application/json:
schema:
$ref: "#/components/schemas/gameData"
/api/v1/getGameMembers:
post:
tags:
- api
summary: "retourne les membre de la partie"
description: "Cette route retourne sous la forme d'une liste les nom des membres de la partie."
operationId: getMembers
parameters:
- in : cookie
name: game_id
required: true
description: Identifiant de la partie
schema:
type : string
responses:
"200":
description: "liste des pseudos des membres de la partie"
content:
application/json:
schema:
type: object
properties:
"error":
$ref: "#/components/schemas/error"
"members":
type: array
items:
type: string
/api/v1/hasJoined:
post:
tags:
- api
summary: Informe si le joueur est dans une partie
description: "Cette route sert a determiner si le joueur qui fait la requette est dans la partie"
operationId: has_joined
parameters:
- in : cookie
name: game_id
description: "identifiant de la game"
schema:
type: string
responses:
"200":
description: "Retourne le code d'erreur ainsi qu'un booleen determinant si le joueur est dans la partie"
content:
application/json:
schema:
type: object
properties:
"error":
$ref: "#/components/schemas/error"
"joined":
type: boolean
/api/v1/getNpcImage:
post:
tags:
- "api"
summary: retourne l'image d'un personnage sans reactions
description: "Cette route retourne l'image neutre du personnage demmandé identifié par son identifiants"
operationId: get_npc_image
requestBody:
description: "identifiant du personnage dont on veut recupere l'image"
required: true
content:
application/json:
schema:
type: object
properties:
npcid:
type: integer
responses:
"200":
description: "image"
content:
image/png:
schema:
type: string
/api/v1/getNpcReaction:
post:
tags:
- api
summary: "Recupere une reaction donnée pour un personage du jeu dans une partie"
description: "Cette route retoune l'image correspondant a la reaction que le joueur doit deviner"
operationId: get_npc_reaction
requestBody:
description: "identifiant du personnage dont on veut recupere l'image"
required: true
content:
application/json:
schema:
type: object
properties:
npcid:
type: integer
responses:
"200":
description: "image"
content:
image/png:
schema:
type: string
#/api/v1/gameProgress
#/api/v1/submitAnwers
components: #----------------------------------
schemas:
error:
type: integer
description: "error de la requette"
enum:
- 0
- 1
game_id:
type: string
description: "id de la room multijoueur"
username:
type: string
description: "pseudo du joueur"
npc:
type: object
description: "personnage a interroger dans la partie"
properties:
"QA_0" :
type: string
description: reponse a la question "oû ce personnage etait ?"
"QA_1" :
type: string
description: reponse a la question "avec qui ce personnage etait ?"
name:
type: string
description: "nom du personnage"
salle:
type: object
description: "object representant une salle virtuelle pour l'intrigue textuelle du jeu"
properties:
name:
type: string
description: nom de la salle virtuelle
npcs:
type: array
description: array contenant les identifiants des personnage present dans la salle, cet array contient toujours deux identifiants sauf dans le cas du coupable ou il est seul.
items:
type: string
salle_:
type: object
description: "object representant une salle virtuelle pour l'intrigue textuelle du jeu"
properties:
name:
type: string
description: nom de la salle virtuelle
npcs:
type: array
description: array contenant les identifiants des personnage present dans la salle, cet array contient toujours deux identifiants sauf dans le cas du coupable ou il est seul.
items:
type:
integer
#____________________________#
game:
type: object
description: "données du jeu"
properties:
npcs:
type: object
description: "liste des personnages choisis par le serveur de maniere aleatoire, ainsi que leur texte de dialogue"
properties:
"npc_id_0":
$ref: "#/components/schemas/npc"
"npc_id_1":
$ref: "#/components/schemas/npc"
"npc_id_2":
$ref: "#/components/schemas/npc"
"npc_id_3":
$ref: "#/components/schemas/npc"
"npc_id_4":
$ref: "#/components/schemas/npc"
questions:
type: object
description: "les questions identifiés par leur type, choisis aleatoirement par le serveur"
properties:
"QA_0":
type: string
description: question de type "oû etait le personnage ?"
"QA_1":
type: string
description: question de type "avec qui etait le personnage ?"
rooms:
type: object
description: "object contenant les salle virtuelle de la partie indentifiées par leur identifiants"
properties:
"room_id_0":
$ref: "#/components/schemas/salle"
"room_id_1":
$ref: "#/components/schemas/salle"
"room_id_2":
$ref: "#/components/schemas/salle_"
traits:
type : array
description: "liste des traits disponible pour cette session de jeu"
items:
type: string
newGameData:
type: object
properties:
error:
$ref: "#/components/schemas/error"
game_id:
$ref: "#/components/schemas/game_id"
joinGameData:
type: object
properties:
game_id:
$ref: "#/components/schemas/game_id"
username:
$ref: "#/components/schemas/username"
gameData:
type: object
properties:
error:
$ref: "#/components/schemas/error"
gameData:
$ref: "#/components/schemas/game"

View File

@ -9,6 +9,8 @@ from truthinquiry.logic import game_logic
routes_api = flask.Blueprint("api", __name__)
# API specification is documented in api_doc.yml
@routes_api.route("/createGame", methods=["GET", "POST"])
def create_game():
username = flask.request.values.get("username")