Merge pull request #84 from ThomasRubini/api_doc
add API documentation yaml
This commit is contained in:
		
						commit
						2b6673d4a9
					
				
							
								
								
									
										470
									
								
								api_doc.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										470
									
								
								api_doc.yml
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,470 @@
 | 
			
		||||
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: "Pages endpoints"
 | 
			
		||||
  - name: "api"
 | 
			
		||||
    description: "Api endpoints"
 | 
			
		||||
 | 
			
		||||
# Endpoints
 | 
			
		||||
paths:
 | 
			
		||||
  /:
 | 
			
		||||
    get:
 | 
			
		||||
      tags:
 | 
			
		||||
        - pages
 | 
			
		||||
      summary: "Main page"
 | 
			
		||||
      description: "Home page of the game, it serves as a hub of all other pages : legal mentions, credits and game pages"
 | 
			
		||||
      operationId: homePage
 | 
			
		||||
      responses:
 | 
			
		||||
        "200":
 | 
			
		||||
          description: "return the home page of the game"
 | 
			
		||||
          content:
 | 
			
		||||
            text/html: {}
 | 
			
		||||
 | 
			
		||||
  /solo:
 | 
			
		||||
    get:
 | 
			
		||||
      tags:
 | 
			
		||||
        - pages
 | 
			
		||||
      summary: "solo game page"
 | 
			
		||||
      description: "Sigle player game page, it holds all of the game logic from the player entering their username to the end of the game"
 | 
			
		||||
      operationId: singlePage
 | 
			
		||||
      responses:
 | 
			
		||||
        "200":
 | 
			
		||||
          description: "returns the game page"
 | 
			
		||||
          content:
 | 
			
		||||
            text/html: {}
 | 
			
		||||
 | 
			
		||||
  /multi:
 | 
			
		||||
    get:
 | 
			
		||||
      tags:
 | 
			
		||||
        - pages
 | 
			
		||||
      summary: "multiplayer game page"
 | 
			
		||||
      description: "Multi player game page, it holds all of the game logic from the game creator starting the game to its end"
 | 
			
		||||
      operationId: multiPage
 | 
			
		||||
      responses:
 | 
			
		||||
        "200":
 | 
			
		||||
          description: "returns the game page"
 | 
			
		||||
          content:
 | 
			
		||||
            text/html: {}
 | 
			
		||||
 | 
			
		||||
  /legal:
 | 
			
		||||
    get:
 | 
			
		||||
      tags:
 | 
			
		||||
        - pages
 | 
			
		||||
      summary: "legal mention page"
 | 
			
		||||
      description: "The legal mention page, holds the legal mentions such as where is hosted the website and who made it"
 | 
			
		||||
      operationId: mentionLegales
 | 
			
		||||
      responses:
 | 
			
		||||
        "200":
 | 
			
		||||
          description: "returns the legal mention page"
 | 
			
		||||
          content:
 | 
			
		||||
            text/html: {}
 | 
			
		||||
 | 
			
		||||
  /lobby/{game_id}:
 | 
			
		||||
    get:
 | 
			
		||||
      tags:
 | 
			
		||||
        - pages
 | 
			
		||||
      summary: "multiplayer lobby room"
 | 
			
		||||
      description: "The multiplayer lobby room is shown before a multiplayer game starts, is shows the current member of the game, it is reacheable by the game id shown in the page and in the url"
 | 
			
		||||
      parameters:
 | 
			
		||||
        - in: path
 | 
			
		||||
          name: game_id
 | 
			
		||||
          schema:
 | 
			
		||||
            type: string
 | 
			
		||||
          required: true
 | 
			
		||||
          description: gameId
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
      operationId: invite
 | 
			
		||||
      responses:
 | 
			
		||||
        "200":
 | 
			
		||||
          description: "return the lobby page."
 | 
			
		||||
          content:
 | 
			
		||||
            text/html: {}
 | 
			
		||||
        "404":
 | 
			
		||||
          description: "This does not exist or does not exist anymore"
 | 
			
		||||
          content:
 | 
			
		||||
            text/html: {}
 | 
			
		||||
 | 
			
		||||
  # Api ------------------------
 | 
			
		||||
 | 
			
		||||
  /api/v1/createGame:
 | 
			
		||||
    post:
 | 
			
		||||
      tags:
 | 
			
		||||
        - api
 | 
			
		||||
      summary: "Create a game session"
 | 
			
		||||
      description: "This endpoint create a game in the server, the username passed as parametter is set as the game owner"
 | 
			
		||||
      operationId: create_game
 | 
			
		||||
      requestBody:
 | 
			
		||||
        description: "username to set as game owner"
 | 
			
		||||
        required: true
 | 
			
		||||
        content:
 | 
			
		||||
          application/json:
 | 
			
		||||
            schema:
 | 
			
		||||
              type: object
 | 
			
		||||
              properties:
 | 
			
		||||
                username:
 | 
			
		||||
                  $ref: "#/components/schemas/username"
 | 
			
		||||
 | 
			
		||||
      responses:
 | 
			
		||||
        "200":
 | 
			
		||||
          description: "Returns a object, with the error code, and a game_id."
 | 
			
		||||
          content:
 | 
			
		||||
            application/json:
 | 
			
		||||
              schema:
 | 
			
		||||
                $ref: "#/components/schemas/newGameData"
 | 
			
		||||
            text/plain; charset=utf-8:
 | 
			
		||||
              schema:
 | 
			
		||||
                type: string
 | 
			
		||||
 | 
			
		||||
  /api/v1/joinGame:
 | 
			
		||||
    post:
 | 
			
		||||
      tags:
 | 
			
		||||
        - api
 | 
			
		||||
      summary: "Adds user to an existing game"
 | 
			
		||||
      description: "This endpoint adds the username passed as parameter to the game identified by its game_id also passed as the parametter"
 | 
			
		||||
      operationId: join_game
 | 
			
		||||
      requestBody:
 | 
			
		||||
        description: "object with a game_id and a username"
 | 
			
		||||
        required: true
 | 
			
		||||
        content:
 | 
			
		||||
          application/json:
 | 
			
		||||
            schema:
 | 
			
		||||
              $ref: "#/components/schemas/joinGameData"
 | 
			
		||||
 | 
			
		||||
      responses:
 | 
			
		||||
        "200":
 | 
			
		||||
          description: "returns a object with the error code."
 | 
			
		||||
          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: "ask if the user is the game owner"
 | 
			
		||||
      description : "This endpoint it used to know if the username stored in the cookie is the owner of the game"
 | 
			
		||||
      operationId: is_owner
 | 
			
		||||
      parameters:
 | 
			
		||||
        - in: cookie
 | 
			
		||||
          name: session
 | 
			
		||||
          description: Local session, holds data used to authentificate the user and the games they belong.
 | 
			
		||||
          required: true
 | 
			
		||||
          schema:
 | 
			
		||||
              type: object
 | 
			
		||||
      responses:
 | 
			
		||||
        "200":
 | 
			
		||||
          description: "returns an object with the error code."
 | 
			
		||||
          content:
 | 
			
		||||
            application/json:
 | 
			
		||||
              schema:
 | 
			
		||||
                type: object
 | 
			
		||||
                properties:
 | 
			
		||||
                  error:
 | 
			
		||||
                    $ref: "#/components/schemas/error"
 | 
			
		||||
                  owner:
 | 
			
		||||
                    type: boolean
 | 
			
		||||
                    description: "boolean determining if the palyer is the owner of the gzame"
 | 
			
		||||
 | 
			
		||||
  /api/v1/startGame:
 | 
			
		||||
    post:
 | 
			
		||||
      tags:
 | 
			
		||||
        - api
 | 
			
		||||
      summary: "Start the game"
 | 
			
		||||
      description: "Starts the game and generate necessary data"
 | 
			
		||||
      operationId: startGame
 | 
			
		||||
      parameters:
 | 
			
		||||
        - in: cookie
 | 
			
		||||
          name: session
 | 
			
		||||
          description: Local session, holds data used to authentificate the user and the games they belong.
 | 
			
		||||
          required: true
 | 
			
		||||
          schema:
 | 
			
		||||
              type: object
 | 
			
		||||
 | 
			
		||||
      responses:
 | 
			
		||||
        "200":
 | 
			
		||||
          description: "returns a object with the error code."
 | 
			
		||||
          content:
 | 
			
		||||
            application/json:
 | 
			
		||||
              schema:
 | 
			
		||||
                type: object
 | 
			
		||||
                properties:
 | 
			
		||||
                  error:
 | 
			
		||||
                    $ref: "#/components/schemas/error"
 | 
			
		||||
 | 
			
		||||
  /api/v1/getGameData:
 | 
			
		||||
    post:
 | 
			
		||||
      tags:
 | 
			
		||||
        - api
 | 
			
		||||
      summary: "get game data"
 | 
			
		||||
      description: "Guess the game from the cookie and returns general game data necessary to the client to work properly"
 | 
			
		||||
      operationId: getGame
 | 
			
		||||
      parameters:
 | 
			
		||||
        - in: cookie
 | 
			
		||||
          name: session
 | 
			
		||||
          description: Local session, holds data used to authentificate the user and the games they belong.
 | 
			
		||||
          required: true
 | 
			
		||||
          schema:
 | 
			
		||||
              type: object
 | 
			
		||||
      responses:
 | 
			
		||||
        "200":
 | 
			
		||||
          description: "returns a object with the error code."
 | 
			
		||||
          content:
 | 
			
		||||
            application/json:
 | 
			
		||||
              schema:
 | 
			
		||||
                $ref: "#/components/schemas/gameData"
 | 
			
		||||
 | 
			
		||||
  /api/v1/getGameMembers:
 | 
			
		||||
    post:
 | 
			
		||||
      tags:
 | 
			
		||||
        - api
 | 
			
		||||
      summary: "Get game members"
 | 
			
		||||
      description: "Guess the game from the cookie and returns the members of that game"
 | 
			
		||||
      operationId: getMembers
 | 
			
		||||
      parameters:
 | 
			
		||||
        - in: cookie
 | 
			
		||||
          name: session
 | 
			
		||||
          description: Local session, holds data used to authentificate the user and the games they belong.
 | 
			
		||||
          required: true
 | 
			
		||||
          schema:
 | 
			
		||||
              type: object
 | 
			
		||||
      responses:
 | 
			
		||||
        "200":
 | 
			
		||||
          description: "List of members in the game"
 | 
			
		||||
          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: "Check if the player is in a given game"
 | 
			
		||||
      description: "Checks the cookie to see if the client is currently in a given game"
 | 
			
		||||
      operationId: has_joined
 | 
			
		||||
      parameters:
 | 
			
		||||
        - in: cookie
 | 
			
		||||
          name: session
 | 
			
		||||
          description: Local session, holds data used to authentificate the user and the games they belong.
 | 
			
		||||
          required: true
 | 
			
		||||
          schema:
 | 
			
		||||
              type: object
 | 
			
		||||
      responses:
 | 
			
		||||
        "200":
 | 
			
		||||
          description: "Returns error code and a boolean determining if the player is in the game"
 | 
			
		||||
          content:
 | 
			
		||||
            application/json:
 | 
			
		||||
              schema:
 | 
			
		||||
                type: object
 | 
			
		||||
                properties:
 | 
			
		||||
                  "error":
 | 
			
		||||
                    $ref: "#/components/schemas/error"
 | 
			
		||||
                  "joined":
 | 
			
		||||
                    type: boolean
 | 
			
		||||
  
 | 
			
		||||
  /api/v1/getNpcImage:
 | 
			
		||||
    post: 
 | 
			
		||||
      tags:
 | 
			
		||||
        - "api"
 | 
			
		||||
      summary: Get an image from its ID
 | 
			
		||||
      description: >
 | 
			
		||||
        This endpoint is used to show NPC images in the result page. The image id is provided by the server upon
 | 
			
		||||
        finishing the game. a static ID is needed because the server delete information related to the game after finishing it
 | 
			
		||||
      operationId: get_npc_image
 | 
			
		||||
      requestBody:
 | 
			
		||||
        description: "image_id we want the image of"
 | 
			
		||||
        required: true
 | 
			
		||||
        content:
 | 
			
		||||
          application/json:
 | 
			
		||||
            schema:
 | 
			
		||||
              type: object
 | 
			
		||||
              properties:
 | 
			
		||||
                image_id:
 | 
			
		||||
                  type: integer
 | 
			
		||||
      responses:
 | 
			
		||||
        "200":
 | 
			
		||||
          description: "image"
 | 
			
		||||
          content:
 | 
			
		||||
            image/png:
 | 
			
		||||
              schema:
 | 
			
		||||
                type: string
 | 
			
		||||
 | 
			
		||||
  /api/v1/getNpcReaction:
 | 
			
		||||
    post:
 | 
			
		||||
      tags:
 | 
			
		||||
        - api
 | 
			
		||||
      summary: "Get an image corresponding to the reaction of a NPC in this game"
 | 
			
		||||
      description: "This endpoint is used during the game to get a random image corresponding to the assigned reaction of a NPC. The image may change every request"
 | 
			
		||||
      operationId: get_npc_reaction
 | 
			
		||||
      parameters:
 | 
			
		||||
        - in: cookie
 | 
			
		||||
          name: session
 | 
			
		||||
          description: Local session, holds data used to authentificate the user and the games they belong.
 | 
			
		||||
          required: true
 | 
			
		||||
          schema:
 | 
			
		||||
              type: object
 | 
			
		||||
      requestBody:
 | 
			
		||||
        description: "ID of the NPC we want to get the image of"
 | 
			
		||||
        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: "request error code"
 | 
			
		||||
      enum:
 | 
			
		||||
        - 0
 | 
			
		||||
        - 1
 | 
			
		||||
 | 
			
		||||
    game_id:
 | 
			
		||||
      type: string
 | 
			
		||||
      description: "ID of the game"
 | 
			
		||||
 | 
			
		||||
    username:
 | 
			
		||||
      type: string
 | 
			
		||||
      description: "player username"
 | 
			
		||||
 | 
			
		||||
    npc:
 | 
			
		||||
      type: object
 | 
			
		||||
      description: "npc to interogate in the game"
 | 
			
		||||
      properties:
 | 
			
		||||
        "QA_0" :
 | 
			
		||||
          type: string
 | 
			
		||||
          description: "'Where?' type answer"
 | 
			
		||||
        "QA_1" :
 | 
			
		||||
          type: string
 | 
			
		||||
          description: "'With who?' type answer"
 | 
			
		||||
        name:
 | 
			
		||||
          type: string
 | 
			
		||||
          description: "npc name"
 | 
			
		||||
 | 
			
		||||
    salle:
 | 
			
		||||
      type: object
 | 
			
		||||
      description: "object representing a single room the the game story"
 | 
			
		||||
      properties:
 | 
			
		||||
        name:
 | 
			
		||||
          type: string
 | 
			
		||||
          description: virtual room name
 | 
			
		||||
        npcs:
 | 
			
		||||
          type: array
 | 
			
		||||
          description: array of the npc_id present in the room, should always be at the number of two, execept for the bulgar who was alone in the room
 | 
			
		||||
          items:
 | 
			
		||||
            type: string
 | 
			
		||||
    #____________________________#
 | 
			
		||||
 | 
			
		||||
    game:
 | 
			
		||||
      type: object
 | 
			
		||||
      description: "Main game data, should be queried once"
 | 
			
		||||
      properties:
 | 
			
		||||
        npcs:
 | 
			
		||||
          type: object
 | 
			
		||||
          description: "List of the randomly chosen npc, with their answer for each type of questions"
 | 
			
		||||
          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: "Question identified by their type, randomly chosen by the server"
 | 
			
		||||
          properties:
 | 
			
		||||
            "QA_0":
 | 
			
		||||
              type: string
 | 
			
		||||
              description: "'Where?' type question"
 | 
			
		||||
            "QA_1":
 | 
			
		||||
              type: string
 | 
			
		||||
              description: "'With who?' type question"
 | 
			
		||||
        rooms:
 | 
			
		||||
          type: object
 | 
			
		||||
          description: "object storing the virtual rooms that holds the npcs"
 | 
			
		||||
          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: "List of available traits on in this game session"
 | 
			
		||||
          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"
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -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")
 | 
			
		||||
 | 
			
		||||
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
		Loading…
	
		Reference in New Issue
	
	Block a user