openapi: 3.0.3
info:
  title: MyInpulse Backend Api
  description: this document servers as a documentation for the backend api.  
  version: 0.0.0

tags:
  - name: Entrepreneurs API
    description: La partie de l'api dédiée aux entrepreneurs
  - name: Admin API
    description: La partie de l'api dédiée aux entrepreneurs
  - name: Shared API
    description: La partie de l'api dédiée aux entrepreneurs et admins


components:
  schemas:
    user:
      type: object
      properties:
        nom:
          type: string
        prenom:
          type: string
        email:
          type: string
          example: "example@exmaple.com"
        secondaryEmail:
          type: string
          example: "example@exmaple.com"
        tel:
          type: string
          example: "0612345678"
    user-entrepreneur:
      type: object
      properties:
        user:
          $ref: "#/components/schemas/user"
        entrepreneur:
          type: object
          properties:
            ecole: 
              type: string
              example: "enseirb"
            filiere:
              type: string
              example: "info"
            status:
              type: boolean
              example: false
    user-admin:
      type: object
      properties:
        admin:
          $ref: "#/components/schemas/user"

  securitySchemes:
      MyINPulse:
        type: oauth2
        flows:
          implicit:
            authorizationUrl: https://petstore3.swagger.io/oauth/authorize
            scopes:
              MyINPulse-admin: Administrateur
              MyINPulse-entrepreneur: Utilisateur

paths:

#          _    ____  __  __ ___ _   _      _    ____ ___ 
#         / \  |  _ \|  \/  |_ _| \ | |    / \  |  _ \_ _|
#        / _ \ | | | | |\/| || ||  \| |   / _ \ | |_) | | 
#       / ___ \| |_| | |  | || || |\  |  / ___ \|  __/| | 
#      /_/   \_\____/|_|  |_|___|_| \_| /_/   \_\_|  |___|
#

  /admin/projects:
    get:
      summary: Retourne la liste of projets associés à l'admin
      tags: 
        - Admin API 
      security:
        - MyINPulse:
            - MyINPulse-admin
      description:
        JSON array of who's elements are objects containing necessary information for the view 
        (project name, entrepreneur names, etc..)
        of the projects an admin is watching over.
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
                  properties:
                    name:
                      type: string
                    E_names:
                      type: string
                      description: entrepreneur names
        "400":
          description: Bad request
        "401":
          description: Authorization information is missing or invalid
  /admin/projects/pending/decision:
    post:
      summary: valider un projet en attente de validation
      tags:
        - Admin API
      description:
        if the request is accepted the status of the
        project is changed to ongoing, entrepreneur
        account is confirmed and the project is linked
        to the admin accepting the request and the
        entrepreneur requesting it. Else the pending
        project and user info are deleted.
      security:
          - MyINPulse:
              - MyINPulse-admin
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                pedingProjectId: 
                  type: integer
                decision:
                  type: boolean
                
      responses:
        "200": 
          description: OK
        "400":
          description: Bad request
        "401":
          description: Authorization information is
            missing or invalid
            
  /admin/projects/add:
    post:
      summary: Ajout manuel d'un projet
      description:
        Adds a project with the
        inputed details
      tags:
        - Admin API
      security:
          - MyINPulse:
              - MyINPulse-admin
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                founder:
                  $ref: "#/components/schemas/user-entrepreneur"
                
      responses:
        "200": 
          description: OK
        "400":
          description: Bad request
        "401":
          description: Authorization information is
            missing or invalid
  
  /admin/appointments/report/{appointmentId}:
    put:
      summary: enregistrer un rapport du rendez-vous
      description:
        Generate a PDF file formatted 
        from input text and links it 
        to the appointement.
      tags:
        - Admin API
      security:
        - MyINPulse:
          - MyINPulse-admin
      parameters:
        - in: path
          name: appointmentId
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                title:
                  type: string
                body:
                  type: string
                conclusion:
                  type: string
        
      responses:
        "200": 
          description: OK
        "400":
          description: Bad request
        "401":
          description: Authorization information is
                    missing or invalid
    post:
      summary: modifier un rapport déja éxistant du rendez-vous
      description:
        Modifies the report file to input 
        text and links it to the appointement.
      tags:
        - Admin API
      security:
        - MyINPulse:
          - MyINPulse-admin
      parameters:
        - in: path
          name: appointmentId
          required: true
          schema:
            type: integer
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                title:
                  type: string
                body:
                  type: string
                conclusion:
                  type: string
        
      responses:
        "200": 
          description: OK
        "400":
          description: Bad request
        "401":
          description: Authorization information is
                    missing or invalid


  /admin/projects/remove/{projectId}:
    delete:
      summary: supression d'un project
      description:
        Removes the project
        with the inputed id projectId
      tags:
        - Admin API
      security:
          - MyINPulse:
              - MyINPulse-admin
      parameters:
        - in: path
          name: projectId
          required: true
          schema:
            type: integer
          
      responses:
        "200": 
          description: OK
        "400":
          description: Bad request
        "401":
          description: Authorization information is
            missing or invalid
     

  /admin/projects/pending:
    get:
      summary: Retourne la liste des projets en attente de validation
      tags: 
        - Admin API
      security:
        - MyINPulse:
            - MyINPulse-admin
      description:
        JSON array of who's elements are objects containing
        necessary information for the view (project name,
        entrepreneur names, etc..) of all pending projects.
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
                  properties:
                    name:
                      type: string
                    founder:
                      $ref: "#/components/schemas/user-entrepreneur"
        "400":
          description: Bad request
        "401":
          description: Authorization information is missing or invalid

