diff --git a/api/openapi.yaml b/api/openapi.yaml new file mode 100644 index 0000000..5a35e20 --- /dev/null +++ b/api/openapi.yaml @@ -0,0 +1,552 @@ +openapi: 3.1.1 +info: + title: Titles, Users, Reviews, Tags, and Media API + version: 1.0.0 +servers: + - url: https://api.example.com +paths: + /title: + get: + summary: Get titles + parameters: + - in: query + name: query + schema: + type: string + - in: query + name: limit + schema: + type: integer + default: 10 + - in: query + name: offset + schema: + type: integer + default: 0 + - in: query + name: fields + schema: + type: string + default: all + responses: + '200': + description: List of titles + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/Title' + '204': + description: No titles found + + /title/{title_id}: + get: + summary: Get title description + parameters: + - in: path + name: title_id + required: true + schema: + type: string + - in: query + name: fields + schema: + type: string + default: all + responses: + '200': + description: Title description + content: + application/json: + schema: + $ref: '#/components/schemas/Title' + '404': + description: Title not found + + patch: + summary: Update title info + parameters: + - in: path + name: title_id + required: true + schema: + type: string + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Title' + responses: + '200': + description: Update result + content: + application/json: + schema: + type: object + properties: + success: + type: boolean + error: + type: string + user_json: + $ref: '#/components/schemas/User' + + /title/{title_id}/reviews: + get: + summary: Get title reviews + parameters: + - in: path + name: title_id + required: true + schema: + type: string + - in: query + name: limit + schema: + type: integer + default: 10 + - in: query + name: offset + schema: + type: integer + default: 0 + responses: + '200': + description: List of reviews + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/Review' + '204': + description: No reviews found + + /users/{user_id}: + get: + summary: Get user info + parameters: + - in: path + name: user_id + required: true + schema: + type: string + - in: query + name: fields + schema: + type: string + default: all + responses: + '200': + description: User info + content: + application/json: + schema: + $ref: '#/components/schemas/User' + '404': + description: User not found + + patch: + summary: Update user + parameters: + - in: path + name: user_id + required: true + schema: + type: string + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/User' + responses: + '200': + description: Update result + content: + application/json: + schema: + type: object + properties: + success: + type: boolean + error: + type: string + + delete: + summary: Delete user + parameters: + - in: path + name: user_id + required: true + schema: + type: string + responses: + '200': + description: Delete result + content: + application/json: + schema: + type: object + properties: + success: + type: boolean + error: + type: string + + /users: + get: + summary: Search user + parameters: + - in: query + name: query + schema: + type: string + - in: query + name: fields + schema: + type: string + responses: + '200': + description: List of users + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/User' + + post: + summary: Add new user + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/User' + responses: + '200': + description: Add result + content: + application/json: + schema: + type: object + properties: + success: + type: boolean + error: + type: string + user_json: + $ref: '#/components/schemas/User' + + /users/{user_id}/titles: + get: + summary: Get user titles + parameters: + - in: path + name: user_id + required: true + schema: + type: string + - in: query + name: query + schema: + type: string + - in: query + name: limit + schema: + type: integer + default: 10 + - in: query + name: offset + schema: + type: integer + default: 0 + - in: query + name: fields + schema: + type: string + default: all + responses: + '200': + description: List of user titles + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/UserTitle' + '204': + description: No titles found + + post: + summary: Add user title + parameters: + - in: path + name: user_id + required: true + schema: + type: string + requestBody: + required: true + content: + application/json: + schema: + type: object + properties: + title_id: + type: string + status: + type: string + responses: + '200': + description: Add result + content: + application/json: + schema: + type: object + properties: + success: + type: boolean + error: + type: string + + patch: + summary: Update user title + parameters: + - in: path + name: user_id + required: true + schema: + type: string + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/UserTitle' + responses: + '200': + description: Update result + content: + application/json: + schema: + type: object + properties: + success: + type: boolean + error: + type: string + + delete: + summary: Delete user title + parameters: + - in: path + name: user_id + required: true + schema: + type: string + - in: query + name: title_id + schema: + type: string + responses: + '200': + description: Delete result + content: + application/json: + schema: + type: object + properties: + success: + type: boolean + error: + type: string + + /users/{user_id}/reviews: + get: + summary: Get user reviews + parameters: + - in: path + name: user_id + required: true + schema: + type: string + - in: query + name: limit + schema: + type: integer + default: 10 + - in: query + name: offset + schema: + type: integer + default: 0 + responses: + '200': + description: List of reviews + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/Review' + + /reviews: + post: + summary: Add review + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Review' + responses: + '200': + description: Add result + content: + application/json: + schema: + type: object + properties: + success: + type: boolean + error: + type: string + + /reviews/{review_id}: + patch: + summary: Update review + parameters: + - in: path + name: review_id + required: true + schema: + type: string + requestBody: + required: true + content: + application/json: + schema: + $ref: '#/components/schemas/Review' + responses: + '200': + description: Update result + content: + application/json: + schema: + type: object + properties: + success: + type: boolean + error: + type: string + delete: + summary: Delete review + parameters: + - in: path + name: review_id + required: true + schema: + type: string + responses: + '200': + description: Delete result + content: + application/json: + schema: + type: object + properties: + success: + type: boolean + error: + type: string + + /tags: + get: + summary: Get tags + parameters: + - in: query + name: limit + schema: + type: integer + default: 10 + - in: query + name: offset + schema: + type: integer + default: 0 + - in: query + name: fields + schema: + type: string + responses: + '200': + description: List of tags + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/Tag' + + /media: + post: + summary: Upload image + responses: + '200': + description: Upload result + content: + application/json: + schema: + type: object + properties: + success: + type: boolean + error: + type: string + image_id: + type: string + + get: + summary: Get image path + parameters: + - in: query + name: image_id + required: true + schema: + type: string + responses: + '200': + description: Image path + content: + application/json: + schema: + type: object + properties: + success: + type: boolean + error: + type: string + image_path: + type: string + +components: + schemas: + Title: + type: object + additionalProperties: true + User: + type: object + additionalProperties: true + UserTitle: + type: object + additionalProperties: true + Review: + type: object + additionalProperties: true + Tag: + type: object + additionalProperties: true