# Warning: this file has been automatically generated. All manual modifications will be lost, see README.md for details. openapi: 3.0.0 info: title: Mieux Voter description: A poll application based on Majority Judgment. version: 1.0.1-oas3 termsOfService: 'https://github.com/MieuxVoter' contact: name: Mieux Voter app developpers team email: app@mieuxvoter.fr servers: - url: 'https://api.mieuxvoter.fr/v1' description: Main (production) server - url: 'https://sandboxapi.mieuxvoter.fr/v1' description: Internal staging server for testing paths: /polls: get: operationId: get-polls summary: Gets all polls. responses: '200': description: OK content: application/json: schema: type: array items: $ref: '#/components/schemas/poll' post: operationId: create-poll summary: Creates a poll. requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/poll' responses: '201': description: Created content: application/json: schema: type: object properties: id: type: string description: Id of the created poll. links: get-poll: $ref: '#/components/links/get-poll' update-poll: $ref: '#/components/links/update-poll' delete-poll: $ref: '#/components/links/delete-poll' create-ballot: $ref: '#/components/links/create-ballot' list-poll-results: $ref: '#/components/links/list-poll-results' '400': description: Bad Request. Expect at least 2 candidates and a title. '/polls/{poll-id}': parameters: - in: path name: poll-id required: true schema: type: integer format: int64 get: operationId: get-poll summary: Gets a poll by ID responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/poll' '404': $ref: '#/components/responses/poll-not-found' patch: operationId: update-poll summary: Updates a poll requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/poll' security: - {} - pollAuth: [] responses: '200': description: OK content: application/json: schema: type: array items: $ref: '#/components/schemas/poll' delete: operationId: delete-poll summary: Deletes a poll responses: '200': description: OK '404': $ref: '#/components/responses/poll-not-found' security: - pollAuth: [] '/polls/{poll-id}/ballots': parameters: - in: path name: poll-id required: true schema: type: string post: operationId: create-ballot summary: Creates a ballot requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ballot' security: - {} - participantAuth: [] responses: '201': description: Created content: application/json: schema: type: object properties: id: type: string description: Id of the created ballot. links: get-ballot: $ref: '#/components/links/get-ballot' delete-ballot: $ref: '#/components/links/delete-ballot' '/polls/{poll-id}/ballots/{ballot-id}': parameters: - in: path name: poll-id required: true schema: type: string - in: path name: ballot-id required: true schema: type: string get: operationId: get-ballot summary: Gets a ballot by ID responses: '200': description: A ballot object content: application/json: schema: $ref: '#/components/schemas/ballot' delete: operationId: delete-ballot summary: Deletes a ballot responses: '200': description: OK '404': $ref: '#/components/responses/ballot-not-found' security: - participantAuth: [] '/polls/{poll-id}/participants': parameters: - in: path name: poll-id required: true schema: type: string post: operationId: add-participant-to-poll description: Add a participant to a poll requestBody: content: application/json: schema: $ref: '#/components/schemas/participant' responses: '200': description: Invitation was sent content: text/plain: schema: type: string '404': $ref: '#/components/responses/poll-not-found' '/polls/{poll-id}/participants/{participant-id}/': parameters: - in: path name: participant-id required: true schema: type: string get: operationId: get-poll-participant summary: Get a participant from a poll responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/participant' '404': $ref: '#/components/responses/participant-not-found' security: - {} - pollAuth: [] delete: operationId: delete-poll-participant summary: Delete a participant from a poll responses: '200': description: OK '404': $ref: '#/components/responses/participant-not-found' security: - pollAuth: [] '/polls/{poll-id}/results': parameters: - in: path name: poll-id required: true schema: type: string get: operationId: get-poll-results description: Get results of a poll responses: '200': description: OK content: text/plain: schema: $ref: '#/components/schemas/result' '404': $ref: '#/components/responses/poll-not-found' components: securitySchemes: participantAuth: type: http scheme: bearer pollAuth: type: http scheme: bearer resultAuth: type: http scheme: bearer schemas: ballot: type: object properties: id: type: integer description: A unique identifier example: 4 readOnly: true mention: type: integer description: >- The mention item, according to the mentions array defined when creating the poll. example: 2 candidate: type: object properties: id: type: integer description: A unique identifier. readOnly: true example: 4 name: type: string description: Unique but short name of the candidate. example: A new school ballots: type: array description: The ballots received by this candidate. items: $ref: '#/components/schemas/ballot' mention: type: object properties: id: type: integer description: A unique identifier example: 0 readOnly: true name: type: string description: >- Unique but short name of the mention, like "Excellent" or "To reject". example: Excellent participant: type: object properties: id: type: string description: A unique identifier example: JtRm05yjMAuFCI2uwnFp readOnly: true has-participed: type: boolean description: >- True if the participant already participed to the poll, False otherwise example: true poll-id: type: string description: The identifier of the poll that the participant participates on. example: 1jDe1e5eF_IkaYPuoIYX mail: type: object description: >- The mail that will eventually created at the creation of the participant (not kept in memory). example: john-doe@example.com poll: type: object properties: id: type: string description: A unique identifier example: 1jDe1e5eF_IkaYPuoIYX readOnly: true title: type: string example: What project should our neighbourhood invest in for the next year? description: The title of the poll candidates: type: array description: The candidates being voted in a poll. minItems: 2 maxItems: 20 items: $ref: '#/components/schemas/candidate' mentions: type: array description: The mentions on which one vote to a candidate. minItems: 2 maxItems: 10 items: $ref: '#/components/schemas/mention' participants: type: array description: The participants that are allowed to participate to the election. items: $ref: '#/components/schemas/participant' restrict_participants: type: boolean description: 'True if anyone can participate to this poll, False otherwise.' example: false error: type: object properties: code: type: string description: The HTTP code of the response example: 404 message: type: string description: The response details example: The specified participant was not found required: - code - message result: type: object properties: poll: $ref: '#/components/schemas/poll' ranking: type: array description: >- An array representing mentions level for each candidate, according to the mentions list, following the order of the candidates array defined when the related poll has been created. example: - 0 - 6 - 3 - 2 - 2 minItems: 2 maxItems: 20 items: type: integer format: int16 links: get-poll: operationId: get-poll parameters: pollId: $response.body#/id description: > The `id` value returned in the response can be used as the `poll-id` parameter in GET /polls/{poll-id}. update-poll: operationId: update-poll parameters: pollId: $response.body#/id description: > The `id` value returned in the response can be used as the `poll-id` parameter in PATCH /polls/{poll-id}. delete-poll: operationId: delete-poll parameters: pollId: $response.body#/id description: > The `id` value returned in the response can be used as the `poll-id` parameter in DELETE /polls/{poll-id}. create-ballot: operationId: create-ballot parameters: userId: $response.body#/id description: > The `id` value returned in the response can be used as the `poll-id` parameter in POST /polls/{poll-id}/ballots. list-poll-results: operationId: list-poll-results parameters: pollId: $response.body#/id description: > The `id` value returned in the response can be used as the `poll-id` parameter in GET /polls/{poll-id}/results. get-ballot: operationId: get-ballot parameters: ballotId: $response.body#/id description: > The `id` value returned in the response can be used as the `ballot-id` parameter in GET /polls/{poll-id}/ballots/{ballot-id}. delete-ballot: operationId: delete-ballot parameters: ballotId: $response.body#/id description: > The `id` value returned in the response can be used as the `ballot-id` parameter in DELETE /polls/{poll-id}/ballots/{ballot-id}. responses: poll-not-found: description: The specified poll was not found content: application/json: schema: $ref: '#/components/schemas/error' ballot-not-found: description: The specified ballot was not found content: application/json: schema: $ref: '#/components/schemas/error' participant-not-found: description: The specified participant was not found content: application/json: schema: $ref: '#/components/schemas/error'