#
#       ____  _                        _      _    ____ ___ 
#      / ___|| |__   __ _ _ __ ___  __| |    / \  |  _ \_ _|
#      \___ \| '_ \ / _` | '__/ _ \/ _` |   / _ \ | |_) | | 
#       ___) | | | | (_| | | |  __/ (_| |  / ___ \|  __/| | 
#      |____/|_| |_|\__,_|_|  \___|\__,_| /_/   \_\_|  |___|
#                   

  /shared/appointments/upcoming:
    get:
      summary: Retourne la list des prochains rendez-vous de l'utilisateur
      tags: 
        - Shared API
      security:
        - MyINPulse:
            - MyINPulse-admin
            - MyINPulse-entrepreneur
      description:
        JSON array of upcoming appointment data (name, date, time etc..) for a user.
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
                  properties:
                    name:
                      type: string
                    date:
                      type: string
                    time:
                      type: string
        "400":
          description: Bad request
        "401":
          description: Authorization information is missing or invalid        

  /shared/projects/lcsection/{projectId}/{title}/{date}:
      get:
        summary: Retourne la liste de sections de LC avec un titre donné
        tags: 
          - Shared API
        security:
        - MyINPulse:
            - MyINPulse-admin
            - MyINPulse-entrepreneur
        description:
          JSON array containing Lean Canvas 
          section data with a title for the
          current date (or given date if the
          date parameter is passed)
        parameters:
          - in: path
            required: true
            name: projectId
            schema:
              type: integer
          - in: path
            required: true
            description: this number can be 1, 2,...,8. It is associated with the title of the lcsection
            name: title
            schema:
              type: integer
              enum: [1, 2, 3, 4, 5, 6, 7, 8] 
            
          - in: path
            required: true
            name: date
            description: the date corresponding to the wanted version of lc section. "Nan" for the latest version
            example: "NaN"
            schema:
              type: string
              
        responses:
          "200":
            description: OK
            content:
              application/json:
                schema:
                  type: array
                  items:
                    type: object
                    properties:
                      section:
                        type: string
                      txt:
                        type: string
                      time:
                        type: string
          "400":
            description: Bad request
          "401":
            description: Authorization information is missing or invalid
  
  /shared/projects/entrepreneurs/{projectId}:
    get:
      summary: Retourne la liste d'entrepreneurs associée à un projet donné
      tags: 
          - Shared API
      security:
        - MyINPulse:
            - MyINPulse-admin
            - MyINPulse-entrepreneur
      description:
        JSON array of entrepreneur
        names associated with a project
      parameters:
          - in: path
            name: projectId
            schema:
              type: integer
            required: true
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: "#/components/schemas/user-entrepreneur"
        "400":
          description: Bad request
        "401":
          description: Authorization information is missing or invalid
  
  /shared/projects/admin/{projectId}:
    get:
      summary: Retourne les informations de l'admin qui accompagne le projet
      tags: 
          - Shared API
      security:
        - MyINPulse:
            - MyINPulse-admin
            - MyINPulse-entrepreneur
      description: 
        JSON object containing information (name, gmail, tel, etc..) 
        the admin supervising the project with id projectID.
      parameters:
            - in: path
              name: projectId
              schema:
                type: integer
              required: true
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/user-admin"
        "400":
          description: Bad request
        "401":
          description: Authorization information is
            missing or invalid
  
  /shared/projects/appointments/{projectId}:
    get:
      summary: Retourne les rendez-vous du projet 
      tags: 
          - Shared API
      security:
        - MyINPulse:
            - MyINPulse-admin
            - MyINPulse-entrepreneur
      description: 
        JSON array of upcoming and past appointment 
        data for the project with id projectID.
      parameters:
        - in: path
          name: projectId
          schema:
            type: integer
          required: true
      responses:
        "200":
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  type: object
                  properties:
                    appointementId:
                      type: integer
                    name: 
                      type: string
                    date: 
                      type: string
                    time: 
                      type: string
        "400":
          description: Bad request
        "401":
          description: Authorization information is
            missing or invalid
  /shared/projects/appointments/report/{apointementId}:
    get:
      summary: Retourne le rapport pdf du rendez-vous
      tags: 
          - Shared API
      security:
        - MyINPulse:
            - MyINPulse-admin
            - MyINPulse-entrepreneur
      description:
        PDF file containing the ap-
        pointment report
      parameters:
        - in: path
          name: apointementId
          schema:
            type: integer
          required: true
      responses:
        "200":
          description: OK
          content:
            application/pdf:
              schema:
                type: string
                format: binary
        "400":
          description: Bad request
        "401":
          description: Authorization information is
            missing or invalid
  
  /shared/appointments/request:
    post:
      summary: demander un rendez-vous
      description:
        will add an appointement request request by the applicant 
        to have an appointment to be confirmed or denied by the
        specified participants of the appointement.
      tags:
        - Shared API
      security:
        - MyINPulse:
          - MyINPulse-entrepreneur
          - MyINPulse-admin
      requestBody:
        description: \"participants\" property is an array containing userids of the participants in the appointement
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                title:
                  type: string
                start_time:
                  type: string
                end_time:
                  type: string
                place:
                  type: string
                applicantId:
                  type: integer
                participants:
                  #/* */
                  type: array
                  items:
                    type: integer
                    
      responses:
        "200": 
          description: OK
        "400":
          description: Bad request
        "401":
          description: Authorization information is
                    missing or invalid        
  


