openapi: 3.0.1 info: version: '0.1' title: 'DC Project' description: 'A free comunity program for create constitution' paths: /register: post: summary: Create account tags: - authentification operationId: register requestBody: $ref: '#/components/requestBodies/RegisterRequest' responses: 200: description: User created and JWT returned content: text/plain: example: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJBdXRoZW50aWNhdGlvbiIsImlzcyI6ImRjLXByb2plY3QuZnIiLCJpZCI6ImQ1NDRhNmE4LWJhYjgtNDU2MC05NWIxLThhZjAyMDNkOTEwNCIsImV4cCI6MTU2NzA3Mzc0Mn0.0VTetv8fZFjVgpJ-bwJpidGNHJUOmgj8vuZcZXzwnLa7TtFwcXWvh3bDPYHqB66nmOfXyM57XnHDbmRwtipCag /login: post: summary: sign in tags: - authentification operationId: login requestBody: $ref: '#/components/requestBodies/LoginRequest' responses: 200: description: return JWT content: text/plain: example: eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzUxMiJ9.eyJzdWIiOiJBdXRoZW50aWNhdGlvbiIsImlzcyI6ImRjLXByb2plY3QuZnIiLCJpZCI6ImQ1NDRhNmE4LWJhYjgtNDU2MC05NWIxLThhZjAyMDNkOTEwNCIsImV4cCI6MTU2NzA3Mzc0Mn0.0VTetv8fZFjVgpJ-bwJpidGNHJUOmgj8vuZcZXzwnLa7TtFwcXWvh3bDPYHqB66nmOfXyM57XnHDbmRwtipCag /sso: post: summary: Send email with JWT tags: - authentification operationId: sso 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/sso responses: 204: description: email send 404: description: no user with this email /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}/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' /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: properties: old_password: type: string format: password required: true example: azerty new_password: type: string format: password required: true example: qwerty responses: 201: description: Password changed 404: description: Citizen not found 401: $ref: '#/components/responses/401' /citizens: get: security: - JWTAuth: [] summary: Get all citizens tags: - citizen operationId: getCitizens 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 Citizen objects content: application/json: schema: allOf: - $ref: '#/components/schemas/Paginated' - type: object properties: result: type: array items: $ref: '#/components/schemas/CitizenResponse' 401: $ref: '#/components/responses/401' /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 items: $ref: '#/components/schemas/ArticleResponse' post: security: - JWTAuth: [] summary: Create new Article tags: - article operationId: insertArticle requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ArticleRequest' responses: 201: description: Article created content: application/json: schema: $ref: '#/components/schemas/ArticleResponse' 401: $ref: '#/components/responses/401' /articles/{article}: parameters: - $ref: '#/components/parameters/article' get: security: - {} - JWTAuth: [] summary: Get one article tags: - article operationId: getArticle responses: 200: description: The Article objects content: application/json: schema: $ref: '#/components/schemas/ArticleResponse' /articles/{article}/versions: parameters: - $ref: '#/components/parameters/article' get: summary: Get all versions of articles tags: - article operationId: getArticleVersions responses: 200: description: The versions of Article content: application/json: schema: allOf: - $ref: '#/components/schemas/Paginated' - type: object properties: result: type: array items: $ref: '#/components/schemas/ArticleResponse' /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/ConstitutionResponse' 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' /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' /comments/{comment}: parameters: - $ref: '#/components/parameters/comment' get: summary: Get Comment by Comment ID tags: - comment responses: 200: description: Return Comment and children content: application/json: schema: $ref: '#/components/schemas/CommentResponse' put: security: - JWTAuth: [] summary: Edit existing comment tags: - comment requestBody: content: application/json: schema: $ref: '#/components/schemas/CommentRequest' responses: 200: description: Return Comment and children 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' post: security: - JWTAuth: [] summary: Create Comment on other comment tags: - comment requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/CommentRequest' responses: 201: description: Return the created Comment content: application/json: schema: allOf: - type: object properties: result: type: array items: $ref: '#/components/schemas/CommentResponse' 404: description: Comment not found 401: $ref: '#/components/responses/401' /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 Comment and children content: application/json: schema: $ref: '#/components/schemas/CommentResponse' post: security: - JWTAuth: [] summary: Create Comment to article tags: - comment - article requestBody: content: application/json: schema: $ref: '#/components/schemas/CommentRequest' responses: 200: description: Return Comment and children content: application/json: schema: $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: $ref: '#/components/schemas/CommentRequest' responses: 200: description: Return Comment and children content: application/json: schema: $ref: '#/components/schemas/CommentResponse' 401: $ref: '#/components/responses/401' /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' /constitutions/{constitution}/follows: parameters: - $ref: '#/components/parameters/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' /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' /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 /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' /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: $ref: '#/components/schemas/ArticleOpinionRequest' responses: 201: description: Return the opinion content: application/json: schema: $ref: '#/components/schemas/Opinion' 401: $ref: '#/components/responses/401' /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: $ref: '#/components/schemas/OpinionChoices' /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' /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' /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' /workgroups: get: summary: Get all Workgroup (Paginated) security: - {} - JWTAuth: [] 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/WorkgroupSimple' post: summary: Create new Workgroup security: - JWTAuth: [] tags: - workgroup requestBody: content: application/json: schema: properties: id: type: string format: uuid nullable: true name: type: string example: Les partisants du RIC required: true 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 owner: type: string format: uuid example: 6434f4f9-f570-f22a-c134-8668350651ff nullable: true responses: 201: description: Workgroup created content: application/json: schema: 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 anonymous: type: boolean example: false owner: type: string format: uuid /workgroups/{workgroup}: parameters: - $ref: '#/components/parameters/workgroup' get: summary: Get one workgroup by ID security: - {} - JWTAuth: [] tags: - workgroup responses: 200: description: Workgroup content: application/json: schema: allOf: - $ref: '#/components/schemas/Workgroup' put: summary: Edit one workgroup security: - JWTAuth: [] tags: - workgroup requestBody: content: application/json: schema: properties: name: type: string example: Les partisants du RIC required: true 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 owner: type: string format: uuid example: 6434f4f9-f570-f22a-c134-8668350651ff nullable: true responses: 200: description: Workgroup updated content: application/json: schema: 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 anonymous: type: boolean example: false owner: type: string format: uuid delete: summary: Delete one workgroup security: - JWTAuth: [] tags: - workgroup responses: 204: description: Workgroup 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. PLEASE NOTE this removes all members who are not in request! 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' delete: summary: Delete members of workgroup 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' components: responses: 401: description: Unautorized content: application/json: schema: description: noting 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: first_name 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 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 citizen: name: citizen in: path description: ID of citizen example: 6434f4f9-f570-f22a-c134-8668350651ff required: true 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 opinion: in: path required: true name: opinion description: Opinion ID example: 6e978eb5-3c48-0def-b093-e01f43983adb 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 comment: name: comment in: path description: The ID of comment example: 701dc504-db49-7e3a-2c0a-32542507ea57 required: true 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 securitySchemes: JWTAuth: type: http scheme: bearer description: call /login to get token bearerFormat: JWT 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 UuidEntity: properties: id: $ref: '#/components/schemas/UUID' CreatedBy: properties: created_by: $ref: '#/components/schemas/CitizenResponse' CreatedAt: properties: created_at: type: string format: 'date-time' UpdatedAt: properties: updated_at: type: string format: 'date-time' DeletedAt: properties: deleted_at: type: string format: 'date-time' deleted: type: boolean versionId: properties: version_id: $ref: '#/components/schemas/UUID' lastVersion: properties: last_version: type: boolean required: false default: false Paginated: properties: result: type: array items: $ref: '#/components/schemas/UuidEntity' count: type: integer minimum: 0 example: 1 currentPage: type: integer minimum: 0 example: 1 limit: type: integer minimum: 0 example: 50 offset: type: integer minimum: 0 example: 1 total: type: integer minimum: 0 example: 1 UserBase: properties: username: type: string required: true example: john-doe UserResponse: allOf: - $ref: '#/components/schemas/UserBase' - $ref: '#/components/schemas/UuidEntity' UserRequest: allOf: - $ref: '#/components/schemas/UserBase' - type: object properties: plain_password: type: string required: true example: azerty format: password CitizenResponse: allOf: - $ref: '#/components/schemas/CitizenBase' - $ref: '#/components/schemas/CreatedAt' - $ref: '#/components/schemas/UuidEntity' - type: object properties: user: $ref: '#/components/schemas/UserResponse' CitizenBase: type: object properties: name: type: object properties: first_name: type: string required: true example: john last_name: type: string required: true example: Doe birthday: type: string format: 'date' example: '1984-12-25' email: type: string format: email example: my.email@dc-project.fr CitizenRequest: allOf: - $ref: '#/components/schemas/CitizenBase' - type: object properties: user: $ref: '#/components/schemas/UserRequest' RegisterRequest: $ref: '#/components/schemas/CitizenRequest' LoginRequest: properties: name: type: string description: username required: true example: john-doe password: type: string description: Pasword required: true example: azerty ArticleBase: type: object allOf: - type: object properties: title: type: string required: true example: Limit power of press content: type: string required: true example: Lorem upsum... description: type: string required: true example: I think is the bether choice tags: type: array items: type: string required: false default: [] example: [power, press] annonymous: type: boolean required: false default: true draft: type: boolean required: false default: false workgroup: allOf: - $ref: '#/components/schemas/UuidEntity' - required: false - default: null - $ref: '#/components/schemas/versionId' ArticleResponse: type: object allOf: - $ref: '#/components/schemas/ArticleBase' - $ref: '#/components/schemas/UuidEntity' - $ref: '#/components/schemas/CreatedBy' - $ref: '#/components/schemas/CreatedAt' - $ref: '#/components/schemas/lastVersion' - $ref: '#/components/schemas/Votable' - $ref: '#/components/schemas/Opinionable' ArticleRequest: $ref: '#/components/schemas/ArticleBase' ConstitutionBase: type: object allOf: - type: object properties: title: type: string required: true example: Constitution for the liberty titles: type: array required: false default: [] items: $ref: '#/components/schemas/TitleBase' annonymous: type: boolean required: false default: true draft: type: boolean required: false default: false - $ref: '#/components/schemas/versionId' ConstitutionResponse: type: object allOf: - $ref: '#/components/schemas/ConstitutionBase' - $ref: '#/components/schemas/UuidEntity' - $ref: '#/components/schemas/CreatedBy' - $ref: '#/components/schemas/CreatedAt' - type: object properties: titles: type: array items: $ref: '#/components/schemas/TitleResponse' ConstitutionRequest: allOf: - $ref: '#/components/schemas/ConstitutionBase' - type: object properties: titles: type: array items: $ref: '#/components/schemas/TitleRequest' TitleBase: type: object properties: name: type: string required: true example: The liberties rank: type: integer minimum: 0 example: 0 TitleRequest: type: object allOf: - $ref: '#/components/schemas/TitleBase' - $ref: '#/components/schemas/UuidEntity' - type: object properties: articles: type: array items: $ref: '#/components/schemas/UuidEntity' TitleResponse: type: object allOf: - $ref: '#/components/schemas/TitleBase' - $ref: '#/components/schemas/UuidEntity' - $ref: '#/components/schemas/CreatedAt' - $ref: '#/components/schemas/CreatedBy' - type: object properties: articles: type: array items: $ref: '#/components/schemas/ArticleResponse' Extra: type: object allOf: - $ref: '#/components/schemas/UuidEntity' - $ref: '#/components/schemas/CreatedAt' - $ref: '#/components/schemas/CreatedBy' - type: object properties: target: $ref: '#/components/schemas/UuidEntity' CommentBase: type: object allOf: - type: object properties: content: type: string required: true example: Lorem ipsum... CommentRequest: allOf: - $ref: '#/components/schemas/CommentBase' CommentResponse: allOf: - $ref: '#/components/schemas/CommentBase' - $ref: '#/components/schemas/UpdatedAt' - $ref: '#/components/schemas/Extra' - $ref: '#/components/schemas/Votable' - type: object properties: parents_ids: type: array required: false items: $ref: '#/components/schemas/UUID' parent: required: false allOf: - $ref: '#/components/schemas/UUID' FollowBase: allOf: - $ref: '#/components/schemas/Extra' FollowResponse: allOf: - $ref: '#/components/schemas/FollowBase' VoteBase: allOf: - type: object properties: note: type: integer minimum: -1 maximum: 1 required: true VoteRequest: allOf: - $ref: '#/components/schemas/VoteBase' VoteResponse: allOf: - $ref: '#/components/schemas/VoteBase' - $ref: '#/components/schemas/Extra' VoteAggregation: allOf: - type: object properties: up: type: number minimum: 0 neutral: type: number minimum: 0 down: type: number minimum: 0 total: type: number minimum: 0 score: type: number - $ref: '#/components/schemas/UpdatedAt' Votable: type: object properties: votes: $ref: '#/components/schemas/VoteAggregation' Opinionable: type: object properties: opinions: type: string additionalProperties: true example: Opinion1: 1 Opinion2: 55 ArticleOpinionRequest: type: object properties: ids: type: array items: type: string format: uuid example: 6e978eb5-3c48-0def-b093-e01f43983adb OpinionChoices: description: Opinion Choice type: array items: $ref: '#/components/schemas/OpinionChoice' OpinionChoice: description: Opinion Choice allOf: - type: object properties: id: type: string format: uuid name: type: string example: opinion1 target: type: array required: false nullable: true items: type: string description: the name of the target - $ref: '#/components/schemas/CreatedAt' - $ref: '#/components/schemas/DeletedAt' Opinion: description: Opinion allOf: - 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 - $ref: '#/components/schemas/CreatedBy' - $ref: '#/components/schemas/CreatedAt' WorkgroupSimple: description: Workgroup allOf: - 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 anonymous: type: boolean example: false - $ref: '#/components/schemas/CreatedBy' - $ref: '#/components/schemas/DeletedAt' Workgroup: description: Workgroup allOf: - $ref: '#/components/schemas/WorkgroupSimple' - type: object properties: members: $ref: '#/components/schemas/MembersResponse' - $ref: '#/components/schemas/CreatedAt' - $ref: '#/components/schemas/UpdatedAt' MembersRequest: description: members of workgroup type: array items: $ref: '#/components/schemas/MemberRequest' MembersResponse: description: members of workgroup type: array items: $ref: '#/components/schemas/MemberResponse' MemberResponse: description: Member of workgroup type: object properties: citizen: $ref: '#/components/schemas/CitizenResponse' roles: type: array items: type: string enum: - MASTER - MANAGER - EDITOR - REPORTER example: MASTER MemberRequest: description: Member of workgroup type: object properties: citizen: $ref: '#/components/schemas/UuidEntity' roles: type: array items: type: string enum: - MASTER - MANAGER - EDITOR - REPORTER example: MASTER requestBodies: RegisterRequest: content: application/json: schema: $ref: '#/components/schemas/RegisterRequest' description: Register required: true LoginRequest: content: application/json: schema: $ref: '#/components/schemas/LoginRequest' description: Login required: true servers: - description: localhost url: http://localhost:8080 - description: production url: http://dc-project.fr