refact: openapi splitted into separate files
This commit is contained in:
parent
9ed09500ed
commit
2025bb451f
22 changed files with 443 additions and 435 deletions
441
api/openapi.yaml
441
api/openapi.yaml
|
|
@ -8,444 +8,15 @@ servers:
|
||||||
|
|
||||||
paths:
|
paths:
|
||||||
/titles:
|
/titles:
|
||||||
get:
|
$ref: "./paths/titles.yaml"
|
||||||
summary: Get titles
|
|
||||||
parameters:
|
|
||||||
- $ref: '#/components/parameters/cursor'
|
|
||||||
- $ref: '#/components/parameters/title_sort'
|
|
||||||
- in: query
|
|
||||||
name: sort_forward
|
|
||||||
schema:
|
|
||||||
type: boolean
|
|
||||||
default: true
|
|
||||||
- in: query
|
|
||||||
name: word
|
|
||||||
schema:
|
|
||||||
type: string
|
|
||||||
- in: query
|
|
||||||
name: status
|
|
||||||
schema:
|
|
||||||
$ref: '#/components/schemas/TitleStatus'
|
|
||||||
- in: query
|
|
||||||
name: rating
|
|
||||||
schema:
|
|
||||||
type: number
|
|
||||||
format: double
|
|
||||||
- in: query
|
|
||||||
name: release_year
|
|
||||||
schema:
|
|
||||||
type: integer
|
|
||||||
format: int32
|
|
||||||
- in: query
|
|
||||||
name: release_season
|
|
||||||
schema:
|
|
||||||
$ref: '#/components/schemas/ReleaseSeason'
|
|
||||||
- in: query
|
|
||||||
name: limit
|
|
||||||
schema:
|
|
||||||
type: integer
|
|
||||||
format: int32
|
|
||||||
default: 10
|
|
||||||
- in: query
|
|
||||||
name: offset
|
|
||||||
schema:
|
|
||||||
type: integer
|
|
||||||
format: int32
|
|
||||||
default: 0
|
|
||||||
- in: query
|
|
||||||
name: fields
|
|
||||||
schema:
|
|
||||||
type: string
|
|
||||||
default: all
|
|
||||||
responses:
|
|
||||||
'200':
|
|
||||||
description: List of titles with cursor
|
|
||||||
content:
|
|
||||||
application/json:
|
|
||||||
schema:
|
|
||||||
type: object
|
|
||||||
properties:
|
|
||||||
data:
|
|
||||||
type: array
|
|
||||||
items:
|
|
||||||
$ref: '#/components/schemas/Title'
|
|
||||||
description: List of titles
|
|
||||||
cursor:
|
|
||||||
$ref: "#/components/schemas/CursorObj"
|
|
||||||
required:
|
|
||||||
- data
|
|
||||||
- cursor
|
|
||||||
'204':
|
|
||||||
description: No titles found
|
|
||||||
'400':
|
|
||||||
description: Request params are not correct
|
|
||||||
'500':
|
|
||||||
description: Unknown server error
|
|
||||||
|
|
||||||
/titles/{title_id}:
|
/titles/{title_id}:
|
||||||
get:
|
$ref: "./paths/titles-id.yaml"
|
||||||
summary: Get title description
|
|
||||||
parameters:
|
|
||||||
- in: path
|
|
||||||
name: title_id
|
|
||||||
required: true
|
|
||||||
schema:
|
|
||||||
type: integer
|
|
||||||
format: int64
|
|
||||||
- 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
|
|
||||||
'400':
|
|
||||||
description: Request params are not correct
|
|
||||||
'500':
|
|
||||||
description: Unknown server error
|
|
||||||
'204':
|
|
||||||
description: No title found
|
|
||||||
|
|
||||||
/users/{user_id}:
|
/users/{user_id}:
|
||||||
get:
|
$ref: "./paths/users-id.yaml"
|
||||||
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
|
|
||||||
'400':
|
|
||||||
description: Request params are not correct
|
|
||||||
'500':
|
|
||||||
description: Unknown server error
|
|
||||||
|
|
||||||
/users/{user_id}/titles/:
|
/users/{user_id}/titles/:
|
||||||
get:
|
$ref: "./paths/users-id-titles.yaml"
|
||||||
summary: Get user titles
|
|
||||||
parameters:
|
|
||||||
- $ref: '#/components/parameters/cursor'
|
|
||||||
- in: path
|
|
||||||
name: user_id
|
|
||||||
required: true
|
|
||||||
schema:
|
|
||||||
type: string
|
|
||||||
- in: query
|
|
||||||
name: word
|
|
||||||
schema:
|
|
||||||
type: string
|
|
||||||
- in: query
|
|
||||||
name: status
|
|
||||||
schema:
|
|
||||||
$ref: '#/components/schemas/TitleStatus'
|
|
||||||
- in: query
|
|
||||||
name: watch_status
|
|
||||||
schema:
|
|
||||||
$ref: '#/components/schemas/UserTitleStatus'
|
|
||||||
- in: query
|
|
||||||
name: rating
|
|
||||||
schema:
|
|
||||||
type: number
|
|
||||||
format: double
|
|
||||||
- in: query
|
|
||||||
name: release_year
|
|
||||||
schema:
|
|
||||||
type: integer
|
|
||||||
format: int32
|
|
||||||
- in: query
|
|
||||||
name: release_season
|
|
||||||
schema:
|
|
||||||
$ref: '#/components/schemas/ReleaseSeason'
|
|
||||||
- in: query
|
|
||||||
name: limit
|
|
||||||
schema:
|
|
||||||
type: integer
|
|
||||||
format: int32
|
|
||||||
default: 10
|
|
||||||
- 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
|
|
||||||
'400':
|
|
||||||
description: Request params are not correct
|
|
||||||
'500':
|
|
||||||
description: Unknown server error
|
|
||||||
|
|
||||||
components:
|
components:
|
||||||
parameters:
|
parameters:
|
||||||
cursor: # example base64( {id: 1, param: 2019})
|
$ref: "./parameters/_index.yaml"
|
||||||
in: query
|
|
||||||
name: cursor
|
|
||||||
required: false
|
|
||||||
schema:
|
|
||||||
type: string
|
|
||||||
|
|
||||||
title_sort:
|
|
||||||
in: query
|
|
||||||
name: sort
|
|
||||||
required: false
|
|
||||||
schema:
|
|
||||||
$ref: '#/components/schemas/TitleSort'
|
|
||||||
|
|
||||||
schemas:
|
schemas:
|
||||||
CursorObj:
|
$ref: "./schemas/_index.yaml"
|
||||||
type: object
|
|
||||||
required:
|
|
||||||
- id
|
|
||||||
properties:
|
|
||||||
id:
|
|
||||||
type: integer
|
|
||||||
format: int64
|
|
||||||
param:
|
|
||||||
type: string
|
|
||||||
|
|
||||||
TitleSort:
|
|
||||||
type: string
|
|
||||||
description: Title sort order
|
|
||||||
default: id
|
|
||||||
enum:
|
|
||||||
- id
|
|
||||||
- year
|
|
||||||
- rating
|
|
||||||
- views
|
|
||||||
|
|
||||||
Image:
|
|
||||||
type: object
|
|
||||||
properties:
|
|
||||||
id:
|
|
||||||
type: integer
|
|
||||||
format: int64
|
|
||||||
storage_type:
|
|
||||||
type: string
|
|
||||||
image_path:
|
|
||||||
type: string
|
|
||||||
|
|
||||||
TitleStatus:
|
|
||||||
type: string
|
|
||||||
description: Title status
|
|
||||||
enum:
|
|
||||||
- finished
|
|
||||||
- ongoing
|
|
||||||
- planned
|
|
||||||
|
|
||||||
ReleaseSeason:
|
|
||||||
type: string
|
|
||||||
description: Title release season
|
|
||||||
enum:
|
|
||||||
- winter
|
|
||||||
- spring
|
|
||||||
- summer
|
|
||||||
- fall
|
|
||||||
|
|
||||||
UserTitleStatus:
|
|
||||||
type: string
|
|
||||||
description: User's title status
|
|
||||||
enum:
|
|
||||||
- finished
|
|
||||||
- planned
|
|
||||||
- dropped
|
|
||||||
- in-progress
|
|
||||||
|
|
||||||
Review:
|
|
||||||
type: object
|
|
||||||
additionalProperties: true
|
|
||||||
|
|
||||||
Tag:
|
|
||||||
type: object
|
|
||||||
description: "A localized tag: keys are language codes (ISO 639-1), values are tag names"
|
|
||||||
additionalProperties:
|
|
||||||
type: string
|
|
||||||
example:
|
|
||||||
en: "Shojo"
|
|
||||||
ru: "Сёдзё"
|
|
||||||
ja: "少女"
|
|
||||||
|
|
||||||
Tags:
|
|
||||||
type: array
|
|
||||||
description: "Array of localized tags"
|
|
||||||
items:
|
|
||||||
$ref: '#/components/schemas/Tag'
|
|
||||||
example:
|
|
||||||
- en: "Shojo"
|
|
||||||
ru: "Сёдзё"
|
|
||||||
ja: "少女"
|
|
||||||
- en: "Shounen"
|
|
||||||
ru: "Сёнен"
|
|
||||||
ja: "少年"
|
|
||||||
|
|
||||||
Studio:
|
|
||||||
type: object
|
|
||||||
required:
|
|
||||||
- id
|
|
||||||
- name
|
|
||||||
properties:
|
|
||||||
id:
|
|
||||||
type: integer
|
|
||||||
format: int64
|
|
||||||
name:
|
|
||||||
type: string
|
|
||||||
poster:
|
|
||||||
$ref: '#/components/schemas/Image'
|
|
||||||
description:
|
|
||||||
type: string
|
|
||||||
|
|
||||||
|
|
||||||
Title:
|
|
||||||
type: object
|
|
||||||
required:
|
|
||||||
- id
|
|
||||||
- title_names
|
|
||||||
- tags
|
|
||||||
properties:
|
|
||||||
id:
|
|
||||||
type: integer
|
|
||||||
format: int64
|
|
||||||
description: Unique title ID (primary key)
|
|
||||||
example: 1
|
|
||||||
title_names:
|
|
||||||
type: object
|
|
||||||
description: "Localized titles. Key = language (ISO 639-1), value = list of names"
|
|
||||||
additionalProperties:
|
|
||||||
type: array
|
|
||||||
items:
|
|
||||||
type: string
|
|
||||||
example: "Attack on Titan"
|
|
||||||
minItems: 1
|
|
||||||
example: ["Attack on Titan", "AoT"]
|
|
||||||
example:
|
|
||||||
en: ["Attack on Titan", "AoT"]
|
|
||||||
ru: ["Атака титанов", "Титаны"]
|
|
||||||
ja: ["進撃の巨人"]
|
|
||||||
studio:
|
|
||||||
$ref: '#/components/schemas/Studio'
|
|
||||||
tags:
|
|
||||||
$ref: '#/components/schemas/Tags'
|
|
||||||
poster:
|
|
||||||
$ref: '#/components/schemas/Image'
|
|
||||||
title_status:
|
|
||||||
$ref: '#/components/schemas/TitleStatus'
|
|
||||||
rating:
|
|
||||||
type: number
|
|
||||||
format: double
|
|
||||||
rating_count:
|
|
||||||
type: integer
|
|
||||||
format: int32
|
|
||||||
release_year:
|
|
||||||
type: integer
|
|
||||||
format: int32
|
|
||||||
release_season:
|
|
||||||
$ref: '#/components/schemas/ReleaseSeason'
|
|
||||||
episodes_aired:
|
|
||||||
type: integer
|
|
||||||
format: int32
|
|
||||||
episodes_all:
|
|
||||||
type: integer
|
|
||||||
format: int32
|
|
||||||
episodes_len:
|
|
||||||
type: object
|
|
||||||
additionalProperties:
|
|
||||||
type: number
|
|
||||||
format: double
|
|
||||||
additionalProperties: true
|
|
||||||
|
|
||||||
User:
|
|
||||||
type: object
|
|
||||||
properties:
|
|
||||||
id:
|
|
||||||
type: integer
|
|
||||||
format: int64
|
|
||||||
description: Unique user ID (primary key)
|
|
||||||
example: 1
|
|
||||||
avatar_id:
|
|
||||||
type: integer
|
|
||||||
format: int64
|
|
||||||
description: ID of the user avatar (references images table)
|
|
||||||
example: null
|
|
||||||
mail:
|
|
||||||
type: string
|
|
||||||
format: email
|
|
||||||
description: User email
|
|
||||||
example: "john.doe@example.com"
|
|
||||||
nickname:
|
|
||||||
type: string
|
|
||||||
description: Username (alphanumeric + _ or -)
|
|
||||||
maxLength: 16
|
|
||||||
example: "john_doe_42"
|
|
||||||
disp_name:
|
|
||||||
type: string
|
|
||||||
description: Display name
|
|
||||||
maxLength: 32
|
|
||||||
example: "John Doe"
|
|
||||||
user_desc:
|
|
||||||
type: string
|
|
||||||
description: User description
|
|
||||||
maxLength: 512
|
|
||||||
example: "Just a regular user."
|
|
||||||
creation_date:
|
|
||||||
type: string
|
|
||||||
format: date-time
|
|
||||||
description: Timestamp when the user was created
|
|
||||||
example: "2025-10-10T23:45:47.908073Z"
|
|
||||||
required:
|
|
||||||
- user_id
|
|
||||||
- nickname
|
|
||||||
# - creation_date
|
|
||||||
|
|
||||||
UserTitle:
|
|
||||||
type: object
|
|
||||||
required:
|
|
||||||
- user_id
|
|
||||||
- title_id
|
|
||||||
- status
|
|
||||||
properties:
|
|
||||||
user_id:
|
|
||||||
type: integer
|
|
||||||
format: int64
|
|
||||||
title_id:
|
|
||||||
type: integer
|
|
||||||
format: int64
|
|
||||||
status:
|
|
||||||
$ref: '#/components/schemas/UserTitleStatus'
|
|
||||||
rate:
|
|
||||||
type: integer
|
|
||||||
format: int32
|
|
||||||
review_id:
|
|
||||||
type: integer
|
|
||||||
format: int64
|
|
||||||
ctime:
|
|
||||||
type: string
|
|
||||||
format: date-time
|
|
||||||
additionalProperties: true
|
|
||||||
|
|
|
||||||
4
api/parameters/_index.yaml
Normal file
4
api/parameters/_index.yaml
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
cursor:
|
||||||
|
$ref: "./cursor.yaml"
|
||||||
|
title_sort:
|
||||||
|
$ref: "./title_sort.yaml"
|
||||||
5
api/parameters/cursor.yaml
Normal file
5
api/parameters/cursor.yaml
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
in: query
|
||||||
|
name: cursor
|
||||||
|
required: false
|
||||||
|
schema:
|
||||||
|
type: string
|
||||||
5
api/parameters/title_sort.yaml
Normal file
5
api/parameters/title_sort.yaml
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
in: query
|
||||||
|
name: sort
|
||||||
|
required: false
|
||||||
|
schema:
|
||||||
|
$ref: '../schemas/TitleSort.yaml'
|
||||||
29
api/paths/titles-id.yaml
Normal file
29
api/paths/titles-id.yaml
Normal file
|
|
@ -0,0 +1,29 @@
|
||||||
|
get:
|
||||||
|
summary: Get title description
|
||||||
|
parameters:
|
||||||
|
- in: path
|
||||||
|
name: title_id
|
||||||
|
required: true
|
||||||
|
schema:
|
||||||
|
type: integer
|
||||||
|
format: int64
|
||||||
|
- in: query
|
||||||
|
name: fields
|
||||||
|
schema:
|
||||||
|
type: string
|
||||||
|
default: all
|
||||||
|
responses:
|
||||||
|
'200':
|
||||||
|
description: Title description
|
||||||
|
content:
|
||||||
|
application/json:
|
||||||
|
schema:
|
||||||
|
$ref: "../schemas/Title.yaml"
|
||||||
|
'404':
|
||||||
|
description: Title not found
|
||||||
|
'400':
|
||||||
|
description: Request params are not correct
|
||||||
|
'500':
|
||||||
|
description: Unknown server error
|
||||||
|
'204':
|
||||||
|
description: No title found
|
||||||
73
api/paths/titles.yaml
Normal file
73
api/paths/titles.yaml
Normal file
|
|
@ -0,0 +1,73 @@
|
||||||
|
get:
|
||||||
|
summary: Get titles
|
||||||
|
parameters:
|
||||||
|
- $ref: ../parameters/cursor.yaml
|
||||||
|
- $ref: ../parameters/title_sort.yaml
|
||||||
|
- in: query
|
||||||
|
name: sort_forward
|
||||||
|
schema:
|
||||||
|
type: boolean
|
||||||
|
default: true
|
||||||
|
- in: query
|
||||||
|
name: word
|
||||||
|
schema:
|
||||||
|
type: string
|
||||||
|
- in: query
|
||||||
|
name: status
|
||||||
|
schema:
|
||||||
|
$ref: '../schemas/enums/TitleStatus.yaml'
|
||||||
|
- in: query
|
||||||
|
name: rating
|
||||||
|
schema:
|
||||||
|
type: number
|
||||||
|
format: double
|
||||||
|
- in: query
|
||||||
|
name: release_year
|
||||||
|
schema:
|
||||||
|
type: integer
|
||||||
|
format: int32
|
||||||
|
- in: query
|
||||||
|
name: release_season
|
||||||
|
schema:
|
||||||
|
$ref: '../schemas/enums/ReleaseSeason.yaml'
|
||||||
|
- in: query
|
||||||
|
name: limit
|
||||||
|
schema:
|
||||||
|
type: integer
|
||||||
|
format: int32
|
||||||
|
default: 10
|
||||||
|
- in: query
|
||||||
|
name: offset
|
||||||
|
schema:
|
||||||
|
type: integer
|
||||||
|
format: int32
|
||||||
|
default: 0
|
||||||
|
- in: query
|
||||||
|
name: fields
|
||||||
|
schema:
|
||||||
|
type: string
|
||||||
|
default: all
|
||||||
|
responses:
|
||||||
|
'200':
|
||||||
|
description: List of titles with cursor
|
||||||
|
content:
|
||||||
|
application/json:
|
||||||
|
schema:
|
||||||
|
type: object
|
||||||
|
properties:
|
||||||
|
data:
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
$ref: '../schemas/Title.yaml'
|
||||||
|
description: List of titles
|
||||||
|
cursor:
|
||||||
|
$ref: '../schemas/CursorObj.yaml'
|
||||||
|
required:
|
||||||
|
- data
|
||||||
|
- cursor
|
||||||
|
'204':
|
||||||
|
description: No titles found
|
||||||
|
'400':
|
||||||
|
description: Request params are not correct
|
||||||
|
'500':
|
||||||
|
description: Unknown server error
|
||||||
61
api/paths/users-id-titles.yaml
Normal file
61
api/paths/users-id-titles.yaml
Normal file
|
|
@ -0,0 +1,61 @@
|
||||||
|
get:
|
||||||
|
summary: Get user titles
|
||||||
|
parameters:
|
||||||
|
- $ref: '../parameters/cursor.yaml'
|
||||||
|
- in: path
|
||||||
|
name: user_id
|
||||||
|
required: true
|
||||||
|
schema:
|
||||||
|
type: string
|
||||||
|
- in: query
|
||||||
|
name: word
|
||||||
|
schema:
|
||||||
|
type: string
|
||||||
|
- in: query
|
||||||
|
name: status
|
||||||
|
schema:
|
||||||
|
$ref: '../schemas/enums/TitleStatus.yaml'
|
||||||
|
- in: query
|
||||||
|
name: watch_status
|
||||||
|
schema:
|
||||||
|
$ref: '../schemas/enums/UserTitleStatus.yaml'
|
||||||
|
- in: query
|
||||||
|
name: rating
|
||||||
|
schema:
|
||||||
|
type: number
|
||||||
|
format: double
|
||||||
|
- in: query
|
||||||
|
name: release_year
|
||||||
|
schema:
|
||||||
|
type: integer
|
||||||
|
format: int32
|
||||||
|
- in: query
|
||||||
|
name: release_season
|
||||||
|
schema:
|
||||||
|
$ref: '../schemas/enums/ReleaseSeason.yaml'
|
||||||
|
- in: query
|
||||||
|
name: limit
|
||||||
|
schema:
|
||||||
|
type: integer
|
||||||
|
format: int32
|
||||||
|
default: 10
|
||||||
|
- in: query
|
||||||
|
name: fields
|
||||||
|
schema:
|
||||||
|
type: string
|
||||||
|
default: all
|
||||||
|
responses:
|
||||||
|
'200':
|
||||||
|
description: List of user titles
|
||||||
|
content:
|
||||||
|
application/json:
|
||||||
|
schema:
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
$ref: '../schemas/UserTitle.yaml'
|
||||||
|
'204':
|
||||||
|
description: No titles found
|
||||||
|
'400':
|
||||||
|
description: Request params are not correct
|
||||||
|
'500':
|
||||||
|
description: Unknown server error
|
||||||
26
api/paths/users-id.yaml
Normal file
26
api/paths/users-id.yaml
Normal file
|
|
@ -0,0 +1,26 @@
|
||||||
|
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: '../schemas/User.yaml'
|
||||||
|
'404':
|
||||||
|
description: User not found
|
||||||
|
'400':
|
||||||
|
description: Request params are not correct
|
||||||
|
'500':
|
||||||
|
description: Unknown server error
|
||||||
9
api/schemas/CursorObj.yaml
Normal file
9
api/schemas/CursorObj.yaml
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
type: object
|
||||||
|
required:
|
||||||
|
- id
|
||||||
|
properties:
|
||||||
|
id:
|
||||||
|
type: integer
|
||||||
|
format: int64
|
||||||
|
param:
|
||||||
|
type: string
|
||||||
9
api/schemas/Image.yaml
Normal file
9
api/schemas/Image.yaml
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
type: object
|
||||||
|
properties:
|
||||||
|
id:
|
||||||
|
type: integer
|
||||||
|
format: int64
|
||||||
|
storage_type:
|
||||||
|
type: string
|
||||||
|
image_path:
|
||||||
|
type: string
|
||||||
2
api/schemas/Review.yaml
Normal file
2
api/schemas/Review.yaml
Normal file
|
|
@ -0,0 +1,2 @@
|
||||||
|
type: object
|
||||||
|
additionalProperties: true
|
||||||
14
api/schemas/Studio.yaml
Normal file
14
api/schemas/Studio.yaml
Normal file
|
|
@ -0,0 +1,14 @@
|
||||||
|
type: object
|
||||||
|
required:
|
||||||
|
- id
|
||||||
|
- name
|
||||||
|
properties:
|
||||||
|
id:
|
||||||
|
type: integer
|
||||||
|
format: int64
|
||||||
|
name:
|
||||||
|
type: string
|
||||||
|
poster:
|
||||||
|
$ref: ./Image.yaml
|
||||||
|
description:
|
||||||
|
type: string
|
||||||
8
api/schemas/Tag.yaml
Normal file
8
api/schemas/Tag.yaml
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
type: object
|
||||||
|
description: 'A localized tag: keys are language codes (ISO 639-1), values are tag names'
|
||||||
|
additionalProperties:
|
||||||
|
type: string
|
||||||
|
example:
|
||||||
|
en: Shojo
|
||||||
|
ru: Сёдзё
|
||||||
|
ja: 少女
|
||||||
11
api/schemas/Tags.yaml
Normal file
11
api/schemas/Tags.yaml
Normal file
|
|
@ -0,0 +1,11 @@
|
||||||
|
type: array
|
||||||
|
description: Array of localized tags
|
||||||
|
items:
|
||||||
|
$ref: ./Tag.yaml
|
||||||
|
example:
|
||||||
|
- en: Shojo
|
||||||
|
ru: Сёдзё
|
||||||
|
ja: 少女
|
||||||
|
- en: Shounen
|
||||||
|
ru: Сёнен
|
||||||
|
ja: 少年
|
||||||
63
api/schemas/Title.yaml
Normal file
63
api/schemas/Title.yaml
Normal file
|
|
@ -0,0 +1,63 @@
|
||||||
|
type: object
|
||||||
|
required:
|
||||||
|
- id
|
||||||
|
- title_names
|
||||||
|
- tags
|
||||||
|
properties:
|
||||||
|
id:
|
||||||
|
type: integer
|
||||||
|
format: int64
|
||||||
|
description: Unique title ID (primary key)
|
||||||
|
example: 1
|
||||||
|
title_names:
|
||||||
|
type: object
|
||||||
|
description: Localized titles. Key = language (ISO 639-1), value = list of names
|
||||||
|
additionalProperties:
|
||||||
|
type: array
|
||||||
|
items:
|
||||||
|
type: string
|
||||||
|
example: Attack on Titan
|
||||||
|
minItems: 1
|
||||||
|
example:
|
||||||
|
- Attack on Titan
|
||||||
|
- AoT
|
||||||
|
example:
|
||||||
|
en:
|
||||||
|
- Attack on Titan
|
||||||
|
- AoT
|
||||||
|
ru:
|
||||||
|
- Атака титанов
|
||||||
|
- Титаны
|
||||||
|
ja:
|
||||||
|
- 進撃の巨人
|
||||||
|
studio:
|
||||||
|
$ref: ./Studio.yaml
|
||||||
|
tags:
|
||||||
|
$ref: ./Tags.yaml
|
||||||
|
poster:
|
||||||
|
$ref: ./Image.yaml
|
||||||
|
title_status:
|
||||||
|
$ref: ./enums/TitleStatus.yaml
|
||||||
|
rating:
|
||||||
|
type: number
|
||||||
|
format: double
|
||||||
|
rating_count:
|
||||||
|
type: integer
|
||||||
|
format: int32
|
||||||
|
release_year:
|
||||||
|
type: integer
|
||||||
|
format: int32
|
||||||
|
release_season:
|
||||||
|
$ref: ./enums/ReleaseSeason.yaml
|
||||||
|
episodes_aired:
|
||||||
|
type: integer
|
||||||
|
format: int32
|
||||||
|
episodes_all:
|
||||||
|
type: integer
|
||||||
|
format: int32
|
||||||
|
episodes_len:
|
||||||
|
type: object
|
||||||
|
additionalProperties:
|
||||||
|
type: number
|
||||||
|
format: double
|
||||||
|
additionalProperties: true
|
||||||
8
api/schemas/TitleSort.yaml
Normal file
8
api/schemas/TitleSort.yaml
Normal file
|
|
@ -0,0 +1,8 @@
|
||||||
|
type: string
|
||||||
|
description: Title sort order
|
||||||
|
default: id
|
||||||
|
enum:
|
||||||
|
- id
|
||||||
|
- year
|
||||||
|
- rating
|
||||||
|
- views
|
||||||
40
api/schemas/User.yaml
Normal file
40
api/schemas/User.yaml
Normal file
|
|
@ -0,0 +1,40 @@
|
||||||
|
type: object
|
||||||
|
properties:
|
||||||
|
id:
|
||||||
|
type: integer
|
||||||
|
format: int64
|
||||||
|
description: Unique user ID (primary key)
|
||||||
|
example: 1
|
||||||
|
avatar_id:
|
||||||
|
type: integer
|
||||||
|
format: int64
|
||||||
|
description: ID of the user avatar (references images table)
|
||||||
|
example: null
|
||||||
|
mail:
|
||||||
|
type: string
|
||||||
|
format: email
|
||||||
|
description: User email
|
||||||
|
example: john.doe@example.com
|
||||||
|
nickname:
|
||||||
|
type: string
|
||||||
|
description: Username (alphanumeric + _ or -)
|
||||||
|
maxLength: 16
|
||||||
|
example: john_doe_42
|
||||||
|
disp_name:
|
||||||
|
type: string
|
||||||
|
description: Display name
|
||||||
|
maxLength: 32
|
||||||
|
example: John Doe
|
||||||
|
user_desc:
|
||||||
|
type: string
|
||||||
|
description: User description
|
||||||
|
maxLength: 512
|
||||||
|
example: Just a regular user.
|
||||||
|
creation_date:
|
||||||
|
type: string
|
||||||
|
format: date-time
|
||||||
|
description: Timestamp when the user was created
|
||||||
|
example: '2025-10-10T23:45:47.908073Z'
|
||||||
|
required:
|
||||||
|
- user_id
|
||||||
|
- nickname
|
||||||
24
api/schemas/UserTitle.yaml
Normal file
24
api/schemas/UserTitle.yaml
Normal file
|
|
@ -0,0 +1,24 @@
|
||||||
|
type: object
|
||||||
|
required:
|
||||||
|
- user_id
|
||||||
|
- title_id
|
||||||
|
- status
|
||||||
|
properties:
|
||||||
|
user_id:
|
||||||
|
type: integer
|
||||||
|
format: int64
|
||||||
|
title_id:
|
||||||
|
type: integer
|
||||||
|
format: int64
|
||||||
|
status:
|
||||||
|
$ref: ./enums/UserTitleStatus.yaml
|
||||||
|
rate:
|
||||||
|
type: integer
|
||||||
|
format: int32
|
||||||
|
review_id:
|
||||||
|
type: integer
|
||||||
|
format: int64
|
||||||
|
ctime:
|
||||||
|
type: string
|
||||||
|
format: date-time
|
||||||
|
additionalProperties: true
|
||||||
26
api/schemas/_index.yaml
Normal file
26
api/schemas/_index.yaml
Normal file
|
|
@ -0,0 +1,26 @@
|
||||||
|
CursorObj:
|
||||||
|
$ref: ./CursorObj.yaml
|
||||||
|
TitleSort:
|
||||||
|
$ref: "./TitleSort.yaml"
|
||||||
|
Image:
|
||||||
|
$ref: "./Image.yaml"
|
||||||
|
TitleStatus:
|
||||||
|
$ref: "./enums/TitleStatus.yaml"
|
||||||
|
ReleaseSeason:
|
||||||
|
$ref: "./enums/ReleaseSeason.yaml"
|
||||||
|
UserTitleStatus:
|
||||||
|
$ref: "./enums/UserTitleStatus.yaml"
|
||||||
|
Review:
|
||||||
|
$ref: "./Review.yaml"
|
||||||
|
Tag:
|
||||||
|
$ref: "./Tag.yaml"
|
||||||
|
Tags:
|
||||||
|
$ref: "./Tags.yaml"
|
||||||
|
Studio:
|
||||||
|
$ref: "./Studio.yaml"
|
||||||
|
Title:
|
||||||
|
$ref: "./Title.yaml"
|
||||||
|
User:
|
||||||
|
$ref: "./User.yaml"
|
||||||
|
UserTitle:
|
||||||
|
$ref: "./UserTitle.yaml"
|
||||||
7
api/schemas/enums/ReleaseSeason.yaml
Normal file
7
api/schemas/enums/ReleaseSeason.yaml
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
type: string
|
||||||
|
description: Title release season
|
||||||
|
enum:
|
||||||
|
- winter
|
||||||
|
- spring
|
||||||
|
- summer
|
||||||
|
- fall
|
||||||
6
api/schemas/enums/TitleStatus.yaml
Normal file
6
api/schemas/enums/TitleStatus.yaml
Normal file
|
|
@ -0,0 +1,6 @@
|
||||||
|
type: string
|
||||||
|
description: Title status
|
||||||
|
enum:
|
||||||
|
- finished
|
||||||
|
- ongoing
|
||||||
|
- planned
|
||||||
7
api/schemas/enums/UserTitleStatus.yaml
Normal file
7
api/schemas/enums/UserTitleStatus.yaml
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
type: string
|
||||||
|
description: User's title status
|
||||||
|
enum:
|
||||||
|
- finished
|
||||||
|
- planned
|
||||||
|
- dropped
|
||||||
|
- in-progress
|
||||||
Loading…
Add table
Add a link
Reference in a new issue