You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
473 lines
13 KiB
473 lines
13 KiB
# 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:
|
|
- {}
|
|
- judgeAuth: []
|
|
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:
|
|
- judgeAuth: []
|
|
'/polls/{poll-id}/judges':
|
|
parameters:
|
|
- in: path
|
|
name: poll-id
|
|
required: true
|
|
schema:
|
|
type: string
|
|
post:
|
|
operationId: add-judge-to-poll
|
|
description: Add a judge to a poll
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/judge'
|
|
responses:
|
|
'200':
|
|
description: Invitation was sent
|
|
content:
|
|
text/plain:
|
|
schema:
|
|
type: string
|
|
'404':
|
|
$ref: '#/components/responses/poll-not-found'
|
|
'/polls/{poll-id}/judges/{judge-id}/':
|
|
parameters:
|
|
- in: path
|
|
name: judge-id
|
|
required: true
|
|
schema:
|
|
type: string
|
|
get:
|
|
operationId: get-poll-judge
|
|
summary: Get a judge from a poll
|
|
responses:
|
|
'200':
|
|
description: OK
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/judge'
|
|
'404':
|
|
$ref: '#/components/responses/judge-not-found'
|
|
security:
|
|
- {}
|
|
- pollAuth: []
|
|
delete:
|
|
operationId: delete-poll-judge
|
|
summary: Delete a judge from a poll
|
|
responses:
|
|
'200':
|
|
description: OK
|
|
'404':
|
|
$ref: '#/components/responses/judge-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:
|
|
judgeAuth:
|
|
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
|
|
grade:
|
|
type: integer
|
|
description: >-
|
|
The grade item, according to the grades 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'
|
|
grade:
|
|
type: object
|
|
properties:
|
|
id:
|
|
type: integer
|
|
description: A unique identifier
|
|
example: 0
|
|
readOnly: true
|
|
name:
|
|
type: string
|
|
description: 'Unique but short name of the grade, like "Excellent" or "To reject".'
|
|
example: Excellent
|
|
judge:
|
|
type: object
|
|
properties:
|
|
id:
|
|
type: string
|
|
description: A unique identifier
|
|
example: JtRm05yjMAuFCI2uwnFp
|
|
readOnly: true
|
|
has-voted:
|
|
type: boolean
|
|
description: 'True if the judge already voted on the poll, False otherwise'
|
|
example: true
|
|
poll-id:
|
|
type: string
|
|
description: The identifier of the poll that the judge participates on.
|
|
example: 1jDe1e5eF_IkaYPuoIYX
|
|
mail:
|
|
type: object
|
|
description: >-
|
|
The mail that will eventually created at the creation of the judge
|
|
(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 judged in a poll.
|
|
minItems: 2
|
|
maxItems: 20
|
|
items:
|
|
$ref: '#/components/schemas/candidate'
|
|
grades:
|
|
type: array
|
|
description: The grades on which one judges a candidate.
|
|
minItems: 2
|
|
maxItems: 10
|
|
items:
|
|
$ref: '#/components/schemas/grade'
|
|
judges:
|
|
type: array
|
|
description: The judges that are allowed to participate to the election.
|
|
items:
|
|
$ref: '#/components/schemas/judge'
|
|
restrict_judges:
|
|
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 judge was not found
|
|
required:
|
|
- code
|
|
- message
|
|
result:
|
|
type: object
|
|
properties:
|
|
poll:
|
|
$ref: '#/components/schemas/poll'
|
|
ranking:
|
|
type: array
|
|
description: >-
|
|
An array representing grades level for each candidate, according to
|
|
the grades 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'
|
|
judge-not-found:
|
|
description: The specified judge was not found
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/error'
|