2345 lines
60 KiB
YAML
2345 lines
60 KiB
YAML
openapi: 3.0.2
|
|
info:
|
|
version: ''
|
|
title: 'DC Project'
|
|
description: 'A free community program for create constitution'
|
|
|
|
paths:
|
|
/articles:
|
|
get:
|
|
summary: Get all articles
|
|
tags:
|
|
- article
|
|
operationId: getArticles
|
|
parameters:
|
|
- $ref: '#/components/parameters/page'
|
|
- $ref: '#/components/parameters/limit'
|
|
- $ref: '#/components/parameters/articleSort'
|
|
- $ref: '#/components/parameters/direction'
|
|
- $ref: '#/components/parameters/search'
|
|
- $ref: '#/components/parameters/createdBy'
|
|
- name: workgroup
|
|
in: query
|
|
description: ID of workgroup
|
|
example: 82a0e60a-bb55-dbc0-1c3d-0a804df2b5df
|
|
required: false
|
|
schema:
|
|
type: string
|
|
format: uuid
|
|
responses:
|
|
200:
|
|
description: The Article objects
|
|
content:
|
|
application/json:
|
|
schema:
|
|
allOf:
|
|
- $ref: '#/components/schemas/Paginated'
|
|
- type: object
|
|
properties:
|
|
result:
|
|
type: array
|
|
maxItems: 50
|
|
items:
|
|
$ref: '#/components/schemas/ArticleListingResponse'
|
|
400:
|
|
description: BadReqest
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/400'
|
|
post:
|
|
security:
|
|
- JWTAuth: []
|
|
summary: Create new Article
|
|
tags:
|
|
- article
|
|
operationId: insertArticle
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
required:
|
|
- title
|
|
- content
|
|
- description
|
|
- tags
|
|
properties:
|
|
title:
|
|
type: string
|
|
example:
|
|
Limit power of press
|
|
content:
|
|
type: string
|
|
minLength: 50
|
|
maxLength: 6000
|
|
example:
|
|
Lorem upsum...
|
|
description:
|
|
type: string
|
|
minLength: 50
|
|
maxLength: 6000
|
|
example:
|
|
I think is the bether choice
|
|
tags:
|
|
type: array
|
|
items:
|
|
type: string
|
|
maxItems: 15
|
|
default: [ ]
|
|
example: [ power, press ]
|
|
anonymous:
|
|
type: boolean
|
|
default: true
|
|
draft:
|
|
type: boolean
|
|
default: false
|
|
workgroup:
|
|
default: null
|
|
additionalProperties: false
|
|
required:
|
|
- id
|
|
properties:
|
|
id:
|
|
$ref: "#/components/schemas/UUID"
|
|
responses:
|
|
200:
|
|
description: Article created
|
|
content:
|
|
application/json:
|
|
schema:
|
|
properties:
|
|
id:
|
|
type: string
|
|
format: uuid
|
|
versionId:
|
|
type: string
|
|
format: uuid
|
|
versionNumber:
|
|
type: integer
|
|
400:
|
|
description: BadReqest
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/400'
|
|
401:
|
|
$ref: '#/components/responses/401'
|
|
403:
|
|
description: Forbiden
|
|
content:
|
|
application/json:
|
|
schema:
|
|
description: Forbiden
|
|
properties:
|
|
statusCode:
|
|
type: integer
|
|
title:
|
|
type: string
|
|
|
|
/articles/{article}:
|
|
parameters:
|
|
- $ref: '#/components/parameters/article'
|
|
get:
|
|
summary: Get one article
|
|
tags:
|
|
- article
|
|
operationId: getArticle
|
|
parameters:
|
|
- $ref: '#/components/parameters/page'
|
|
- $ref: '#/components/parameters/limit'
|
|
- $ref: '#/components/parameters/sort'
|
|
- $ref: '#/components/parameters/direction'
|
|
- $ref: '#/components/parameters/search'
|
|
responses:
|
|
200:
|
|
description: The Article objects
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ArticleResponse'
|
|
400:
|
|
description: BadReqest
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/400'
|
|
404:
|
|
description: BadReqest
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/404'
|
|
|
|
/articles/{article}/versions:
|
|
parameters:
|
|
- $ref: '#/components/parameters/article'
|
|
get:
|
|
summary: Get all versions of articles
|
|
tags:
|
|
- article
|
|
operationId: getArticleVersions
|
|
parameters:
|
|
- $ref: '#/components/parameters/page'
|
|
- $ref: '#/components/parameters/limit'
|
|
- $ref: '#/components/parameters/sort'
|
|
- $ref: '#/components/parameters/direction'
|
|
- $ref: '#/components/parameters/search'
|
|
responses:
|
|
200:
|
|
description: The versions of Article
|
|
content:
|
|
application/json:
|
|
schema:
|
|
allOf:
|
|
- $ref: '#/components/schemas/Paginated'
|
|
- type: object
|
|
properties:
|
|
result:
|
|
type: array
|
|
items:
|
|
additionalProperties: false
|
|
properties:
|
|
id:
|
|
type: string
|
|
format: uuid
|
|
title:
|
|
type: string
|
|
draft:
|
|
type: boolean
|
|
lastVersion:
|
|
type: boolean
|
|
createdBy:
|
|
type: object
|
|
additionalProperties: false
|
|
properties:
|
|
id:
|
|
type: string
|
|
format: uuid
|
|
name:
|
|
type: object
|
|
properties:
|
|
firstName:
|
|
type: string
|
|
lastName:
|
|
type: string
|
|
email:
|
|
type: string
|
|
workgroup:
|
|
type: object
|
|
nullable: true
|
|
additionalProperties: false
|
|
properties:
|
|
id:
|
|
type: string
|
|
format: uuid
|
|
name:
|
|
type: string
|
|
400:
|
|
description: BadReqest
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/400'
|
|
|
|
/login:
|
|
post:
|
|
summary: sign in
|
|
tags:
|
|
- authentification
|
|
operationId: login
|
|
requestBody:
|
|
description: Login
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
required:
|
|
- username
|
|
- password
|
|
properties:
|
|
username:
|
|
type: string
|
|
description: username
|
|
example:
|
|
john-doe
|
|
password:
|
|
type: string
|
|
description: Pasword
|
|
example:
|
|
azerty
|
|
responses:
|
|
200:
|
|
description: return JWT
|
|
content:
|
|
text/plain:
|
|
schema:
|
|
type: string
|
|
format: byte
|
|
example:
|
|
'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJBdXRoZW50aWNhdGlvbiIsImlzcyI6ImRjLXByb2plY3QuZnIiLCJpZCI6ImQ1NDRhNmE4LWJhYjgtNDU2MC05NWIxLThhZjAyMDNkOTEwNCIsImV4cCI6MTU2NzA3Mzc0Mn0.0VTetv8fZFjVgpJ-bwJpidGNHJUOmgj8vuZcZXzwnLa7TtFwcXWvh3bDPYHqB66nmOfXyM57XnHDbmRwtipCag'
|
|
application/json:
|
|
schema:
|
|
properties:
|
|
token:
|
|
type: string
|
|
example:
|
|
'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJBdXRoZW50aWNhdGlvbiIsImlzcyI6ImRjLXByb2plY3QuZnIiLCJpZCI6ImQ1NDRhNmE4LWJhYjgtNDU2MC05NWIxLThhZjAyMDNkOTEwNCIsImV4cCI6MTU2NzA3Mzc0Mn0.0VTetv8fZFjVgpJ-bwJpidGNHJUOmgj8vuZcZXzwnLa7TtFwcXWvh3bDPYHqB66nmOfXyM57XnHDbmRwtipCag'
|
|
/register:
|
|
post:
|
|
summary: Create account
|
|
tags:
|
|
- authentification
|
|
operationId: register
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: object
|
|
required:
|
|
- name
|
|
- birthday
|
|
- email
|
|
- user
|
|
properties:
|
|
name:
|
|
type: object
|
|
required:
|
|
- firstName
|
|
- lastName
|
|
properties:
|
|
firstName:
|
|
type: string
|
|
example:
|
|
john
|
|
lastName:
|
|
type: string
|
|
example:
|
|
Doe
|
|
birthday:
|
|
type: string
|
|
format: 'date'
|
|
example: '1984-12-25'
|
|
email:
|
|
type: string
|
|
format: email
|
|
example: my.email@dc-project.fr
|
|
user:
|
|
type: object
|
|
required:
|
|
- username
|
|
- password
|
|
properties:
|
|
username:
|
|
type: string
|
|
example:
|
|
john-doe
|
|
password:
|
|
type: string
|
|
example:
|
|
azerty
|
|
format: password
|
|
responses:
|
|
200:
|
|
description: User created and JWT returned
|
|
content:
|
|
text/plain:
|
|
example:
|
|
'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJBdXRoZW50aWNhdGlvbiIsImlzcyI6ImRjLXByb2plY3QuZnIiLCJpZCI6ImQ1NDRhNmE4LWJhYjgtNDU2MC05NWIxLThhZjAyMDNkOTEwNCIsImV4cCI6MTU2NzA3Mzc0Mn0.0VTetv8fZFjVgpJ-bwJpidGNHJUOmgj8vuZcZXzwnLa7TtFwcXWvh3bDPYHqB66nmOfXyM57XnHDbmRwtipCag'
|
|
application/json:
|
|
schema:
|
|
properties:
|
|
token:
|
|
type: string
|
|
example:
|
|
'eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJBdXRoZW50aWNhdGlvbiIsImlzcyI6ImRjLXByb2plY3QuZnIiLCJpZCI6ImQ1NDRhNmE4LWJhYjgtNDU2MC05NWIxLThhZjAyMDNkOTEwNCIsImV4cCI6MTU2NzA3Mzc0Mn0.0VTetv8fZFjVgpJ-bwJpidGNHJUOmgj8vuZcZXzwnLa7TtFwcXWvh3bDPYHqB66nmOfXyM57XnHDbmRwtipCag'
|
|
400:
|
|
description: Bad request
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/400'
|
|
/auth/passwordless:
|
|
post:
|
|
summary: Send a connexion link by email
|
|
description: Send a connexion link by email with the token required to the connexion
|
|
externalDocs:
|
|
description: Explanation of Passwordless auth
|
|
url: https://en.wikipedia.org/wiki/Passwordless_authentication
|
|
tags:
|
|
- authentification
|
|
operationId: passwordless
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
properties:
|
|
email:
|
|
type: string
|
|
format: email
|
|
description: email to send the token
|
|
example:
|
|
my.email@dc-project.fr
|
|
url:
|
|
type: string
|
|
description: url tu redirect with the token
|
|
example:
|
|
http://dc-project.fr/auth/passwordless
|
|
responses:
|
|
204:
|
|
description: email send
|
|
404:
|
|
description: no user with this email
|
|
|
|
/citizens:
|
|
get:
|
|
security:
|
|
- JWTAuth: []
|
|
summary: Get all citizens
|
|
tags:
|
|
- citizen
|
|
operationId: getCitizens
|
|
parameters:
|
|
- $ref: '#/components/parameters/page'
|
|
- $ref: '#/components/parameters/limit'
|
|
- $ref: '#/components/parameters/citizenSort'
|
|
- $ref: '#/components/parameters/direction'
|
|
- $ref: '#/components/parameters/search'
|
|
responses:
|
|
200:
|
|
description: The Citizen objects
|
|
content:
|
|
application/json:
|
|
schema:
|
|
allOf:
|
|
- $ref: '#/components/schemas/Paginated'
|
|
- type: object
|
|
properties:
|
|
result:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/CitizenListResponse'
|
|
400:
|
|
description: BadReqest
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/400'
|
|
401:
|
|
$ref: '#/components/responses/401'
|
|
/citizens/current:
|
|
get:
|
|
security:
|
|
- JWTAuth: []
|
|
summary: Get Citizen
|
|
tags:
|
|
- citizen
|
|
operationId: getCurrentCitizen
|
|
responses:
|
|
200:
|
|
description: The Citizen object
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/CitizenResponse'
|
|
/citizens/{citizen}:
|
|
parameters:
|
|
- $ref: '#/components/parameters/citizen'
|
|
get:
|
|
security:
|
|
- JWTAuth: []
|
|
summary: Get Citizen
|
|
tags:
|
|
- citizen
|
|
operationId: getCitizen
|
|
responses:
|
|
200:
|
|
description: The Citizen object
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/CitizenResponse'
|
|
404:
|
|
description: Citizen not found
|
|
401:
|
|
$ref: '#/components/responses/401'
|
|
/citizens/{citizen}/password/change:
|
|
parameters:
|
|
- $ref: '#/components/parameters/citizen'
|
|
put:
|
|
security:
|
|
- JWTAuth: [ ]
|
|
summary: Change Citizen Password
|
|
tags:
|
|
- citizen
|
|
operationId: changePassword
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
required:
|
|
- oldPassword
|
|
- newPassword
|
|
properties:
|
|
oldPassword:
|
|
type: string
|
|
format: password
|
|
example:
|
|
azerty
|
|
newPassword:
|
|
type: string
|
|
format: password
|
|
example:
|
|
qwerty
|
|
responses:
|
|
201:
|
|
description: Password changed
|
|
400:
|
|
description: Bad request
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/400'
|
|
401:
|
|
$ref: '#/components/responses/401'
|
|
404:
|
|
description: Citizen not found
|
|
|
|
/articles/{article}/comments:
|
|
parameters:
|
|
- $ref: '#/components/parameters/article'
|
|
get:
|
|
summary: Get comments of one article
|
|
tags:
|
|
- comment
|
|
- article
|
|
parameters:
|
|
- $ref: '#/components/parameters/page'
|
|
- $ref: '#/components/parameters/limit'
|
|
- $ref: '#/components/parameters/search'
|
|
- name: sort
|
|
in: query
|
|
required: false
|
|
example:
|
|
- created_at
|
|
- votes
|
|
schema:
|
|
type: string
|
|
default: created_at
|
|
enum:
|
|
- created_at
|
|
- votes
|
|
responses:
|
|
200:
|
|
description: Return paginated comments of article
|
|
content:
|
|
application/json:
|
|
schema:
|
|
allOf:
|
|
- $ref: '#/components/schemas/Paginated'
|
|
- type: object
|
|
properties:
|
|
result:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/CommentResponse'
|
|
400:
|
|
description: BadReqest
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/400'
|
|
post:
|
|
security:
|
|
- JWTAuth: [ ]
|
|
summary: Create Comment to article
|
|
tags:
|
|
- comment
|
|
- article
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: object
|
|
required:
|
|
- content
|
|
properties:
|
|
content:
|
|
type: string
|
|
example:
|
|
Lorem ipsum...
|
|
responses:
|
|
201:
|
|
description: Return created Comment
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/CommentResponse'
|
|
400:
|
|
description: BadReqest
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/400'
|
|
401:
|
|
$ref: '#/components/responses/401'
|
|
/comments/{comment}:
|
|
parameters:
|
|
- $ref: '#/components/parameters/comment'
|
|
get:
|
|
summary: Get Comment by Comment ID
|
|
tags:
|
|
- comment
|
|
responses:
|
|
200:
|
|
description: Return Comment
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/CommentResponse'
|
|
put:
|
|
security:
|
|
- JWTAuth: []
|
|
summary: Edit existing comment
|
|
tags:
|
|
- comment
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
required:
|
|
- content
|
|
properties:
|
|
content:
|
|
type: string
|
|
example:
|
|
Lorem ipsum...
|
|
responses:
|
|
200:
|
|
description: Return updated comment
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/CommentResponse'
|
|
401:
|
|
$ref: '#/components/responses/401'
|
|
/comments/{comment}/children:
|
|
parameters:
|
|
- $ref: '#/components/parameters/comment'
|
|
get:
|
|
summary: Get Comment children by Comment ID
|
|
tags:
|
|
- comment
|
|
responses:
|
|
200:
|
|
description: Return Comment children
|
|
content:
|
|
application/json:
|
|
schema:
|
|
allOf:
|
|
- $ref: '#/components/schemas/Paginated'
|
|
- type: object
|
|
properties:
|
|
result:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/CommentResponse'
|
|
/citizens/{citizen}/comments/articles:
|
|
parameters:
|
|
- $ref: '#/components/parameters/citizen'
|
|
get:
|
|
security:
|
|
- JWTAuth: []
|
|
summary: all article comments for one citizen
|
|
tags:
|
|
- comment
|
|
- article
|
|
- citizen
|
|
responses:
|
|
200:
|
|
description: Comments
|
|
content:
|
|
application/json:
|
|
schema:
|
|
allOf:
|
|
- $ref: '#/components/schemas/Paginated'
|
|
- type: object
|
|
properties:
|
|
result:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/CommentResponse'
|
|
401:
|
|
$ref: '#/components/responses/401'
|
|
/citizens/{citizen}/comments/constitutions:
|
|
parameters:
|
|
- $ref: '#/components/parameters/citizen'
|
|
get:
|
|
security:
|
|
- JWTAuth: []
|
|
summary: all constitution comments for one citizen
|
|
tags:
|
|
- comment
|
|
- constitution
|
|
- citizen
|
|
responses:
|
|
200:
|
|
description: Comments
|
|
content:
|
|
application/json:
|
|
schema:
|
|
allOf:
|
|
- $ref: '#/components/schemas/Paginated'
|
|
- type: object
|
|
properties:
|
|
result:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/CommentResponse'
|
|
401:
|
|
$ref: '#/components/responses/401'
|
|
/constitutions/{constitution}/comments:
|
|
parameters:
|
|
- $ref: '#/components/parameters/constitution'
|
|
get:
|
|
summary: Get comment and children of one constitution
|
|
tags:
|
|
- comment
|
|
- constitution
|
|
responses:
|
|
200:
|
|
description: Return Comment and children
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/CommentResponse'
|
|
post:
|
|
security:
|
|
- JWTAuth: []
|
|
summary: Create Comment to constitution
|
|
tags:
|
|
- comment
|
|
- constitution
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
required:
|
|
- content
|
|
properties:
|
|
content:
|
|
type: string
|
|
example:
|
|
Lorem ipsum...
|
|
responses:
|
|
201:
|
|
description: Return created comment
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/CommentResponse'
|
|
401:
|
|
$ref: '#/components/responses/401'
|
|
|
|
/constitutions:
|
|
get:
|
|
summary: Get all constitutions
|
|
tags:
|
|
- constitution
|
|
operationId: getConstitutions
|
|
parameters:
|
|
- $ref: '#/components/parameters/page'
|
|
- $ref: '#/components/parameters/limit'
|
|
- $ref: '#/components/parameters/sort'
|
|
- $ref: '#/components/parameters/direction'
|
|
- $ref: '#/components/parameters/search'
|
|
responses:
|
|
200:
|
|
description: The Constitution objects
|
|
content:
|
|
application/json:
|
|
schema:
|
|
allOf:
|
|
- $ref: '#/components/schemas/Paginated'
|
|
- type: object
|
|
properties:
|
|
result:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/ConstitutionListingResponse'
|
|
post:
|
|
security:
|
|
- JWTAuth: [ ]
|
|
summary: Create new Constitution
|
|
tags:
|
|
- constitution
|
|
operationId: insertConstitution
|
|
requestBody:
|
|
required: true
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ConstitutionRequest'
|
|
|
|
responses:
|
|
201:
|
|
description: Constitution created
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ConstitutionResponse'
|
|
401:
|
|
$ref: '#/components/responses/401'
|
|
400:
|
|
$ref: '#/components/responses/400'
|
|
/constitutions/{constitution}:
|
|
parameters:
|
|
- $ref: '#/components/parameters/constitution'
|
|
get:
|
|
summary: Get all constitutions
|
|
tags:
|
|
- constitution
|
|
operationId: getConstitutions
|
|
responses:
|
|
200:
|
|
description: The Constitution objects
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/ConstitutionResponse'
|
|
|
|
/articles/{article}/follows:
|
|
parameters:
|
|
- $ref: '#/components/parameters/article'
|
|
get:
|
|
security:
|
|
- JWTAuth: [ ]
|
|
summary: Return Follow or nothing if you not follow
|
|
tags:
|
|
- follow
|
|
- article
|
|
responses:
|
|
200:
|
|
description: Return your follow
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/FollowResponse'
|
|
404:
|
|
description: You not follow this article
|
|
post:
|
|
security:
|
|
- JWTAuth: [ ]
|
|
summary: Follow one article
|
|
tags:
|
|
- follow
|
|
- article
|
|
responses:
|
|
201:
|
|
description: Return only http status 201 on success
|
|
delete:
|
|
security:
|
|
- JWTAuth: [ ]
|
|
summary: Unfollow one article
|
|
tags:
|
|
- follow
|
|
- article
|
|
responses:
|
|
204:
|
|
description: Return only http status 204 on success
|
|
401:
|
|
$ref: '#/components/responses/401'
|
|
/citizens/{citizen}/follows/articles:
|
|
parameters:
|
|
- $ref: '#/components/parameters/citizen'
|
|
get:
|
|
security:
|
|
- JWTAuth: [ ]
|
|
summary: Return Follow or nothing if you not follow
|
|
tags:
|
|
- follow
|
|
- article
|
|
- citizen
|
|
responses:
|
|
200:
|
|
description: Return your follows
|
|
content:
|
|
application/json:
|
|
schema:
|
|
allOf:
|
|
- $ref: '#/components/schemas/Paginated'
|
|
- type: object
|
|
properties:
|
|
result:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/FollowResponse'
|
|
/constitutions/{constitution}/follows:
|
|
parameters:
|
|
- $ref: '#/components/parameters/constitution'
|
|
get:
|
|
security:
|
|
- JWTAuth: [ ]
|
|
summary: Return Follow or nothing if you not follow
|
|
tags:
|
|
- follow
|
|
- constitution
|
|
responses:
|
|
200:
|
|
description: Return your follow
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/FollowResponse'
|
|
404:
|
|
description: You not follow this constitution
|
|
post:
|
|
security:
|
|
- JWTAuth: [ ]
|
|
summary: Follow one constitution
|
|
tags:
|
|
- follow
|
|
- constitution
|
|
responses:
|
|
201:
|
|
description: Return only http status 201 on success
|
|
401:
|
|
$ref: '#/components/responses/401'
|
|
delete:
|
|
security:
|
|
- JWTAuth: [ ]
|
|
summary: Unfollow one constitution
|
|
tags:
|
|
- follow
|
|
- constitution
|
|
responses:
|
|
204:
|
|
description: Return only http status 204 on success
|
|
401:
|
|
$ref: '#/components/responses/401'
|
|
/citizens/{citizen}/follows/constitutions:
|
|
parameters:
|
|
- $ref: '#/components/parameters/citizen'
|
|
get:
|
|
security:
|
|
- JWTAuth: [ ]
|
|
summary: Return Follow or nothing if you not follow
|
|
tags:
|
|
- follow
|
|
- constitution
|
|
- citizen
|
|
responses:
|
|
200:
|
|
description: Return your follows
|
|
content:
|
|
application/json:
|
|
schema:
|
|
allOf:
|
|
- $ref: '#/components/schemas/Paginated'
|
|
- type: object
|
|
properties:
|
|
result:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/FollowResponse'
|
|
|
|
/opinions:
|
|
get:
|
|
summary: Get all opinions choices
|
|
tags:
|
|
- opinion
|
|
parameters:
|
|
- in: query
|
|
required: false
|
|
name: targets
|
|
description: opinion available for defined target
|
|
example:
|
|
- article
|
|
schema:
|
|
type: array
|
|
items:
|
|
type: string
|
|
responses:
|
|
200:
|
|
description: return
|
|
content:
|
|
application/json:
|
|
schema:
|
|
description: Opinion Choice
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/OpinionChoice'
|
|
/opinions/{opinion}:
|
|
parameters:
|
|
- $ref: '#/components/parameters/opinion'
|
|
get:
|
|
summary: Get one opinion Choices
|
|
tags:
|
|
- opinion
|
|
responses:
|
|
200:
|
|
description: return
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/OpinionChoice'
|
|
/citizens/{citizen}/opinions:
|
|
parameters:
|
|
- $ref: '#/components/parameters/citizen'
|
|
get:
|
|
security:
|
|
- JWTAuth: [ ]
|
|
summary: Get all opinions of citizen filtered by target ids
|
|
tags:
|
|
- opinion
|
|
- citizen
|
|
parameters:
|
|
- in: query
|
|
required: true
|
|
name: id
|
|
description: target ids
|
|
example:
|
|
- 9226c1a3-8091-c3fa-7d0d-c2e98c9bee7b
|
|
schema:
|
|
type: array
|
|
items:
|
|
type: string
|
|
format: uuid
|
|
responses:
|
|
200:
|
|
description: Opinions
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/Opinion'
|
|
/citizens/{citizen}/opinions/articles:
|
|
parameters:
|
|
- $ref: '#/components/parameters/citizen'
|
|
get:
|
|
security:
|
|
- JWTAuth: []
|
|
summary: Get all opinions of one citizen
|
|
tags:
|
|
- opinion
|
|
- citizen
|
|
responses:
|
|
200:
|
|
description: Opinions
|
|
content:
|
|
application/json:
|
|
schema:
|
|
allOf:
|
|
- $ref: '#/components/schemas/Paginated'
|
|
- type: object
|
|
properties:
|
|
result:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/Opinion'
|
|
/articles/{article}/opinions:
|
|
parameters:
|
|
- $ref: '#/components/parameters/article'
|
|
put:
|
|
security:
|
|
- JWTAuth: []
|
|
summary: Add Opinion on one article
|
|
tags:
|
|
- opinion
|
|
- article
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: object
|
|
properties:
|
|
ids:
|
|
type: array
|
|
items:
|
|
type: string
|
|
format: uuid
|
|
example: 6e978eb5-3c48-0def-b093-e01f43983adb
|
|
responses:
|
|
201:
|
|
description: Return the opinion
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/Opinion'
|
|
401:
|
|
$ref: '#/components/responses/401'
|
|
|
|
/constitutions/{constitution}/vote:
|
|
parameters:
|
|
- $ref: '#/components/parameters/constitution'
|
|
put:
|
|
security:
|
|
- JWTAuth: [ ]
|
|
summary: Vote for one constitution
|
|
tags:
|
|
- vote
|
|
- constitution
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/VoteRequest'
|
|
responses:
|
|
201:
|
|
description: Return only http status 201 on success
|
|
/citizens/{citizen}/votes:
|
|
parameters:
|
|
- $ref: '#/components/parameters/citizen'
|
|
get:
|
|
security:
|
|
- JWTAuth: [ ]
|
|
summary: Get Citizen
|
|
tags:
|
|
- vote
|
|
- citizen
|
|
operationId: getCitizenVotes
|
|
parameters:
|
|
- name: id
|
|
in: query
|
|
required: true
|
|
example:
|
|
- 1329ab90-edae-cfed-f863-c8cb069fa327
|
|
- cab54e50-ce85-bba0-da23-fc9f75feeaf5
|
|
schema:
|
|
type: array
|
|
items:
|
|
type: string
|
|
format: uuid
|
|
responses:
|
|
200:
|
|
description: The Votes objects
|
|
content:
|
|
application/json:
|
|
schema:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/VoteResponse'
|
|
404:
|
|
description: Citizen not found
|
|
401:
|
|
$ref: '#/components/responses/401'
|
|
/comments/{comment}/vote:
|
|
parameters:
|
|
- $ref: '#/components/parameters/comment'
|
|
put:
|
|
security:
|
|
- JWTAuth: []
|
|
summary: Vote for a comment
|
|
tags:
|
|
- vote
|
|
- comment
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/VoteRequest'
|
|
responses:
|
|
201:
|
|
description: Return votes aggregation
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/VoteAggregation'
|
|
401:
|
|
$ref: '#/components/responses/401'
|
|
/citizens/{citizen}/votes/articles:
|
|
parameters:
|
|
- $ref: '#/components/parameters/citizen'
|
|
get:
|
|
security:
|
|
- JWTAuth: [ ]
|
|
summary: all article vote for one citizen
|
|
tags:
|
|
- vote
|
|
- article
|
|
- citizen
|
|
responses:
|
|
200:
|
|
description: Votes
|
|
content:
|
|
application/json:
|
|
schema:
|
|
allOf:
|
|
- $ref: '#/components/schemas/Paginated'
|
|
- type: object
|
|
properties:
|
|
result:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/VoteResponse'
|
|
401:
|
|
$ref: '#/components/responses/401'
|
|
/articles/{article}/vote:
|
|
parameters:
|
|
- $ref: '#/components/parameters/article'
|
|
put:
|
|
security:
|
|
- JWTAuth: [ ]
|
|
summary: Vote for one article
|
|
tags:
|
|
- vote
|
|
- article
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/VoteRequest'
|
|
responses:
|
|
201:
|
|
description: Return only http status 201 on success
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/VoteAggregation'
|
|
401:
|
|
$ref: '#/components/responses/401'
|
|
|
|
/workgroups:
|
|
get:
|
|
summary: Get all Workgroup (Paginated)
|
|
tags:
|
|
- workgroup
|
|
parameters:
|
|
- $ref: '#/components/parameters/page'
|
|
- $ref: '#/components/parameters/limit'
|
|
- $ref: '#/components/parameters/workgroupSort'
|
|
- $ref: '#/components/parameters/direction'
|
|
- $ref: '#/components/parameters/search'
|
|
- $ref: '#/components/parameters/createdBy'
|
|
responses:
|
|
200:
|
|
description: paginated list of workgroup
|
|
content:
|
|
application/json:
|
|
schema:
|
|
allOf:
|
|
- $ref: '#/components/schemas/Paginated'
|
|
- type: object
|
|
properties:
|
|
result:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/WorkgroupListing'
|
|
post:
|
|
summary: Create new Workgroup
|
|
security:
|
|
- JWTAuth: [ ]
|
|
tags:
|
|
- workgroup
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
required:
|
|
- name
|
|
properties:
|
|
id:
|
|
type: string
|
|
format: uuid
|
|
nullable: true
|
|
name:
|
|
type: string
|
|
example: Les partisants du RIC
|
|
description:
|
|
type: string
|
|
example: Group formé pour la conception d'un RIC
|
|
logo:
|
|
type: string
|
|
nullable: true
|
|
anonymous:
|
|
type: boolean
|
|
example: false
|
|
nullable: true
|
|
default: true
|
|
responses:
|
|
201:
|
|
description: Workgroup created
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/Workgroup'
|
|
/workgroups/{workgroup}:
|
|
parameters:
|
|
- $ref: '#/components/parameters/workgroup'
|
|
get:
|
|
summary: Get one workgroup by ID
|
|
tags:
|
|
- workgroup
|
|
responses:
|
|
200:
|
|
description: Workgroup
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/Workgroup'
|
|
404:
|
|
description: Workshop not exist or are deleted
|
|
put:
|
|
summary: Edit one workgroup
|
|
security:
|
|
- JWTAuth: [ ]
|
|
tags:
|
|
- workgroup
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
properties:
|
|
name:
|
|
type: string
|
|
example: Les partisants du RIC
|
|
description:
|
|
type: string
|
|
example: Group formé pour la conception d'un RIC
|
|
logo:
|
|
type: string
|
|
nullable: true
|
|
anonymous:
|
|
type: boolean
|
|
example: false
|
|
nullable: true
|
|
default: true
|
|
responses:
|
|
200:
|
|
description: Workgroup updated
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/Workgroup'
|
|
delete:
|
|
summary: Delete one workgroup
|
|
security:
|
|
- JWTAuth: [ ]
|
|
tags:
|
|
- workgroup
|
|
responses:
|
|
204:
|
|
description: Workgroup deleted
|
|
404:
|
|
description: Workshop not exist or are already deleted
|
|
/workgroups/{workgroup}/members:
|
|
parameters:
|
|
- $ref: '#/components/parameters/workgroup'
|
|
post:
|
|
summary: Add members to the workgroup
|
|
security:
|
|
- JWTAuth: []
|
|
tags:
|
|
- workgroup
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/MembersRequest'
|
|
responses:
|
|
201:
|
|
description: the list of members
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/MembersResponse'
|
|
put:
|
|
summary: Updates ALL members.
|
|
description: ⚠ PLEASE NOTE ⚠ This request removes all members who are not in request!
|
|
security:
|
|
- JWTAuth: []
|
|
tags:
|
|
- workgroup
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/MembersRequest'
|
|
responses:
|
|
200:
|
|
description: the list of members
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/MembersResponse'
|
|
400:
|
|
$ref: '#/components/responses/400'
|
|
delete:
|
|
summary: Delete members of workgroup
|
|
security:
|
|
- JWTAuth: []
|
|
tags:
|
|
- workgroup
|
|
requestBody:
|
|
content:
|
|
application/json:
|
|
schema:
|
|
description: members of workgroup
|
|
type: array
|
|
items:
|
|
type: object
|
|
properties:
|
|
citizen:
|
|
required:
|
|
- id
|
|
properties:
|
|
id:
|
|
$ref: '#/components/schemas/UUID'
|
|
responses:
|
|
200:
|
|
description: the list of members
|
|
content:
|
|
application/json:
|
|
schema:
|
|
$ref: '#/components/schemas/MembersResponse'
|
|
400:
|
|
$ref: '#/components/responses/400'
|
|
|
|
components:
|
|
parameters:
|
|
page:
|
|
name: page
|
|
in: query
|
|
description: The current page
|
|
example: 1
|
|
required: false
|
|
schema:
|
|
default: 1
|
|
type: integer
|
|
minimum: 1
|
|
limit:
|
|
name: limit
|
|
in: query
|
|
description: The number of object per page
|
|
example: 50
|
|
required: false
|
|
schema:
|
|
default: 50
|
|
type: integer
|
|
minimum: 1
|
|
maximum: 50
|
|
sort:
|
|
name: sort
|
|
in: query
|
|
description: The sort field name
|
|
example: firstName
|
|
required: false
|
|
schema:
|
|
type: string
|
|
articleSort:
|
|
name: sort
|
|
in: query
|
|
description: The sort field name
|
|
example: createdAt
|
|
required: false
|
|
schema:
|
|
type: string
|
|
enum:
|
|
- title
|
|
- createdAt
|
|
- vote
|
|
- popularity
|
|
citizenSort:
|
|
name: sort
|
|
in: query
|
|
description: The sort field name
|
|
example: createdAt
|
|
required: false
|
|
schema:
|
|
type: string
|
|
enum:
|
|
- title
|
|
- createdAt
|
|
workgroupSort:
|
|
name: sort
|
|
in: query
|
|
description: The sort field name
|
|
example: createdAt
|
|
required: false
|
|
schema:
|
|
type: string
|
|
enum:
|
|
- name
|
|
- createdAt
|
|
direction:
|
|
name: direction
|
|
in: query
|
|
description: The sort direction
|
|
example: asc
|
|
required: false
|
|
schema:
|
|
type: string
|
|
default: asc
|
|
enum: [asc, desc]
|
|
search:
|
|
name: search
|
|
in: query
|
|
description: A text to seach
|
|
example: content50
|
|
required: false
|
|
schema:
|
|
type: string
|
|
createdBy:
|
|
name: createdBy
|
|
in: query
|
|
description: filter by Author
|
|
example: 4d673bfa-eaef-4290-b52f-85a9c8a7eba5
|
|
required: false
|
|
schema:
|
|
type: string
|
|
format: uuid
|
|
|
|
article:
|
|
name: article
|
|
in: path
|
|
required: true
|
|
description: the ID of article
|
|
example: d91aa0cd-61d6-83cc-41bb-8d5656e130f7
|
|
schema:
|
|
type: string
|
|
format: uuid
|
|
|
|
citizen:
|
|
name: citizen
|
|
in: path
|
|
description: ID of citizen
|
|
example: 6434f4f9-f570-f22a-c134-8668350651ff
|
|
required: true
|
|
schema:
|
|
type: string
|
|
format: uuid
|
|
|
|
comment:
|
|
name: comment
|
|
in: path
|
|
description: The ID of comment
|
|
example: 701dc504-db49-7e3a-2c0a-32542507ea57
|
|
required: true
|
|
schema:
|
|
type: string
|
|
format: uuid
|
|
|
|
constitution:
|
|
name: constitution
|
|
in: path
|
|
required: true
|
|
description: the ID of constitution
|
|
example: e74be8e4-6823-47c4-bd1b-789725b2fa8e
|
|
schema:
|
|
type: string
|
|
format: uuid
|
|
|
|
opinion:
|
|
in: path
|
|
required: true
|
|
name: opinion
|
|
description: Opinion ID
|
|
example: 6e978eb5-3c48-0def-b093-e01f43983adb
|
|
schema:
|
|
type: string
|
|
format: uuid
|
|
|
|
workgroup:
|
|
name: workgroup
|
|
in: path
|
|
description: ID of workgroup
|
|
example: 82a0e60a-bb55-dbc0-1c3d-0a804df2b5df
|
|
required: true
|
|
schema:
|
|
type: string
|
|
format: uuid
|
|
|
|
|
|
responses:
|
|
401:
|
|
description: Unautorized
|
|
content:
|
|
application/json:
|
|
schema:
|
|
description: noting
|
|
400:
|
|
description: BadReqest
|
|
content:
|
|
application/json:
|
|
schema:
|
|
description: noting
|
|
|
|
schemas:
|
|
UUID:
|
|
type: string
|
|
pattern: '[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}'
|
|
description: UUID
|
|
format: uuid
|
|
example:
|
|
e74be8e4-6823-47c4-bd1b-789725b2fa8e
|
|
Paginated:
|
|
required:
|
|
- total
|
|
- count
|
|
- currentPage
|
|
- limit
|
|
- offset
|
|
- result
|
|
properties:
|
|
result:
|
|
type: array
|
|
maxItems: 50
|
|
items:
|
|
required:
|
|
- id
|
|
properties:
|
|
id:
|
|
$ref: '#/components/schemas/UUID'
|
|
count:
|
|
type: integer
|
|
minimum: 0
|
|
example: 1
|
|
currentPage:
|
|
type: integer
|
|
minimum: 0
|
|
example: 1
|
|
limit:
|
|
type: integer
|
|
minimum: 0
|
|
maximum: 50
|
|
example: 50
|
|
offset:
|
|
type: integer
|
|
minimum: 0
|
|
example: 1
|
|
total:
|
|
type: integer
|
|
minimum: 0
|
|
example: 1
|
|
ArticleResponse:
|
|
additionalProperties: false
|
|
required:
|
|
- id
|
|
- versionId
|
|
- versionNumber
|
|
- title
|
|
- anonymous
|
|
- content
|
|
- description
|
|
- tags
|
|
- draft
|
|
- lastVersion
|
|
- createdBy
|
|
- views
|
|
- opinions
|
|
- votes
|
|
properties:
|
|
id:
|
|
type: string
|
|
format: uuid
|
|
versionId:
|
|
type: string
|
|
format: uuid
|
|
versionNumber:
|
|
type: integer
|
|
minimum: 0
|
|
title:
|
|
type: string
|
|
anonymous:
|
|
type: boolean
|
|
content:
|
|
type: string
|
|
description:
|
|
type: string
|
|
tags:
|
|
type: array
|
|
items:
|
|
type: string
|
|
draft:
|
|
type: boolean
|
|
lastVersion:
|
|
type: boolean
|
|
createdAt:
|
|
type: string
|
|
format: 'date-time'
|
|
createdBy:
|
|
type: object
|
|
additionalProperties: false
|
|
required:
|
|
- id
|
|
- name
|
|
- email
|
|
properties:
|
|
id:
|
|
type: string
|
|
format: uuid
|
|
name:
|
|
type: object
|
|
required:
|
|
- firstName
|
|
- lastName
|
|
properties:
|
|
firstName:
|
|
type: string
|
|
lastName:
|
|
type: string
|
|
email:
|
|
type: string
|
|
workgroup:
|
|
type: object
|
|
nullable: true
|
|
additionalProperties: false
|
|
properties:
|
|
id:
|
|
type: string
|
|
format: uuid
|
|
name:
|
|
type: string
|
|
views:
|
|
additionalProperties: false
|
|
required:
|
|
- total
|
|
- unique
|
|
properties:
|
|
total:
|
|
type: integer
|
|
unique:
|
|
type: integer
|
|
opinions:
|
|
additionalProperties:
|
|
type: integer
|
|
example:
|
|
'good writed': 5
|
|
'to short': 19
|
|
votes:
|
|
additionalProperties: false
|
|
required:
|
|
- up
|
|
- neutral
|
|
- down
|
|
- total
|
|
- score
|
|
properties:
|
|
up:
|
|
type: integer
|
|
neutral:
|
|
type: integer
|
|
down:
|
|
type: integer
|
|
total:
|
|
type: integer
|
|
score:
|
|
type: integer
|
|
ArticleListingResponse:
|
|
required:
|
|
- id
|
|
- title
|
|
- createdBy
|
|
- workgroup
|
|
- draft
|
|
properties:
|
|
id:
|
|
type: string
|
|
format: uuid
|
|
title:
|
|
type: string
|
|
createdBy:
|
|
$ref: '#/components/schemas/CitizenCreator'
|
|
workgroup:
|
|
type: object
|
|
nullable: true
|
|
additionalProperties: false
|
|
properties:
|
|
id:
|
|
type: string
|
|
format: uuid
|
|
name:
|
|
type: string
|
|
draft:
|
|
type: boolean
|
|
|
|
CitizenListResponse:
|
|
additionalProperties: false
|
|
type: object
|
|
required:
|
|
- id
|
|
- name
|
|
- email
|
|
properties:
|
|
id:
|
|
$ref: '#/components/schemas/UUID'
|
|
name:
|
|
type: object
|
|
required:
|
|
- firstName
|
|
- lastName
|
|
properties:
|
|
firstName:
|
|
type: string
|
|
example:
|
|
john
|
|
lastName:
|
|
type: string
|
|
example:
|
|
Doe
|
|
email:
|
|
type: string
|
|
format: email
|
|
example: my.email@dc-project.fr
|
|
CitizenResponse:
|
|
additionalProperties: false
|
|
type: object
|
|
required:
|
|
- id
|
|
- name
|
|
- email
|
|
- createdAt
|
|
- user
|
|
properties:
|
|
id:
|
|
$ref: '#/components/schemas/UUID'
|
|
name:
|
|
type: object
|
|
required:
|
|
- firstName
|
|
- lastName
|
|
properties:
|
|
firstName:
|
|
type: string
|
|
example:
|
|
john
|
|
lastName:
|
|
type: string
|
|
example:
|
|
Doe
|
|
email:
|
|
type: string
|
|
format: email
|
|
example: my.email@dc-project.fr
|
|
birthday:
|
|
type: string
|
|
format: 'date'
|
|
example: '1984-12-25'
|
|
createdAt:
|
|
type: string
|
|
format: 'date-time'
|
|
user:
|
|
type: object
|
|
required:
|
|
- username
|
|
properties:
|
|
username:
|
|
type: string
|
|
example:
|
|
john-doe
|
|
CitizenCreator:
|
|
additionalProperties: false
|
|
type: object
|
|
required:
|
|
- id
|
|
- name
|
|
- user
|
|
properties:
|
|
id:
|
|
$ref: '#/components/schemas/UUID'
|
|
name:
|
|
type: object
|
|
required:
|
|
- firstName
|
|
- lastName
|
|
properties:
|
|
firstName:
|
|
type: string
|
|
example:
|
|
john
|
|
lastName:
|
|
type: string
|
|
example:
|
|
Doe
|
|
user:
|
|
type: object
|
|
required:
|
|
- username
|
|
properties:
|
|
username:
|
|
type: string
|
|
example:
|
|
john-doe
|
|
|
|
CommentResponse:
|
|
additionalProperties: false
|
|
type: object
|
|
required:
|
|
- id
|
|
- content
|
|
- parent
|
|
- createdAt
|
|
- createdBy
|
|
- votes
|
|
- target
|
|
- childrenCount
|
|
properties:
|
|
id:
|
|
$ref: '#/components/schemas/UUID'
|
|
content:
|
|
type: string
|
|
example:
|
|
Lorem ipsum...
|
|
parent:
|
|
nullable: true
|
|
properties:
|
|
id:
|
|
$ref: '#/components/schemas/UUID'
|
|
reference:
|
|
type: string
|
|
createdBy:
|
|
$ref: '#/components/schemas/CitizenCreator'
|
|
createdAt:
|
|
type: string
|
|
format: 'date-time'
|
|
updatedAt:
|
|
type: string
|
|
format: 'date-time'
|
|
target:
|
|
additionalProperties: false
|
|
properties:
|
|
id:
|
|
$ref: '#/components/schemas/UUID'
|
|
reference:
|
|
type: string
|
|
childrenCount:
|
|
type: integer
|
|
minimum: 0
|
|
votes:
|
|
properties:
|
|
up:
|
|
type: number
|
|
minimum: 0
|
|
neutral:
|
|
type: number
|
|
minimum: 0
|
|
down:
|
|
type: number
|
|
minimum: 0
|
|
total:
|
|
type: number
|
|
minimum: 0
|
|
score:
|
|
type: number
|
|
ConstitutionRequest:
|
|
additionalProperties: false
|
|
description: The versionId field must be defined for update contitution
|
|
type: object
|
|
required:
|
|
- title
|
|
properties:
|
|
id:
|
|
$ref: '#/components/schemas/UUID'
|
|
title:
|
|
type: string
|
|
example:
|
|
Constitution for the liberty
|
|
titles:
|
|
type: array
|
|
default: [ ]
|
|
items:
|
|
additionalProperties: false
|
|
type: object
|
|
required:
|
|
- name
|
|
properties:
|
|
id:
|
|
$ref: '#/components/schemas/UUID'
|
|
name:
|
|
type: string
|
|
example:
|
|
The liberties
|
|
articles:
|
|
type: array
|
|
items:
|
|
required:
|
|
- id
|
|
properties:
|
|
id:
|
|
$ref: '#/components/schemas/UUID'
|
|
anonymous:
|
|
type: boolean
|
|
default: true
|
|
draft:
|
|
type: boolean
|
|
default: false
|
|
versionId:
|
|
$ref: '#/components/schemas/UUID'
|
|
ConstitutionResponse:
|
|
additionalProperties: false
|
|
type: object
|
|
required:
|
|
- id
|
|
- title
|
|
- titles
|
|
- anonymous
|
|
- draft
|
|
- versionId
|
|
- createdBy
|
|
- createdAt
|
|
properties:
|
|
id:
|
|
$ref: '#/components/schemas/UUID'
|
|
title:
|
|
type: string
|
|
example:
|
|
Constitution for the liberty
|
|
titles:
|
|
type: array
|
|
default: [ ]
|
|
items:
|
|
additionalProperties: false
|
|
type: object
|
|
required:
|
|
- id
|
|
- name
|
|
- rank
|
|
- articles
|
|
properties:
|
|
id:
|
|
$ref: '#/components/schemas/UUID'
|
|
name:
|
|
type: string
|
|
example:
|
|
The liberties
|
|
rank:
|
|
type: integer
|
|
minimum: 0
|
|
example: 0
|
|
createdBy:
|
|
$ref: '#/components/schemas/CitizenCreator'
|
|
createdAt:
|
|
type: string
|
|
format: 'date-time'
|
|
articles:
|
|
type: array
|
|
items:
|
|
$ref: '#/components/schemas/ArticleListingResponse'
|
|
anonymous:
|
|
type: boolean
|
|
default: true
|
|
draft:
|
|
type: boolean
|
|
default: false
|
|
versionId:
|
|
$ref: '#/components/schemas/UUID'
|
|
createdBy:
|
|
$ref: '#/components/schemas/CitizenCreator'
|
|
createdAt:
|
|
type: string
|
|
format: 'date-time'
|
|
ConstitutionListingResponse:
|
|
additionalProperties: false
|
|
type: object
|
|
required:
|
|
- id
|
|
- title
|
|
- versionId
|
|
- createdAt
|
|
- createdBy
|
|
properties:
|
|
id:
|
|
$ref: '#/components/schemas/UUID'
|
|
title:
|
|
type: string
|
|
example:
|
|
Constitution for the liberty
|
|
versionId:
|
|
$ref: '#/components/schemas/UUID'
|
|
createdBy:
|
|
$ref: '#/components/schemas/CitizenCreator'
|
|
createdAt:
|
|
type: string
|
|
format: 'date-time'
|
|
|
|
FollowResponse:
|
|
additionalProperties: false
|
|
required:
|
|
- id
|
|
- createdBy
|
|
- createdAt
|
|
- target
|
|
properties:
|
|
id:
|
|
$ref: '#/components/schemas/UUID'
|
|
createdBy:
|
|
$ref: '#/components/schemas/CitizenCreator'
|
|
createdAt:
|
|
type: string
|
|
format: 'date-time'
|
|
target:
|
|
required:
|
|
- id
|
|
- reference
|
|
additionalProperties: false
|
|
properties:
|
|
id:
|
|
$ref: '#/components/schemas/UUID'
|
|
reference:
|
|
type: string
|
|
|
|
OpinionChoice:
|
|
description: Opinion Choice
|
|
type: object
|
|
required:
|
|
- name
|
|
properties:
|
|
id:
|
|
type: string
|
|
format: uuid
|
|
name:
|
|
type: string
|
|
example: opinion1
|
|
target:
|
|
type: array
|
|
nullable: true
|
|
items:
|
|
type: string
|
|
description: the name of the target
|
|
Opinion:
|
|
description: Opinion
|
|
type: object
|
|
properties:
|
|
id:
|
|
type: string
|
|
format: uuid
|
|
name:
|
|
type: string
|
|
example: opinion1
|
|
target:
|
|
type: object
|
|
properties:
|
|
id:
|
|
type: string
|
|
format: uuid
|
|
reference:
|
|
type: string
|
|
example: article
|
|
choice:
|
|
type: object
|
|
allOf:
|
|
- $ref: '#/components/schemas/OpinionChoice'
|
|
reference:
|
|
type: string
|
|
example: opinion_on_article
|
|
createdBy:
|
|
$ref: '#/components/schemas/CitizenCreator'
|
|
createdAt:
|
|
type: string
|
|
format: 'date-time'
|
|
|
|
VoteRequest:
|
|
type: object
|
|
additionalProperties: false
|
|
required:
|
|
- note
|
|
properties:
|
|
note:
|
|
type: integer
|
|
minimum: -1
|
|
maximum: 1
|
|
VoteResponse:
|
|
type: object
|
|
additionalProperties: false
|
|
required:
|
|
- id
|
|
- note
|
|
- createdAt
|
|
- createdBy
|
|
- target
|
|
properties:
|
|
id:
|
|
$ref: '#/components/schemas/UUID'
|
|
note:
|
|
type: integer
|
|
minimum: -1
|
|
maximum: 1
|
|
createdAt:
|
|
type: string
|
|
format: 'date-time'
|
|
createdBy:
|
|
$ref: '#/components/schemas/CitizenCreator'
|
|
target:
|
|
required:
|
|
- id
|
|
- reference
|
|
properties:
|
|
id:
|
|
$ref: '#/components/schemas/UUID'
|
|
reference:
|
|
type: string
|
|
VoteAggregation:
|
|
additionalProperties: false
|
|
type: object
|
|
required:
|
|
- up
|
|
- neutral
|
|
- down
|
|
- total
|
|
- score
|
|
- updatedAt
|
|
properties:
|
|
up:
|
|
type: number
|
|
minimum: 0
|
|
neutral:
|
|
type: number
|
|
minimum: 0
|
|
down:
|
|
type: number
|
|
minimum: 0
|
|
total:
|
|
type: number
|
|
minimum: 0
|
|
score:
|
|
type: number
|
|
updatedAt:
|
|
type: string
|
|
format: 'date-time'
|
|
|
|
WorkgroupListing:
|
|
description: Workgroup
|
|
type: object
|
|
properties:
|
|
id:
|
|
type: string
|
|
format: uuid
|
|
name:
|
|
type: string
|
|
example: Les partisants du RIC
|
|
description:
|
|
type: string
|
|
example: Group formé pour la conception d'un RIC
|
|
logo:
|
|
type: string
|
|
nullable: true
|
|
Workgroup:
|
|
description: Workgroup
|
|
type: object
|
|
required:
|
|
- id
|
|
- name
|
|
- description
|
|
- logo
|
|
- anonymous
|
|
- createdBy
|
|
- members
|
|
properties:
|
|
id:
|
|
type: string
|
|
format: uuid
|
|
name:
|
|
type: string
|
|
example: Les partisants du RIC
|
|
description:
|
|
type: string
|
|
example: Group formé pour la conception d'un RIC
|
|
logo:
|
|
type: string
|
|
nullable: true
|
|
anonymous:
|
|
type: boolean
|
|
createdBy:
|
|
$ref: '#/components/schemas/CitizenCreator'
|
|
members:
|
|
$ref: '#/components/schemas/MembersResponse'
|
|
|
|
MembersRequest:
|
|
description: members of workgroup
|
|
type: array
|
|
items:
|
|
type: object
|
|
properties:
|
|
citizen:
|
|
required:
|
|
- id
|
|
properties:
|
|
id:
|
|
$ref: '#/components/schemas/UUID'
|
|
roles:
|
|
type: array
|
|
items:
|
|
type: string
|
|
enum:
|
|
- MASTER
|
|
- MANAGER
|
|
- EDITOR
|
|
- REPORTER
|
|
example: MASTER
|
|
MembersResponse:
|
|
description: members of workgroup
|
|
type: array
|
|
items:
|
|
description: Member of workgroup
|
|
type: object
|
|
properties:
|
|
citizen:
|
|
$ref: '#/components/schemas/CitizenCreator'
|
|
roles:
|
|
type: array
|
|
items:
|
|
type: string
|
|
enum:
|
|
- MASTER
|
|
- MANAGER
|
|
- EDITOR
|
|
- REPORTER
|
|
example: MASTER
|
|
|
|
400:
|
|
description: Bad Request
|
|
required:
|
|
- title
|
|
- invalidParams
|
|
additionalProperties: false
|
|
properties:
|
|
statusCode:
|
|
type: integer
|
|
example: 400
|
|
title:
|
|
type: string
|
|
example: Bad Request
|
|
invalidParams:
|
|
type: array
|
|
items:
|
|
required:
|
|
- name
|
|
- reason
|
|
properties:
|
|
name:
|
|
type: string
|
|
example: '.title'
|
|
reason:
|
|
type: string
|
|
example: 'Cannot be null'
|
|
|
|
404:
|
|
description: Not Found
|
|
required:
|
|
- title
|
|
- statusCode
|
|
additionalProperties: false
|
|
properties:
|
|
statusCode:
|
|
type: integer
|
|
example: 404
|
|
title:
|
|
type: string
|
|
example: Bad Request
|
|
|
|
securitySchemes:
|
|
JWTAuth:
|
|
type: http
|
|
scheme: bearer
|
|
description: call /login to get token
|
|
bearerFormat: JWT
|
|
|
|
servers:
|
|
- description: localhost
|
|
url: http://localhost:8080
|
|
- description: production
|
|
url: http://dc-project.fr |