#      _____ _   _ _____ ____  _____ ____  ____  _____ _   _ _____ _   _ ____  
#     | ____| \ | |_   _|  _ \| ____|  _ \|  _ \| ____| \ | | ____| | | |  _ \ 
#     |  _| |  \| | | | | |_) |  _| | |_) | |_) |  _| |  \| |  _| | | | | |_) |
#     | |___| |\  | | | |  _ <| |___|  __/|  _ <| |___| |\  | |___| |_| |  _ < 
#     |_____|_|_\_| |_| |_| \_\_____|_|   |_| \_\_____|_| \_|_____|\___/|_| \_\
#        / \  |  _ \_ _|                                                       
#       / _ \ | |_) | |                                                        
#      / ___ \|  __/| |                                                        
#     /_/   \_\_|  |___|                                                       
#

                    
  /entrepreneur/projects/request:
    post:
      summary: demander la création et validation d'un projet
      tags:
        - Entrepreneurs API
      description: 
        Adds project to pending projects 
        to then be accepted or rejected by
        an admin
      security:
        - MyINPulse:
          - MyINPulse-entrepreneur
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                name:
                  type: string
                founder:
                  $ref: "#/components/schemas/user-entrepreneur"
      responses:
        "200": 
          description: OK
        "400":
          description: Bad request
        "401":
          description: Authorization information is
            missing or invalid
            
           
  /entrepreneur/lcsection/add/{projectId}:
    post:
      summary: ajouter une sections au LC
      description: 
        Adds input data to the user's LC 
        with a specified title.
      tags:
       - Entrepreneurs API
      security:
        - MyINPulse:
          - MyINPulse-entrepreneur
      parameters:
        - in: path
          name: projectId
          schema:
            type: integer
          required: true
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                title:
                  type: string
                txt:
                  type: string
      responses:
        "200": 
          description: OK
        "400":
          description: Bad request
        "401":
          description: Authorization information is
            missing or invalid
  /entrepreneur/lcsection/modify/{sectionId}:
    put:
      summary: modifier les données d'une section LC
      description: 
        Modifies input Lean Canvas section by changing it to 
        the information in the request body and changes the
        time stamp.
      tags:
       - Entrepreneurs API
      security:
        - MyINPulse:
          - MyINPulse-entrepreneur
      parameters:
        - in: path
          name: sectionId
          schema:
            type: integer
          required: true
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                title:
                  type: string
                txt:
                  type: string
      responses:
        "200": 
          description: OK
        "400":
          description: Bad request
        "401":
          description: Authorization information is
            missing or invalid
            
  /entrepreneur/lcsection/remove/{sectionId}:
    delete:
      summary: supprimer une section LC.
      description:
        Deletes section from Lean Canvas
      tags:
        - Entrepreneurs API
      security:
        - MyINPulse:
          - MyINPulse-entrepreneur
      parameters:
        - in: path
          name: sectionId
          schema:
            type: integer
          required: true
      responses:
        "200": 
          description: OK
        "400":
          description: Bad request
        "401":
          description: Authorization information is
                      missing or invalid