diff --git a/api-docs.json b/api-docs.json
new file mode 100644
index 0000000..216e1a0
--- /dev/null
+++ b/api-docs.json
@@ -0,0 +1,2719 @@
+{
+ "openapi": "3.0.1",
+ "info": {
+ "title": "Cinetwork API",
+ "description": "Documentation of Cinetwork API",
+ "version": "1.0"
+ },
+ "servers": [
+ { "url": "http://localhost:56032", "description": "Generated server url" }
+ ],
+ "paths": {
+ "/api/v1/complaint/{complaintId}": {
+ "get": {
+ "tags": ["complaint-controller"],
+ "summary": "Получение жалобы по id",
+ "operationId": "getComplaintById",
+ "parameters": [
+ {
+ "name": "complaintId",
+ "in": "path",
+ "required": true,
+ "schema": { "type": "string", "format": "uuid" }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Жалоба найдена",
+ "content": {
+ "*/*": {
+ "schema": { "$ref": "#/components/schemas/ComplaintDto" }
+ }
+ }
+ },
+ "404": {
+ "description": "Жалоба не найдена",
+ "content": {
+ "*/*": { "schema": { "$ref": "#/components/schemas/ErrorDTO" } }
+ }
+ }
+ }
+ },
+ "put": {
+ "tags": ["complaint-controller"],
+ "summary": "Измененение статуса жалобы",
+ "operationId": "updateComplaintStatus",
+ "parameters": [
+ {
+ "name": "complaintId",
+ "in": "path",
+ "required": true,
+ "schema": { "type": "string", "format": "uuid" }
+ },
+ {
+ "name": "status",
+ "in": "query",
+ "required": true,
+ "schema": {
+ "type": "string",
+ "enum": ["OPEN", "IN_PROGRESS", "RESOLVED", "REJECTED"]
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Статус жалобы успешно изменен",
+ "content": {
+ "*/*": {
+ "schema": { "$ref": "#/components/schemas/ComplaintDto" }
+ }
+ }
+ },
+ "404": {
+ "description": "Жалоба не найдена",
+ "content": {
+ "*/*": { "schema": { "$ref": "#/components/schemas/ErrorDTO" } }
+ }
+ }
+ }
+ }
+ },
+ "/api/v1/anime": {
+ "get": {
+ "tags": ["anime-controller"],
+ "summary": "Поиск аниме по параметрам",
+ "description": "Возвращает страницу AnimeDto/AnimeCardDto в зависимости от параметра запроса dtoType",
+ "operationId": "getPage",
+ "parameters": [
+ {
+ "name": "searchCriteria",
+ "in": "query",
+ "required": true,
+ "schema": { "$ref": "#/components/schemas/AnimeSearchCriteria" }
+ },
+ {
+ "name": "dtoType",
+ "in": "query",
+ "required": true,
+ "schema": { "type": "string", "enum": ["CARD", "DEFAULT"] }
+ },
+ {
+ "name": "pageable",
+ "in": "query",
+ "required": true,
+ "schema": { "$ref": "#/components/schemas/Pageable" }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Аниме успешно создано",
+ "content": {
+ "*/*": { "schema": { "$ref": "#/components/schemas/Page" } }
+ }
+ },
+ "400": {
+ "description": "Параметры запроса не прошли валидацию",
+ "content": {
+ "*/*": { "schema": { "$ref": "#/components/schemas/ErrorDTO" } }
+ }
+ }
+ }
+ },
+ "put": {
+ "tags": ["anime-controller"],
+ "summary": "Обновление аниме",
+ "operationId": "updateById",
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": { "$ref": "#/components/schemas/UpdateAnimeRequest" }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "description": "Аниме успешно обновлено",
+ "content": {
+ "*/*": { "schema": { "$ref": "#/components/schemas/AnimeDTO" } }
+ }
+ },
+ "404": {
+ "description": "Аниме не найдено",
+ "content": {
+ "*/*": { "schema": { "$ref": "#/components/schemas/ErrorDTO" } }
+ }
+ }
+ }
+ },
+ "post": {
+ "tags": ["anime-controller"],
+ "summary": "Создание аниме",
+ "operationId": "createAnime",
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": { "$ref": "#/components/schemas/CreateAnimeRequest" }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "description": "Аниме успешно создано",
+ "content": {
+ "*/*": {
+ "schema": { "$ref": "#/components/schemas/CreatedAnimeDTO" }
+ }
+ }
+ },
+ "400": {
+ "description": "Аниме не прошло валидацию",
+ "content": {
+ "*/*": { "schema": { "$ref": "#/components/schemas/ErrorDTO" } }
+ }
+ }
+ }
+ }
+ },
+ "/api/v1/anime/group": {
+ "put": {
+ "tags": ["group-controller"],
+ "summary": "Обновление группы",
+ "operationId": "updateById_1",
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/UpdateAnimeGroupRequest"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "404": {
+ "description": "Группа не найдена",
+ "content": {
+ "*/*": { "schema": { "$ref": "#/components/schemas/ErrorDTO" } }
+ }
+ },
+ "200": {
+ "description": "Группа обновлена",
+ "content": {
+ "*/*": {
+ "schema": { "$ref": "#/components/schemas/AnimeGroupDTO" }
+ }
+ }
+ }
+ }
+ },
+ "post": {
+ "tags": ["group-controller"],
+ "summary": "Создание группы",
+ "operationId": "create_1",
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/CreateAnimeGroupRequest"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "201": {
+ "description": "Группа создана",
+ "content": {
+ "*/*": {
+ "schema": { "$ref": "#/components/schemas/AnimeGroupDTO" }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/v1/anime/group/delete-from-group": {
+ "put": {
+ "tags": ["group-controller"],
+ "summary": "Удаление списка аниме из группы по id группы и списку id amine",
+ "operationId": "deleteAnimeIdsFromGroup",
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/DeleteAnimeFromGroupRequest"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "description": "Группа удалена из списока аниме",
+ "content": {
+ "*/*": {
+ "schema": { "$ref": "#/components/schemas/AnimeGroupDTO" }
+ }
+ }
+ },
+ "404": {
+ "description": "Группа или ни одного аниме из списка не найдено",
+ "content": {
+ "*/*": { "schema": { "$ref": "#/components/schemas/ErrorDTO" } }
+ }
+ }
+ }
+ }
+ },
+ "/api/v1/anime/group/add-to-group": {
+ "put": {
+ "tags": ["group-controller"],
+ "summary": "Добавление списка аниме в группу по id группы и списку id amine",
+ "operationId": "addAnimeIdsToGroup",
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/AddAnimeToGroupRequest"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "404": {
+ "description": "Группа или ни одного аниме из списка не найдено",
+ "content": {
+ "*/*": { "schema": { "$ref": "#/components/schemas/ErrorDTO" } }
+ }
+ },
+ "200": {
+ "description": "Группа установлена в список аниме",
+ "content": {
+ "*/*": {
+ "schema": { "$ref": "#/components/schemas/AnimeGroupDTO" }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/v1/anime/episodes/{id}": {
+ "get": {
+ "tags": ["episodes-controller"],
+ "summary": "Получение эпизода по ID, с возможностью указания DtoType (DEFAULT/CARD), если тип не указан, будет выведен DEFAULT",
+ "operationId": "getEpisodeById",
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "required": true,
+ "schema": { "type": "string", "format": "uuid" }
+ },
+ {
+ "name": "dtoType",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "string",
+ "enum": ["CARD", "DEFAULT"],
+ "default": "DEFAULT"
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": { "*/*": { "schema": { "type": "object" } } }
+ }
+ }
+ },
+ "put": {
+ "tags": ["episodes-controller"],
+ "summary": "Редактирование эпизода",
+ "operationId": "updateEpisode",
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "required": true,
+ "schema": { "type": "string", "format": "uuid" }
+ }
+ ],
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": { "$ref": "#/components/schemas/UpdateEpisodeRequest" }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "*/*": { "schema": { "$ref": "#/components/schemas/EpisodeDTO" } }
+ }
+ }
+ }
+ },
+ "delete": {
+ "tags": ["episodes-controller"],
+ "summary": "Удаление эпизода",
+ "operationId": "deleteEpisode",
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "required": true,
+ "schema": { "type": "string", "format": "uuid" }
+ }
+ ],
+ "responses": { "200": { "description": "OK" } }
+ }
+ },
+ "/api/v1/anime/episodes/{id}/order/{newOrderId}": {
+ "put": {
+ "tags": ["episodes-controller"],
+ "summary": "Изменение порядка эпизода в списке",
+ "operationId": "updateEpisodeOrder",
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "required": true,
+ "schema": { "type": "string", "format": "uuid" }
+ },
+ {
+ "name": "newOrderId",
+ "in": "path",
+ "required": true,
+ "schema": { "type": "integer", "format": "int32" }
+ }
+ ],
+ "responses": { "200": { "description": "OK" } }
+ }
+ },
+ "/api/v1/anime/dubs/{id}": {
+ "get": {
+ "tags": ["dub-controller"],
+ "summary": "Получение дубляжа по id",
+ "operationId": "getDubById",
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "required": true,
+ "schema": { "type": "string", "format": "uuid" }
+ }
+ ],
+ "responses": {
+ "404": {
+ "description": "Дубляж не найден",
+ "content": {
+ "*/*": { "schema": { "$ref": "#/components/schemas/ErrorDTO" } }
+ }
+ },
+ "200": {
+ "description": "Дубляж найден",
+ "content": {
+ "*/*": { "schema": { "$ref": "#/components/schemas/DubDTO" } }
+ }
+ }
+ }
+ },
+ "put": {
+ "tags": ["dub-controller"],
+ "summary": "Обновление дубляжа по id",
+ "operationId": "updateDubName",
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "required": true,
+ "schema": { "type": "string", "format": "uuid" }
+ },
+ {
+ "name": "name",
+ "in": "query",
+ "required": true,
+ "schema": { "type": "string" }
+ }
+ ],
+ "responses": {
+ "404": {
+ "description": "Дубляж не найден",
+ "content": {
+ "*/*": { "schema": { "$ref": "#/components/schemas/ErrorDTO" } }
+ }
+ },
+ "200": {
+ "description": "Дубляж обновлен",
+ "content": {
+ "*/*": { "schema": { "$ref": "#/components/schemas/DubDTO" } }
+ }
+ }
+ }
+ },
+ "delete": {
+ "tags": ["dub-controller"],
+ "summary": "Удаление дубляжа",
+ "operationId": "deleteDub",
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "required": true,
+ "schema": { "type": "string", "format": "uuid" }
+ }
+ ],
+ "responses": {
+ "204": {
+ "description": "Оправляет 204 статус вне зависимости, удален дубляж или нет"
+ }
+ }
+ }
+ },
+ "/api/v1/anime/comments": {
+ "put": {
+ "tags": ["comments-controller"],
+ "summary": "Удаление комментария по id",
+ "operationId": "updateComment",
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": { "$ref": "#/components/schemas/UpdateCommentRequest" }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "404": {
+ "description": "Комментарий не найден",
+ "content": {
+ "*/*": { "schema": { "$ref": "#/components/schemas/ErrorDTO" } }
+ }
+ },
+ "400": {
+ "description": "Комментарий невалидный",
+ "content": {
+ "*/*": { "schema": { "$ref": "#/components/schemas/ErrorDTO" } }
+ }
+ },
+ "200": {
+ "description": "Комментарий обнавлен",
+ "content": {
+ "*/*": { "schema": { "$ref": "#/components/schemas/CommentDTO" } }
+ }
+ }
+ }
+ },
+ "post": {
+ "tags": ["comments-controller"],
+ "summary": "Создание комментария",
+ "operationId": "createComment",
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": { "$ref": "#/components/schemas/CreateCommentRequest" }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "404": {
+ "description": "Комментарий на который отвечают не найден",
+ "content": {
+ "*/*": { "schema": { "$ref": "#/components/schemas/ErrorDTO" } }
+ }
+ },
+ "400": {
+ "description": "Комментарий не валидный",
+ "content": {
+ "*/*": { "schema": { "$ref": "#/components/schemas/ErrorDTO" } }
+ }
+ },
+ "201": {
+ "description": "Комментарий создан",
+ "content": {
+ "*/*": { "schema": { "$ref": "#/components/schemas/CommentDTO" } }
+ }
+ }
+ }
+ }
+ },
+ "/api/v1/complaint": {
+ "post": {
+ "tags": ["complaint-controller"],
+ "summary": "Создание жалобы",
+ "operationId": "createComplaint",
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/CreateComplaintRequest"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "400": {
+ "description": "Создаваемая жалоба не прошла валидацию",
+ "content": {
+ "*/*": { "schema": { "$ref": "#/components/schemas/ErrorDTO" } }
+ }
+ },
+ "201": {
+ "description": "Жалоба успешно создана",
+ "content": {
+ "*/*": {
+ "schema": { "$ref": "#/components/schemas/ComplaintDto" }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/v1/complaint/search": {
+ "post": {
+ "tags": ["complaint-controller"],
+ "summary": "Поиск жалоб по фильтрам",
+ "operationId": "getComplaints",
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": { "$ref": "#/components/schemas/ComplaintSearchParams" }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "*/*": {
+ "schema": { "$ref": "#/components/schemas/PageComplaintDto" }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/v1/anime/title": {
+ "post": {
+ "tags": ["title-controller"],
+ "summary": "Создание тайтла",
+ "operationId": "create",
+ "parameters": [
+ {
+ "name": "createAnimeTitleRequest",
+ "in": "query",
+ "required": true,
+ "schema": { "$ref": "#/components/schemas/CreateAnimeTitleRequest" }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "*/*": {
+ "schema": { "$ref": "#/components/schemas/AnimeTitleDTO" }
+ }
+ }
+ }
+ }
+ },
+ "patch": {
+ "tags": ["title-controller"],
+ "summary": "Обновление тайтла",
+ "operationId": "updateById_2",
+ "parameters": [
+ {
+ "name": "updateAnimeTitleRequest",
+ "in": "query",
+ "required": true,
+ "schema": { "$ref": "#/components/schemas/UpdateAnimeTitleRequest" }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Тайтл успешно обновлен",
+ "content": {
+ "*/*": {
+ "schema": { "$ref": "#/components/schemas/AnimeTitleDTO" }
+ }
+ }
+ },
+ "404": {
+ "description": "Тайтл не найден",
+ "content": {
+ "*/*": { "schema": { "$ref": "#/components/schemas/ErrorDTO" } }
+ }
+ }
+ }
+ }
+ },
+ "/api/v1/anime/title/batch": {
+ "post": {
+ "tags": ["title-controller"],
+ "summary": "Создание списка тайтлов",
+ "operationId": "createAll",
+ "parameters": [
+ {
+ "name": "createAnimeTitleRequests",
+ "in": "query",
+ "required": true,
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/CreateAnimeTitleRequest"
+ }
+ }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "*/*": {
+ "schema": {
+ "type": "array",
+ "items": { "$ref": "#/components/schemas/AnimeTitleDTO" }
+ }
+ }
+ }
+ }
+ }
+ },
+ "delete": {
+ "tags": ["title-controller"],
+ "summary": "Удаление тайтлов по списку id",
+ "operationId": "deleteAllById",
+ "parameters": [
+ {
+ "name": "ids",
+ "in": "query",
+ "required": true,
+ "schema": {
+ "type": "array",
+ "items": { "type": "string", "format": "uuid" }
+ }
+ }
+ ],
+ "responses": {
+ "204": { "description": "Тайтлы успешно удален или не найден" }
+ }
+ },
+ "patch": {
+ "tags": ["title-controller"],
+ "summary": "Обновление тайтла списком",
+ "operationId": "updateAllById",
+ "parameters": [
+ {
+ "name": "updateAnimeTitleRequests",
+ "in": "query",
+ "required": true,
+ "schema": {
+ "type": "array",
+ "items": {
+ "$ref": "#/components/schemas/UpdateAnimeTitleRequest"
+ }
+ }
+ }
+ ],
+ "responses": {
+ "404": {
+ "description": "Ни один из тайтлов не найден",
+ "content": {
+ "*/*": { "schema": { "$ref": "#/components/schemas/ErrorDTO" } }
+ }
+ },
+ "200": {
+ "description": "Тайтлы успешно обновлены",
+ "content": {
+ "*/*": {
+ "schema": {
+ "type": "array",
+ "items": { "$ref": "#/components/schemas/AnimeTitleDTO" }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/v1/anime/increasePopularity": {
+ "post": {
+ "tags": ["anime-controller"],
+ "summary": "Увеличение популярности аниме по id на 1",
+ "operationId": "increasePopularity",
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": {
+ "$ref": "#/components/schemas/IncreasePopularityRequest"
+ }
+ }
+ },
+ "required": true
+ },
+ "responses": { "200": { "description": "OK" } }
+ }
+ },
+ "/api/v1/anime/episodes": {
+ "post": {
+ "tags": ["episodes-controller"],
+ "summary": "Создание эпизода",
+ "operationId": "createEpisode",
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": { "$ref": "#/components/schemas/CreateEpisodeRequest" }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "*/*": { "schema": { "$ref": "#/components/schemas/EpisodeDTO" } }
+ }
+ }
+ }
+ }
+ },
+ "/api/v1/anime/episodes/{id}/view": {
+ "post": {
+ "tags": ["episodes-controller"],
+ "summary": "Добавление просмотра эпизода",
+ "operationId": "addView",
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "required": true,
+ "schema": { "type": "string", "format": "uuid" }
+ }
+ ],
+ "responses": { "200": { "description": "OK" } }
+ }
+ },
+ "/api/v1/anime/dubs": {
+ "post": {
+ "tags": ["dub-controller"],
+ "summary": "Создание дубляжа",
+ "operationId": "createDub",
+ "requestBody": {
+ "content": {
+ "application/json": {
+ "schema": { "$ref": "#/components/schemas/CreateDubRequest" }
+ }
+ },
+ "required": true
+ },
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "*/*": { "schema": { "$ref": "#/components/schemas/DubDTO" } }
+ }
+ }
+ }
+ }
+ },
+ "/api/v1/anime/dubs/{dubId}/episodes/{episodeId}": {
+ "post": {
+ "tags": ["dub-controller"],
+ "summary": "Добавление дубляжа к эпизоду",
+ "operationId": "addDubToEpisode",
+ "parameters": [
+ {
+ "name": "dubId",
+ "in": "path",
+ "required": true,
+ "schema": { "type": "string", "format": "uuid" }
+ },
+ {
+ "name": "episodeId",
+ "in": "path",
+ "required": true,
+ "schema": { "type": "string", "format": "uuid" }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Дубляж успешно добавлен к эпизоду",
+ "content": {
+ "*/*": { "schema": { "$ref": "#/components/schemas/DubDTO" } }
+ }
+ },
+ "404": {
+ "description": "Дубляж или эпизод не найден",
+ "content": {
+ "*/*": { "schema": { "$ref": "#/components/schemas/ErrorDTO" } }
+ }
+ }
+ }
+ },
+ "delete": {
+ "tags": ["dub-controller"],
+ "summary": "Удаление дубляжа к эпизоду",
+ "operationId": "removeDubFromEpisode",
+ "parameters": [
+ {
+ "name": "dubId",
+ "in": "path",
+ "required": true,
+ "schema": { "type": "string", "format": "uuid" }
+ },
+ {
+ "name": "episodeId",
+ "in": "path",
+ "required": true,
+ "schema": { "type": "string", "format": "uuid" }
+ }
+ ],
+ "responses": {
+ "200": { "description": "Дубляж успешно удален из эпизода" },
+ "404": {
+ "description": "Дубляж или эпизод не найден",
+ "content": {
+ "*/*": { "schema": { "$ref": "#/components/schemas/ErrorDTO" } }
+ }
+ }
+ }
+ }
+ },
+ "/api/v1/anime/{id}": {
+ "get": {
+ "tags": ["anime-controller"],
+ "summary": "Поиск аниме по id",
+ "operationId": "findById",
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "required": true,
+ "schema": { "type": "string", "format": "uuid" }
+ }
+ ],
+ "responses": {
+ "404": {
+ "description": "Аниме не найдено",
+ "content": {
+ "*/*": { "schema": { "$ref": "#/components/schemas/ErrorDTO" } }
+ }
+ },
+ "200": {
+ "description": "Аниме найдено",
+ "content": {
+ "*/*": { "schema": { "$ref": "#/components/schemas/AnimeDTO" } }
+ }
+ }
+ }
+ },
+ "delete": {
+ "tags": ["anime-controller"],
+ "summary": "Удаление аниме",
+ "operationId": "deleteById",
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "required": true,
+ "schema": { "type": "string", "format": "uuid" }
+ }
+ ],
+ "responses": {
+ "204": {
+ "description": "Оправляет 204 статус вне зависимости, удалено аниме или нет"
+ }
+ }
+ }
+ },
+ "/api/v1/anime/{animeId}/similar": {
+ "get": {
+ "tags": ["anime-controller"],
+ "summary": "Получение страницы похожих аниме по animeId",
+ "operationId": "findSimilar",
+ "parameters": [
+ {
+ "name": "animeId",
+ "in": "path",
+ "required": true,
+ "schema": { "type": "string", "format": "uuid" }
+ },
+ {
+ "name": "pageable",
+ "in": "query",
+ "required": true,
+ "schema": { "$ref": "#/components/schemas/Pageable" }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "*/*": {
+ "schema": { "$ref": "#/components/schemas/PageAnimeCardDTO" }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/v1/anime/types": {
+ "get": {
+ "tags": ["anime-controller"],
+ "summary": "Получение списка влзможных типов аниме",
+ "operationId": "getAllTypes",
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "*/*": {
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "enum": [
+ "TV",
+ "MOVIE",
+ "OVA",
+ "ONA",
+ "SPECIAL",
+ "TV_SPECIAL",
+ "MUSIC",
+ "PV",
+ "CM"
+ ]
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/v1/anime/title/{id}": {
+ "get": {
+ "tags": ["title-controller"],
+ "summary": "Получение тайтла по id",
+ "operationId": "getById",
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "required": true,
+ "schema": { "type": "string", "format": "uuid" }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Тайтл найден",
+ "content": {
+ "*/*": {
+ "schema": { "$ref": "#/components/schemas/AnimeTitleDTO" }
+ }
+ }
+ },
+ "404": {
+ "description": "Тайтл не найден",
+ "content": {
+ "*/*": { "schema": { "$ref": "#/components/schemas/ErrorDTO" } }
+ }
+ }
+ }
+ },
+ "delete": {
+ "tags": ["title-controller"],
+ "summary": "Удаление тайтла",
+ "operationId": "deleteById_1",
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "required": true,
+ "schema": { "type": "string", "format": "uuid" }
+ }
+ ],
+ "responses": {
+ "204": { "description": "Тайтлы успешно удален или не найден" }
+ }
+ }
+ },
+ "/api/v1/anime/title/page": {
+ "get": {
+ "tags": ["title-controller"],
+ "summary": "Постраничное получение всех тайтлов",
+ "operationId": "getPage_1",
+ "parameters": [
+ {
+ "name": "page",
+ "in": "query",
+ "required": true,
+ "schema": { "type": "integer", "format": "int32" }
+ },
+ {
+ "name": "size",
+ "in": "query",
+ "required": true,
+ "schema": { "type": "integer", "format": "int32" }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "*/*": {
+ "schema": { "$ref": "#/components/schemas/PageAnimeTitleDTO" }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/v1/anime/title/by-anime/{animeId}": {
+ "get": {
+ "tags": ["title-controller"],
+ "summary": "Получение списка тайтлов по аниме id",
+ "operationId": "getAllByAnimeId",
+ "parameters": [
+ {
+ "name": "animeId",
+ "in": "path",
+ "required": true,
+ "schema": { "type": "string", "format": "uuid" }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "Список тайтлов по аниме id успешно найден",
+ "content": {
+ "*/*": {
+ "schema": {
+ "type": "array",
+ "items": { "$ref": "#/components/schemas/AnimeTitleDTO" }
+ }
+ }
+ }
+ },
+ "404": {
+ "description": "Аниме не найдео",
+ "content": {
+ "*/*": { "schema": { "$ref": "#/components/schemas/ErrorDTO" } }
+ }
+ }
+ }
+ }
+ },
+ "/api/v1/anime/statuses": {
+ "get": {
+ "tags": ["anime-controller"],
+ "summary": "Получение списка влзможных статусов аниме",
+ "operationId": "getAllStatuses",
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "*/*": {
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "enum": ["ANNOUNCE", "ONGOING", "RELEASED"]
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/v1/anime/mpaaratings": {
+ "get": {
+ "tags": ["anime-controller"],
+ "summary": "Получение списка влзможных mpa рейтингов",
+ "operationId": "getAllMpaaRatings",
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "*/*": {
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "enum": ["G", "PG", "PG_13", "R", "NC_17"]
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/v1/anime/group/{id}": {
+ "get": {
+ "tags": ["group-controller"],
+ "summary": "Получение группы по id",
+ "operationId": "getById_1",
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "required": true,
+ "schema": { "type": "string", "format": "uuid" }
+ }
+ ],
+ "responses": {
+ "404": {
+ "description": "Группа не найдена",
+ "content": {
+ "*/*": { "schema": { "$ref": "#/components/schemas/ErrorDTO" } }
+ }
+ },
+ "200": {
+ "description": "Группа найдена",
+ "content": {
+ "*/*": {
+ "schema": { "$ref": "#/components/schemas/AnimeGroupDTO" }
+ }
+ }
+ }
+ }
+ },
+ "delete": {
+ "tags": ["group-controller"],
+ "summary": "Удаление группы",
+ "operationId": "deleteById_2",
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "required": true,
+ "schema": { "type": "string", "format": "uuid" }
+ }
+ ],
+ "responses": {
+ "404": {
+ "description": "Группа не найдена",
+ "content": {
+ "*/*": { "schema": { "$ref": "#/components/schemas/ErrorDTO" } }
+ }
+ },
+ "204": { "description": "Группа обновлена" }
+ }
+ }
+ },
+ "/api/v1/anime/group/by-anime/{animeId}": {
+ "get": {
+ "tags": ["group-controller"],
+ "summary": "Получение группы по аниме id",
+ "operationId": "getByAnimeId",
+ "parameters": [
+ {
+ "name": "animeId",
+ "in": "path",
+ "required": true,
+ "schema": { "type": "string", "format": "uuid" }
+ }
+ ],
+ "responses": {
+ "404": {
+ "description": "Группа или аниме не найдены",
+ "content": {
+ "*/*": { "schema": { "$ref": "#/components/schemas/ErrorDTO" } }
+ }
+ },
+ "200": {
+ "description": "Группа найдена",
+ "content": {
+ "*/*": {
+ "schema": { "$ref": "#/components/schemas/AnimeGroupDTO" }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/v1/anime/genres": {
+ "get": {
+ "tags": ["anime-controller"],
+ "summary": "Получение списка влзможных жанров аниме",
+ "operationId": "getAllGenres",
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "*/*": {
+ "schema": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "enum": [
+ "DRAMA",
+ "GAME",
+ "PSYCHOLOGICAL",
+ "MUSIC",
+ "ACTION",
+ "COMEDY",
+ "DEMONS",
+ "POLICE",
+ "ECCHI",
+ "FANTASY",
+ "HENTAI",
+ "HISTORICAL",
+ "MAGIC",
+ "MECHA",
+ "PARODY",
+ "SAMURAI",
+ "ROMANCE",
+ "SCHOOL",
+ "SHOUNEN",
+ "VAMPIRE",
+ "YAOI",
+ "YURI",
+ "HAREM",
+ "SLICE_OF_LIFE",
+ "SHOUJO_AI",
+ "JOSEI",
+ "SUPERNATURAL",
+ "THRILLER",
+ "SCI_FI",
+ "SHOUJO",
+ "SUPER_POWER",
+ "MILITARY",
+ "MYSTERY",
+ "KIDS",
+ "CARS",
+ "MARTIAL_ARTS",
+ "DEMENTIA",
+ "SPORTS",
+ "SEINEN",
+ "SHOUNEN_AI",
+ "GOURMET",
+ "SPACE",
+ "WORK_LIFE",
+ "HORROR",
+ "ADVENTURE",
+ "EROTICA"
+ ]
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/v1/anime/episodes/{id}/admin": {
+ "get": {
+ "tags": ["episodes-controller"],
+ "summary": "Получение эпизода по ID для админки",
+ "description": "(дополнительные данные о том, кто смодерировал, опубликовал)",
+ "operationId": "getAdminEpisodeById",
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "required": true,
+ "schema": { "type": "string", "format": "uuid" }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "*/*": {
+ "schema": { "$ref": "#/components/schemas/AdminEpisodeDTO" }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/v1/anime/episodes/by-anime/{animeId}": {
+ "get": {
+ "tags": ["episodes-controller"],
+ "summary": "Получение списка эпизодов по ID аниме",
+ "operationId": "getEpisodesByAnimeId",
+ "parameters": [
+ {
+ "name": "animeId",
+ "in": "path",
+ "required": true,
+ "schema": { "type": "string", "format": "uuid" }
+ },
+ {
+ "name": "dtoType",
+ "in": "query",
+ "required": false,
+ "schema": {
+ "type": "string",
+ "enum": ["CARD", "DEFAULT"],
+ "default": "DEFAULT"
+ }
+ },
+ {
+ "name": "pageable",
+ "in": "query",
+ "required": true,
+ "schema": { "$ref": "#/components/schemas/Pageable" }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "*/*": { "schema": { "$ref": "#/components/schemas/Page" } }
+ }
+ }
+ }
+ }
+ },
+ "/api/v1/anime/dubs/by-episode/{episodeID}/all": {
+ "get": {
+ "tags": ["dub-controller"],
+ "summary": "Получение списка дубляжей по id эпизода",
+ "description": "В случае отсутствия эпизода или дубляжей вернет пустой список",
+ "operationId": "getDubsByEpisode",
+ "parameters": [
+ {
+ "name": "episodeID",
+ "in": "path",
+ "required": true,
+ "schema": { "type": "string", "format": "uuid" }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "*/*": {
+ "schema": {
+ "type": "array",
+ "items": { "$ref": "#/components/schemas/DubDTO" }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/v1/anime/comments/by-user/{id}": {
+ "get": {
+ "tags": ["comments-controller"],
+ "summary": "Постраничное получение всех комментариев пользователя по id пользователя",
+ "operationId": "getCommentsByUser",
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "required": true,
+ "schema": { "type": "string", "format": "uuid" }
+ },
+ {
+ "name": "pageable",
+ "in": "query",
+ "required": true,
+ "schema": { "$ref": "#/components/schemas/Pageable" }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "*/*": {
+ "schema": {
+ "type": "array",
+ "items": { "$ref": "#/components/schemas/CommentDTO" }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/v1/anime/comments/by-type-and-id/{type}/{id}": {
+ "get": {
+ "tags": ["comments-controller"],
+ "summary": "Постраничное получение всех комментариев пользователя по id пользователя с фильтрацией по типу комментария",
+ "operationId": "getCommentsById",
+ "parameters": [
+ {
+ "name": "type",
+ "in": "path",
+ "required": true,
+ "schema": { "type": "string" }
+ },
+ {
+ "name": "id",
+ "in": "path",
+ "required": true,
+ "schema": { "type": "string", "format": "uuid" }
+ },
+ {
+ "name": "pageable",
+ "in": "query",
+ "required": true,
+ "schema": { "$ref": "#/components/schemas/Pageable" }
+ }
+ ],
+ "responses": {
+ "200": {
+ "description": "OK",
+ "content": {
+ "*/*": {
+ "schema": {
+ "type": "array",
+ "items": { "$ref": "#/components/schemas/CommentDTO" }
+ }
+ }
+ }
+ }
+ }
+ }
+ },
+ "/api/v1/anime/title/by-anime": {
+ "delete": {
+ "tags": ["title-controller"],
+ "summary": "Удаление тайтлов по аниме id",
+ "operationId": "deleteAllByAnimeId",
+ "parameters": [
+ {
+ "name": "animeId",
+ "in": "query",
+ "required": true,
+ "schema": { "type": "string", "format": "uuid" }
+ }
+ ],
+ "responses": {
+ "404": {
+ "description": "Аниме не найдено",
+ "content": {
+ "*/*": { "schema": { "$ref": "#/components/schemas/ErrorDTO" } }
+ }
+ },
+ "204": { "description": "Тайтлы успешно удален или не найден" }
+ }
+ }
+ },
+ "/api/v1/anime/comments/{id}": {
+ "delete": {
+ "tags": ["comments-controller"],
+ "summary": "Удаление комментария по id",
+ "operationId": "deleteComment",
+ "parameters": [
+ {
+ "name": "id",
+ "in": "path",
+ "required": true,
+ "schema": { "type": "string", "format": "uuid" }
+ }
+ ],
+ "responses": {
+ "204": { "description": "Комментарий удален" },
+ "404": {
+ "description": "Комментарий не найден",
+ "content": {
+ "*/*": { "schema": { "$ref": "#/components/schemas/ErrorDTO" } }
+ }
+ },
+ "400": {
+ "description": "Комментарий невалидный",
+ "content": {
+ "*/*": { "schema": { "$ref": "#/components/schemas/ErrorDTO" } }
+ }
+ }
+ }
+ }
+ }
+ },
+ "components": {
+ "schemas": {
+ "ErrorDTO": {
+ "type": "object",
+ "properties": {
+ "time": { "type": "string", "format": "date-time" },
+ "status": {
+ "type": "string",
+ "enum": [
+ "100 CONTINUE",
+ "101 SWITCHING_PROTOCOLS",
+ "102 PROCESSING",
+ "103 EARLY_HINTS",
+ "103 CHECKPOINT",
+ "200 OK",
+ "201 CREATED",
+ "202 ACCEPTED",
+ "203 NON_AUTHORITATIVE_INFORMATION",
+ "204 NO_CONTENT",
+ "205 RESET_CONTENT",
+ "206 PARTIAL_CONTENT",
+ "207 MULTI_STATUS",
+ "208 ALREADY_REPORTED",
+ "226 IM_USED",
+ "300 MULTIPLE_CHOICES",
+ "301 MOVED_PERMANENTLY",
+ "302 FOUND",
+ "302 MOVED_TEMPORARILY",
+ "303 SEE_OTHER",
+ "304 NOT_MODIFIED",
+ "305 USE_PROXY",
+ "307 TEMPORARY_REDIRECT",
+ "308 PERMANENT_REDIRECT",
+ "400 BAD_REQUEST",
+ "401 UNAUTHORIZED",
+ "402 PAYMENT_REQUIRED",
+ "403 FORBIDDEN",
+ "404 NOT_FOUND",
+ "405 METHOD_NOT_ALLOWED",
+ "406 NOT_ACCEPTABLE",
+ "407 PROXY_AUTHENTICATION_REQUIRED",
+ "408 REQUEST_TIMEOUT",
+ "409 CONFLICT",
+ "410 GONE",
+ "411 LENGTH_REQUIRED",
+ "412 PRECONDITION_FAILED",
+ "413 PAYLOAD_TOO_LARGE",
+ "413 REQUEST_ENTITY_TOO_LARGE",
+ "414 URI_TOO_LONG",
+ "414 REQUEST_URI_TOO_LONG",
+ "415 UNSUPPORTED_MEDIA_TYPE",
+ "416 REQUESTED_RANGE_NOT_SATISFIABLE",
+ "417 EXPECTATION_FAILED",
+ "418 I_AM_A_TEAPOT",
+ "419 INSUFFICIENT_SPACE_ON_RESOURCE",
+ "420 METHOD_FAILURE",
+ "421 DESTINATION_LOCKED",
+ "422 UNPROCESSABLE_ENTITY",
+ "423 LOCKED",
+ "424 FAILED_DEPENDENCY",
+ "425 TOO_EARLY",
+ "426 UPGRADE_REQUIRED",
+ "428 PRECONDITION_REQUIRED",
+ "429 TOO_MANY_REQUESTS",
+ "431 REQUEST_HEADER_FIELDS_TOO_LARGE",
+ "451 UNAVAILABLE_FOR_LEGAL_REASONS",
+ "500 INTERNAL_SERVER_ERROR",
+ "501 NOT_IMPLEMENTED",
+ "502 BAD_GATEWAY",
+ "503 SERVICE_UNAVAILABLE",
+ "504 GATEWAY_TIMEOUT",
+ "505 HTTP_VERSION_NOT_SUPPORTED",
+ "506 VARIANT_ALSO_NEGOTIATES",
+ "507 INSUFFICIENT_STORAGE",
+ "508 LOOP_DETECTED",
+ "509 BANDWIDTH_LIMIT_EXCEEDED",
+ "510 NOT_EXTENDED",
+ "511 NETWORK_AUTHENTICATION_REQUIRED"
+ ]
+ },
+ "errors": {
+ "type": "object",
+ "additionalProperties": { "type": "string" }
+ }
+ }
+ },
+ "ComplaintDto": {
+ "required": ["content", "pageUrl", "userAgent", "userId"],
+ "type": "object",
+ "properties": {
+ "id": { "type": "string", "format": "uuid" },
+ "objectType": {
+ "type": "string",
+ "enum": ["PAGE", "PLAYER", "USER", "COMMENT", "ANIME", "EPISODE"]
+ },
+ "objectId": { "type": "string", "format": "uuid" },
+ "userId": { "type": "string", "format": "uuid" },
+ "pageUrl": { "maxLength": 255, "minLength": 0, "type": "string" },
+ "userAgent": { "maxLength": 255, "minLength": 0, "type": "string" },
+ "content": { "type": "string" },
+ "createdAt": { "type": "string", "format": "date-time" },
+ "complaintStatus": {
+ "type": "string",
+ "enum": ["OPEN", "IN_PROGRESS", "RESOLVED", "REJECTED"]
+ }
+ }
+ },
+ "AnimeDTO": {
+ "type": "object",
+ "properties": {
+ "id": { "type": "string", "format": "uuid" },
+ "primaryTitle": { "type": "string" },
+ "titles": {
+ "type": "array",
+ "items": { "$ref": "#/components/schemas/AnimeTitleDTO" }
+ },
+ "description": { "type": "string" },
+ "releasedOn": { "type": "string", "format": "date" },
+ "finishedOn": { "type": "string", "format": "date" },
+ "episodesCount": { "type": "integer", "format": "int32" },
+ "episodes": {
+ "type": "array",
+ "items": { "type": "string", "format": "uuid" }
+ },
+ "status": {
+ "type": "string",
+ "enum": ["ANNOUNCE", "ONGOING", "RELEASED"]
+ },
+ "type": {
+ "type": "string",
+ "enum": [
+ "TV",
+ "MOVIE",
+ "OVA",
+ "ONA",
+ "SPECIAL",
+ "TV_SPECIAL",
+ "MUSIC",
+ "PV",
+ "CM"
+ ]
+ },
+ "genres": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "enum": [
+ "DRAMA",
+ "GAME",
+ "PSYCHOLOGICAL",
+ "MUSIC",
+ "ACTION",
+ "COMEDY",
+ "DEMONS",
+ "POLICE",
+ "ECCHI",
+ "FANTASY",
+ "HENTAI",
+ "HISTORICAL",
+ "MAGIC",
+ "MECHA",
+ "PARODY",
+ "SAMURAI",
+ "ROMANCE",
+ "SCHOOL",
+ "SHOUNEN",
+ "VAMPIRE",
+ "YAOI",
+ "YURI",
+ "HAREM",
+ "SLICE_OF_LIFE",
+ "SHOUJO_AI",
+ "JOSEI",
+ "SUPERNATURAL",
+ "THRILLER",
+ "SCI_FI",
+ "SHOUJO",
+ "SUPER_POWER",
+ "MILITARY",
+ "MYSTERY",
+ "KIDS",
+ "CARS",
+ "MARTIAL_ARTS",
+ "DEMENTIA",
+ "SPORTS",
+ "SEINEN",
+ "SHOUNEN_AI",
+ "GOURMET",
+ "SPACE",
+ "WORK_LIFE",
+ "HORROR",
+ "ADVENTURE",
+ "EROTICA"
+ ]
+ }
+ },
+ "studios": {
+ "type": "array",
+ "items": { "$ref": "#/components/schemas/StudioDTO" }
+ },
+ "mpaaRating": {
+ "type": "string",
+ "enum": ["G", "PG", "PG_13", "R", "NC_17"]
+ },
+ "duration": { "type": "integer", "format": "int32" },
+ "shikimoriId": { "type": "string" }
+ }
+ },
+ "AnimeTitleDTO": {
+ "type": "object",
+ "properties": {
+ "id": { "type": "string", "format": "uuid" },
+ "animeId": { "type": "string", "format": "uuid" },
+ "title": { "type": "string" },
+ "languageCode": { "type": "string" },
+ "titleType": {
+ "type": "string",
+ "enum": [
+ "ORIGINAL",
+ "OFFICIAL",
+ "SYNONYM",
+ "SHORT",
+ "ROMAJI",
+ "TRANSLITERATION"
+ ]
+ },
+ "isPrimary": { "type": "boolean" },
+ "sortOrder": { "type": "integer", "format": "int32" }
+ }
+ },
+ "CharacterDTO": {
+ "required": ["name"],
+ "type": "object",
+ "properties": {
+ "id": { "type": "string", "format": "uuid" },
+ "name": { "maxLength": 63, "minLength": 0, "type": "string" },
+ "surname": { "maxLength": 63, "minLength": 0, "type": "string" },
+ "imageUrl": { "maxLength": 255, "minLength": 0, "type": "string" },
+ "anime": {
+ "uniqueItems": true,
+ "type": "array",
+ "items": { "$ref": "#/components/schemas/AnimeDTO" }
+ }
+ }
+ },
+ "StudioDTO": {
+ "type": "object",
+ "properties": {
+ "id": { "type": "string", "format": "uuid" },
+ "name": { "type": "string" }
+ }
+ },
+ "UpdateAnimeRequest": {
+ "required": [
+ "description",
+ "duration",
+ "episodesCount",
+ "genres",
+ "id",
+ "mpaaRating",
+ "myanimelistId",
+ "primaryTitle",
+ "releasedOn",
+ "shikimoriId",
+ "status",
+ "type"
+ ],
+ "type": "object",
+ "properties": {
+ "id": { "type": "string", "format": "uuid" },
+ "primaryTitle": { "type": "string" },
+ "description": { "type": "string" },
+ "airedOn": { "type": "string", "format": "date" },
+ "releasedOn": { "type": "string", "format": "date" },
+ "episodesCount": { "type": "integer", "format": "int32" },
+ "status": {
+ "type": "string",
+ "enum": ["ANNOUNCE", "ONGOING", "RELEASED"]
+ },
+ "type": {
+ "type": "string",
+ "enum": [
+ "TV",
+ "MOVIE",
+ "OVA",
+ "ONA",
+ "SPECIAL",
+ "TV_SPECIAL",
+ "MUSIC",
+ "PV",
+ "CM"
+ ]
+ },
+ "genres": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "enum": [
+ "DRAMA",
+ "GAME",
+ "PSYCHOLOGICAL",
+ "MUSIC",
+ "ACTION",
+ "COMEDY",
+ "DEMONS",
+ "POLICE",
+ "ECCHI",
+ "FANTASY",
+ "HENTAI",
+ "HISTORICAL",
+ "MAGIC",
+ "MECHA",
+ "PARODY",
+ "SAMURAI",
+ "ROMANCE",
+ "SCHOOL",
+ "SHOUNEN",
+ "VAMPIRE",
+ "YAOI",
+ "YURI",
+ "HAREM",
+ "SLICE_OF_LIFE",
+ "SHOUJO_AI",
+ "JOSEI",
+ "SUPERNATURAL",
+ "THRILLER",
+ "SCI_FI",
+ "SHOUJO",
+ "SUPER_POWER",
+ "MILITARY",
+ "MYSTERY",
+ "KIDS",
+ "CARS",
+ "MARTIAL_ARTS",
+ "DEMENTIA",
+ "SPORTS",
+ "SEINEN",
+ "SHOUNEN_AI",
+ "GOURMET",
+ "SPACE",
+ "WORK_LIFE",
+ "HORROR",
+ "ADVENTURE",
+ "EROTICA"
+ ]
+ }
+ },
+ "mpaaRating": {
+ "type": "string",
+ "enum": ["G", "PG", "PG_13", "R", "NC_17"]
+ },
+ "duration": { "type": "integer", "format": "int32" },
+ "shikimoriId": { "type": "string" },
+ "myanimelistId": { "type": "string" },
+ "characters": {
+ "uniqueItems": true,
+ "type": "array",
+ "items": { "$ref": "#/components/schemas/CharacterDTO" }
+ }
+ }
+ },
+ "UpdateAnimeGroupRequest": {
+ "type": "object",
+ "properties": {
+ "id": { "type": "string", "format": "uuid" },
+ "name": { "type": "string" }
+ }
+ },
+ "AnimeGroupDTO": {
+ "type": "object",
+ "properties": {
+ "id": { "type": "string", "format": "uuid" },
+ "name": { "type": "string" },
+ "animeIds": {
+ "type": "array",
+ "items": { "type": "string", "format": "uuid" }
+ }
+ }
+ },
+ "DeleteAnimeFromGroupRequest": {
+ "type": "object",
+ "properties": {
+ "id": { "type": "string", "format": "uuid" },
+ "animeIds": {
+ "type": "array",
+ "items": { "type": "string", "format": "uuid" }
+ }
+ }
+ },
+ "AddAnimeToGroupRequest": {
+ "type": "object",
+ "properties": {
+ "id": { "type": "string", "format": "uuid" },
+ "animeIds": {
+ "uniqueItems": true,
+ "type": "array",
+ "items": { "type": "string", "format": "uuid" }
+ }
+ }
+ },
+ "UpdateEpisodeRequest": {
+ "required": ["isModerated", "title"],
+ "type": "object",
+ "properties": {
+ "title": { "type": "string" },
+ "releasedOn": { "type": "string", "format": "date" },
+ "isModerated": { "type": "boolean" }
+ }
+ },
+ "AnimeCardDTO": {
+ "type": "object",
+ "properties": {
+ "id": { "type": "string", "format": "uuid" },
+ "primaryTitle": { "type": "string" },
+ "releasedOn": { "type": "string", "format": "date" },
+ "mainGenre": {
+ "type": "string",
+ "enum": [
+ "DRAMA",
+ "GAME",
+ "PSYCHOLOGICAL",
+ "MUSIC",
+ "ACTION",
+ "COMEDY",
+ "DEMONS",
+ "POLICE",
+ "ECCHI",
+ "FANTASY",
+ "HENTAI",
+ "HISTORICAL",
+ "MAGIC",
+ "MECHA",
+ "PARODY",
+ "SAMURAI",
+ "ROMANCE",
+ "SCHOOL",
+ "SHOUNEN",
+ "VAMPIRE",
+ "YAOI",
+ "YURI",
+ "HAREM",
+ "SLICE_OF_LIFE",
+ "SHOUJO_AI",
+ "JOSEI",
+ "SUPERNATURAL",
+ "THRILLER",
+ "SCI_FI",
+ "SHOUJO",
+ "SUPER_POWER",
+ "MILITARY",
+ "MYSTERY",
+ "KIDS",
+ "CARS",
+ "MARTIAL_ARTS",
+ "DEMENTIA",
+ "SPORTS",
+ "SEINEN",
+ "SHOUNEN_AI",
+ "GOURMET",
+ "SPACE",
+ "WORK_LIFE",
+ "HORROR",
+ "ADVENTURE",
+ "EROTICA"
+ ]
+ }
+ }
+ },
+ "EpisodeDTO": {
+ "type": "object",
+ "properties": {
+ "id": { "type": "string", "format": "uuid" },
+ "ordinalId": { "type": "integer", "format": "int32" },
+ "title": { "type": "string" },
+ "views": { "type": "integer", "format": "int32" },
+ "likes": { "type": "integer", "format": "int32" },
+ "dislikes": { "type": "integer", "format": "int32" },
+ "anime": { "$ref": "#/components/schemas/AnimeCardDTO" },
+ "releasedOn": { "type": "string", "format": "date" }
+ }
+ },
+ "DubDTO": {
+ "type": "object",
+ "properties": {
+ "id": { "type": "string", "format": "uuid" },
+ "name": { "type": "string" },
+ "episodes": {
+ "type": "array",
+ "items": { "$ref": "#/components/schemas/EpisodeDTO" }
+ }
+ }
+ },
+ "UpdateCommentRequest": {
+ "required": ["id", "text"],
+ "type": "object",
+ "properties": {
+ "id": { "type": "string", "format": "uuid" },
+ "text": { "maxLength": 256, "minLength": 0, "type": "string" }
+ }
+ },
+ "CommentAnswerDTO": {
+ "type": "object",
+ "properties": {
+ "id": { "type": "string", "format": "uuid" },
+ "text": { "type": "string" }
+ }
+ },
+ "CommentDTO": {
+ "type": "object",
+ "properties": {
+ "id": { "type": "string", "format": "uuid" },
+ "text": { "type": "string" },
+ "replies": {
+ "type": "array",
+ "items": { "$ref": "#/components/schemas/CommentAnswerDTO" }
+ }
+ }
+ },
+ "CreateComplaintRequest": {
+ "required": ["content", "pageUrl", "userAgent", "userId"],
+ "type": "object",
+ "properties": {
+ "objectType": {
+ "type": "string",
+ "enum": ["PAGE", "PLAYER", "USER", "COMMENT", "ANIME", "EPISODE"]
+ },
+ "objectId": { "type": "string", "format": "uuid" },
+ "userId": { "type": "string", "format": "uuid" },
+ "pageUrl": { "maxLength": 255, "minLength": 0, "type": "string" },
+ "userAgent": { "maxLength": 255, "minLength": 0, "type": "string" },
+ "content": { "type": "string" }
+ }
+ },
+ "ComplaintSearchParams": {
+ "type": "object",
+ "properties": {
+ "text": { "type": "string" },
+ "types": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "enum": ["PAGE", "PLAYER", "USER", "COMMENT", "ANIME", "EPISODE"]
+ }
+ },
+ "statuses": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "enum": ["OPEN", "IN_PROGRESS", "RESOLVED", "REJECTED"]
+ }
+ },
+ "userIds": {
+ "type": "array",
+ "items": { "type": "string", "format": "uuid" }
+ },
+ "objectIds": {
+ "type": "array",
+ "items": { "type": "string", "format": "uuid" }
+ },
+ "pageUrls": { "type": "array", "items": { "type": "string" } },
+ "before": { "type": "string", "format": "date-time" },
+ "after": { "type": "string", "format": "date-time" },
+ "page": { "type": "integer", "format": "int32" },
+ "size": { "type": "integer", "format": "int32" },
+ "sortField": { "type": "string" },
+ "direction": { "type": "string", "enum": ["ASC", "DESC"] },
+ "pageable": { "$ref": "#/components/schemas/PageableObject" }
+ }
+ },
+ "PageableObject": {
+ "type": "object",
+ "properties": {
+ "unpaged": { "type": "boolean" },
+ "paged": { "type": "boolean" },
+ "pageNumber": { "type": "integer", "format": "int32" },
+ "pageSize": { "type": "integer", "format": "int32" },
+ "sort": {
+ "type": "array",
+ "items": { "$ref": "#/components/schemas/SortObject" }
+ },
+ "offset": { "type": "integer", "format": "int64" }
+ }
+ },
+ "SortObject": {
+ "type": "object",
+ "properties": {
+ "direction": { "type": "string" },
+ "nullHandling": { "type": "string" },
+ "ascending": { "type": "boolean" },
+ "property": { "type": "string" },
+ "ignoreCase": { "type": "boolean" }
+ }
+ },
+ "PageComplaintDto": {
+ "type": "object",
+ "properties": {
+ "totalElements": { "type": "integer", "format": "int64" },
+ "totalPages": { "type": "integer", "format": "int32" },
+ "pageable": { "$ref": "#/components/schemas/PageableObject" },
+ "numberOfElements": { "type": "integer", "format": "int32" },
+ "sort": {
+ "type": "array",
+ "items": { "$ref": "#/components/schemas/SortObject" }
+ },
+ "first": { "type": "boolean" },
+ "last": { "type": "boolean" },
+ "size": { "type": "integer", "format": "int32" },
+ "content": {
+ "type": "array",
+ "items": { "$ref": "#/components/schemas/ComplaintDto" }
+ },
+ "number": { "type": "integer", "format": "int32" },
+ "empty": { "type": "boolean" }
+ }
+ },
+ "CreateAnimeRequest": {
+ "required": [
+ "description",
+ "duration",
+ "genres",
+ "mainGenre",
+ "mpaaRating",
+ "myanimelistId",
+ "originalSource",
+ "primaryTitle",
+ "releasedOn",
+ "shikimoriId",
+ "status",
+ "type"
+ ],
+ "type": "object",
+ "properties": {
+ "primaryTitle": { "type": "string" },
+ "description": { "type": "string" },
+ "releasedOn": { "type": "string", "format": "date" },
+ "finishedOn": { "type": "string", "format": "date" },
+ "originalSource": {
+ "type": "string",
+ "enum": [
+ "MANGA",
+ "GAME",
+ "LIGHT_NOVEL",
+ "FILM",
+ "RANOBE",
+ "MANHWA",
+ "MANHUA"
+ ]
+ },
+ "status": {
+ "type": "string",
+ "enum": ["ANNOUNCE", "ONGOING", "RELEASED"]
+ },
+ "type": {
+ "type": "string",
+ "enum": [
+ "TV",
+ "MOVIE",
+ "OVA",
+ "ONA",
+ "SPECIAL",
+ "TV_SPECIAL",
+ "MUSIC",
+ "PV",
+ "CM"
+ ]
+ },
+ "mainGenre": {
+ "type": "string",
+ "enum": [
+ "DRAMA",
+ "GAME",
+ "PSYCHOLOGICAL",
+ "MUSIC",
+ "ACTION",
+ "COMEDY",
+ "DEMONS",
+ "POLICE",
+ "ECCHI",
+ "FANTASY",
+ "HENTAI",
+ "HISTORICAL",
+ "MAGIC",
+ "MECHA",
+ "PARODY",
+ "SAMURAI",
+ "ROMANCE",
+ "SCHOOL",
+ "SHOUNEN",
+ "VAMPIRE",
+ "YAOI",
+ "YURI",
+ "HAREM",
+ "SLICE_OF_LIFE",
+ "SHOUJO_AI",
+ "JOSEI",
+ "SUPERNATURAL",
+ "THRILLER",
+ "SCI_FI",
+ "SHOUJO",
+ "SUPER_POWER",
+ "MILITARY",
+ "MYSTERY",
+ "KIDS",
+ "CARS",
+ "MARTIAL_ARTS",
+ "DEMENTIA",
+ "SPORTS",
+ "SEINEN",
+ "SHOUNEN_AI",
+ "GOURMET",
+ "SPACE",
+ "WORK_LIFE",
+ "HORROR",
+ "ADVENTURE",
+ "EROTICA"
+ ]
+ },
+ "genres": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "enum": [
+ "DRAMA",
+ "GAME",
+ "PSYCHOLOGICAL",
+ "MUSIC",
+ "ACTION",
+ "COMEDY",
+ "DEMONS",
+ "POLICE",
+ "ECCHI",
+ "FANTASY",
+ "HENTAI",
+ "HISTORICAL",
+ "MAGIC",
+ "MECHA",
+ "PARODY",
+ "SAMURAI",
+ "ROMANCE",
+ "SCHOOL",
+ "SHOUNEN",
+ "VAMPIRE",
+ "YAOI",
+ "YURI",
+ "HAREM",
+ "SLICE_OF_LIFE",
+ "SHOUJO_AI",
+ "JOSEI",
+ "SUPERNATURAL",
+ "THRILLER",
+ "SCI_FI",
+ "SHOUJO",
+ "SUPER_POWER",
+ "MILITARY",
+ "MYSTERY",
+ "KIDS",
+ "CARS",
+ "MARTIAL_ARTS",
+ "DEMENTIA",
+ "SPORTS",
+ "SEINEN",
+ "SHOUNEN_AI",
+ "GOURMET",
+ "SPACE",
+ "WORK_LIFE",
+ "HORROR",
+ "ADVENTURE",
+ "EROTICA"
+ ]
+ }
+ },
+ "mpaaRating": {
+ "type": "string",
+ "enum": ["G", "PG", "PG_13", "R", "NC_17"]
+ },
+ "duration": { "type": "integer", "format": "int32" },
+ "shikimoriId": { "type": "string" },
+ "myanimelistId": { "type": "string" },
+ "characters": {
+ "uniqueItems": true,
+ "type": "array",
+ "items": { "$ref": "#/components/schemas/CharacterDTO" }
+ }
+ }
+ },
+ "CreatedAnimeDTO": {
+ "type": "object",
+ "properties": {
+ "id": { "type": "string", "format": "uuid" },
+ "primaryTitle": { "type": "string" },
+ "description": { "type": "string" },
+ "releasedOn": { "type": "string", "format": "date" },
+ "episodesCount": { "type": "integer", "format": "int32" },
+ "status": {
+ "type": "string",
+ "enum": ["ANNOUNCE", "ONGOING", "RELEASED"]
+ },
+ "type": {
+ "type": "string",
+ "enum": [
+ "TV",
+ "MOVIE",
+ "OVA",
+ "ONA",
+ "SPECIAL",
+ "TV_SPECIAL",
+ "MUSIC",
+ "PV",
+ "CM"
+ ]
+ },
+ "genres": {
+ "type": "array",
+ "items": {
+ "type": "string",
+ "enum": [
+ "DRAMA",
+ "GAME",
+ "PSYCHOLOGICAL",
+ "MUSIC",
+ "ACTION",
+ "COMEDY",
+ "DEMONS",
+ "POLICE",
+ "ECCHI",
+ "FANTASY",
+ "HENTAI",
+ "HISTORICAL",
+ "MAGIC",
+ "MECHA",
+ "PARODY",
+ "SAMURAI",
+ "ROMANCE",
+ "SCHOOL",
+ "SHOUNEN",
+ "VAMPIRE",
+ "YAOI",
+ "YURI",
+ "HAREM",
+ "SLICE_OF_LIFE",
+ "SHOUJO_AI",
+ "JOSEI",
+ "SUPERNATURAL",
+ "THRILLER",
+ "SCI_FI",
+ "SHOUJO",
+ "SUPER_POWER",
+ "MILITARY",
+ "MYSTERY",
+ "KIDS",
+ "CARS",
+ "MARTIAL_ARTS",
+ "DEMENTIA",
+ "SPORTS",
+ "SEINEN",
+ "SHOUNEN_AI",
+ "GOURMET",
+ "SPACE",
+ "WORK_LIFE",
+ "HORROR",
+ "ADVENTURE",
+ "EROTICA"
+ ]
+ }
+ },
+ "mpaaRating": {
+ "type": "string",
+ "enum": ["G", "PG", "PG_13", "R", "NC_17"]
+ },
+ "duration": { "type": "integer", "format": "int32" },
+ "characters": {
+ "uniqueItems": true,
+ "type": "array",
+ "items": { "$ref": "#/components/schemas/CharacterDTO" }
+ }
+ }
+ },
+ "CreateAnimeTitleRequest": {
+ "required": [
+ "animeId",
+ "isPrimary",
+ "languageCode",
+ "sortOrder",
+ "title",
+ "titleType"
+ ],
+ "type": "object",
+ "properties": {
+ "animeId": { "type": "string", "format": "uuid" },
+ "title": { "type": "string" },
+ "languageCode": { "type": "string" },
+ "titleType": {
+ "type": "string",
+ "enum": [
+ "ORIGINAL",
+ "OFFICIAL",
+ "SYNONYM",
+ "SHORT",
+ "ROMAJI",
+ "TRANSLITERATION"
+ ]
+ },
+ "isPrimary": { "type": "boolean" },
+ "sortOrder": { "type": "integer", "format": "int32" }
+ }
+ },
+ "IncreasePopularityRequest": {
+ "type": "object",
+ "properties": { "animeId": { "type": "string", "format": "uuid" } }
+ },
+ "CreateAnimeGroupRequest": {
+ "type": "object",
+ "properties": { "name": { "type": "string" } }
+ },
+ "CreateEpisodeRequest": {
+ "required": ["animeId", "title"],
+ "type": "object",
+ "properties": {
+ "animeId": { "type": "string", "format": "uuid" },
+ "title": { "type": "string" },
+ "releasedOn": { "type": "string", "format": "date" }
+ }
+ },
+ "CreateDubRequest": {
+ "required": ["name"],
+ "type": "object",
+ "properties": { "name": { "type": "string" } }
+ },
+ "CreateCommentRequest": {
+ "required": ["text"],
+ "type": "object",
+ "properties": {
+ "text": { "maxLength": 256, "minLength": 0, "type": "string" },
+ "objectId": { "type": "string", "format": "uuid" },
+ "objectType": { "type": "string", "enum": ["EPISODE", "ANIME"] },
+ "repliesTo": { "type": "string", "format": "uuid" }
+ }
+ },
+ "UpdateAnimeTitleRequest": {
+ "type": "object",
+ "properties": {
+ "id": { "type": "string", "format": "uuid" },
+ "animeId": { "type": "string", "format": "uuid" },
+ "title": { "type": "string" },
+ "languageCode": { "type": "string" },
+ "titleType": {
+ "type": "string",
+ "enum": [
+ "ORIGINAL",
+ "OFFICIAL",
+ "SYNONYM",
+ "SHORT",
+ "ROMAJI",
+ "TRANSLITERATION"
+ ]
+ },
+ "isPrimary": { "type": "boolean" },
+ "sortOrder": { "type": "integer", "format": "int32" }
+ }
+ },
+ "AnimeSearchCriteria": {
+ "type": "object",
+ "properties": {
+ "includeGenres": {
+ "uniqueItems": true,
+ "type": "array",
+ "items": {
+ "type": "string",
+ "enum": [
+ "DRAMA",
+ "GAME",
+ "PSYCHOLOGICAL",
+ "MUSIC",
+ "ACTION",
+ "COMEDY",
+ "DEMONS",
+ "POLICE",
+ "ECCHI",
+ "FANTASY",
+ "HENTAI",
+ "HISTORICAL",
+ "MAGIC",
+ "MECHA",
+ "PARODY",
+ "SAMURAI",
+ "ROMANCE",
+ "SCHOOL",
+ "SHOUNEN",
+ "VAMPIRE",
+ "YAOI",
+ "YURI",
+ "HAREM",
+ "SLICE_OF_LIFE",
+ "SHOUJO_AI",
+ "JOSEI",
+ "SUPERNATURAL",
+ "THRILLER",
+ "SCI_FI",
+ "SHOUJO",
+ "SUPER_POWER",
+ "MILITARY",
+ "MYSTERY",
+ "KIDS",
+ "CARS",
+ "MARTIAL_ARTS",
+ "DEMENTIA",
+ "SPORTS",
+ "SEINEN",
+ "SHOUNEN_AI",
+ "GOURMET",
+ "SPACE",
+ "WORK_LIFE",
+ "HORROR",
+ "ADVENTURE",
+ "EROTICA"
+ ]
+ }
+ },
+ "excludeGenres": {
+ "uniqueItems": true,
+ "type": "array",
+ "items": {
+ "type": "string",
+ "enum": [
+ "DRAMA",
+ "GAME",
+ "PSYCHOLOGICAL",
+ "MUSIC",
+ "ACTION",
+ "COMEDY",
+ "DEMONS",
+ "POLICE",
+ "ECCHI",
+ "FANTASY",
+ "HENTAI",
+ "HISTORICAL",
+ "MAGIC",
+ "MECHA",
+ "PARODY",
+ "SAMURAI",
+ "ROMANCE",
+ "SCHOOL",
+ "SHOUNEN",
+ "VAMPIRE",
+ "YAOI",
+ "YURI",
+ "HAREM",
+ "SLICE_OF_LIFE",
+ "SHOUJO_AI",
+ "JOSEI",
+ "SUPERNATURAL",
+ "THRILLER",
+ "SCI_FI",
+ "SHOUJO",
+ "SUPER_POWER",
+ "MILITARY",
+ "MYSTERY",
+ "KIDS",
+ "CARS",
+ "MARTIAL_ARTS",
+ "DEMENTIA",
+ "SPORTS",
+ "SEINEN",
+ "SHOUNEN_AI",
+ "GOURMET",
+ "SPACE",
+ "WORK_LIFE",
+ "HORROR",
+ "ADVENTURE",
+ "EROTICA"
+ ]
+ }
+ },
+ "status": {
+ "type": "string",
+ "enum": ["ANNOUNCE", "ONGOING", "RELEASED"]
+ },
+ "studioId": { "type": "string", "format": "uuid" },
+ "type": {
+ "type": "string",
+ "enum": [
+ "TV",
+ "MOVIE",
+ "OVA",
+ "ONA",
+ "SPECIAL",
+ "TV_SPECIAL",
+ "MUSIC",
+ "PV",
+ "CM"
+ ]
+ }
+ }
+ },
+ "Pageable": {
+ "type": "object",
+ "properties": {
+ "page": { "minimum": 0, "type": "integer", "format": "int32" },
+ "size": { "minimum": 1, "type": "integer", "format": "int32" },
+ "sort": { "type": "array", "items": { "type": "string" } }
+ }
+ },
+ "Page": {
+ "type": "object",
+ "properties": {
+ "totalElements": { "type": "integer", "format": "int64" },
+ "totalPages": { "type": "integer", "format": "int32" },
+ "pageable": { "$ref": "#/components/schemas/PageableObject" },
+ "numberOfElements": { "type": "integer", "format": "int32" },
+ "sort": {
+ "type": "array",
+ "items": { "$ref": "#/components/schemas/SortObject" }
+ },
+ "first": { "type": "boolean" },
+ "last": { "type": "boolean" },
+ "size": { "type": "integer", "format": "int32" },
+ "content": { "type": "array", "items": { "type": "object" } },
+ "number": { "type": "integer", "format": "int32" },
+ "empty": { "type": "boolean" }
+ }
+ },
+ "PageAnimeCardDTO": {
+ "type": "object",
+ "properties": {
+ "totalElements": { "type": "integer", "format": "int64" },
+ "totalPages": { "type": "integer", "format": "int32" },
+ "pageable": { "$ref": "#/components/schemas/PageableObject" },
+ "numberOfElements": { "type": "integer", "format": "int32" },
+ "sort": {
+ "type": "array",
+ "items": { "$ref": "#/components/schemas/SortObject" }
+ },
+ "first": { "type": "boolean" },
+ "last": { "type": "boolean" },
+ "size": { "type": "integer", "format": "int32" },
+ "content": {
+ "type": "array",
+ "items": { "$ref": "#/components/schemas/AnimeCardDTO" }
+ },
+ "number": { "type": "integer", "format": "int32" },
+ "empty": { "type": "boolean" }
+ }
+ },
+ "PageAnimeTitleDTO": {
+ "type": "object",
+ "properties": {
+ "totalElements": { "type": "integer", "format": "int64" },
+ "totalPages": { "type": "integer", "format": "int32" },
+ "pageable": { "$ref": "#/components/schemas/PageableObject" },
+ "numberOfElements": { "type": "integer", "format": "int32" },
+ "sort": {
+ "type": "array",
+ "items": { "$ref": "#/components/schemas/SortObject" }
+ },
+ "first": { "type": "boolean" },
+ "last": { "type": "boolean" },
+ "size": { "type": "integer", "format": "int32" },
+ "content": {
+ "type": "array",
+ "items": { "$ref": "#/components/schemas/AnimeTitleDTO" }
+ },
+ "number": { "type": "integer", "format": "int32" },
+ "empty": { "type": "boolean" }
+ }
+ },
+ "AdminEpisodeDTO": {
+ "type": "object",
+ "properties": {
+ "id": { "type": "string", "format": "uuid" },
+ "ordinalId": { "type": "integer", "format": "int32" },
+ "title": { "type": "string" },
+ "views": { "type": "integer", "format": "int32" },
+ "likes": { "type": "integer", "format": "int32" },
+ "dislikes": { "type": "integer", "format": "int32" },
+ "anime": { "$ref": "#/components/schemas/AnimeCardDTO" },
+ "releasedOn": { "type": "string", "format": "date" },
+ "isModerated": { "type": "boolean" },
+ "lastModeratedBy": { "type": "string", "format": "uuid" }
+ }
+ }
+ }
+ }
+}
diff --git a/app/(main)/test/Genres/Genres.tsx b/app/(main)/test/Genres/Genres.tsx
new file mode 100644
index 0000000..6df6bc3
--- /dev/null
+++ b/app/(main)/test/Genres/Genres.tsx
@@ -0,0 +1,27 @@
+"use client";
+
+import { useGetAllGenres } from "@/app/api/generated";
+import { routesMapping } from "@/app/api/helpers";
+import { ROUTES } from "@/app/api/types";
+import React from "react";
+
+export const Genres: React.FC = () => {
+ const { data: genres, isPending } = useGetAllGenres({
+ client: routesMapping(ROUTES.ANIME_GENRES),
+ });
+
+ console.log({ genres });
+
+ if (!genres || isPending) {
+ return null;
+ }
+
+ return (
+
+ {genres.map((genre) => (
+ /* @ts-expect-error */
+
{genre.value}
+ ))}
+
+ );
+};
diff --git a/app/(main)/test/Genres/index.ts b/app/(main)/test/Genres/index.ts
new file mode 100644
index 0000000..67bad59
--- /dev/null
+++ b/app/(main)/test/Genres/index.ts
@@ -0,0 +1 @@
+export * from "./Genres";
diff --git a/app/(main)/test/page.tsx b/app/(main)/test/page.tsx
new file mode 100644
index 0000000..702f13a
--- /dev/null
+++ b/app/(main)/test/page.tsx
@@ -0,0 +1,35 @@
+import { getAllGenresQueryOptions } from "@/app/api/generated";
+import { routesMapping } from "@/app/api/helpers";
+import { ROUTES } from "@/app/api/types";
+import {
+ dehydrate,
+ HydrationBoundary,
+ QueryClient,
+} from "@tanstack/react-query";
+import { NextPage } from "next";
+import { Suspense } from "react";
+import { Genres } from "./Genres";
+
+const PageSuspense: NextPage = async () => {
+ const queryClient = new QueryClient();
+
+ await queryClient.prefetchQuery(
+ getAllGenresQueryOptions(routesMapping(ROUTES.ANIME_GENRES)),
+ );
+
+ return (
+
+
+
+ );
+};
+
+const Page: NextPage = () => {
+ return (
+ Загрузка...}>
+
+
+ );
+};
+
+export default Page;
diff --git a/app/api/client/axios.ts b/app/api/client/axios.ts
new file mode 100644
index 0000000..747ce66
--- /dev/null
+++ b/app/api/client/axios.ts
@@ -0,0 +1,44 @@
+import { AxiosError, AxiosRequestConfig, AxiosResponse } from 'axios'
+
+import { clientInstance } from '../instances'
+
+export type ResponseErrorConfig = AxiosError
+
+export type RequestConfig = {
+ url?: string
+ method: 'GET' | 'PUT' | 'PATCH' | 'POST' | 'DELETE'
+ params?: unknown
+ data?: TData
+ responseType?:
+ | 'arraybuffer'
+ | 'blob'
+ | 'document'
+ | 'json'
+ | 'text'
+ | 'stream'
+ signal?: AbortSignal
+ headers?: AxiosRequestConfig['headers']
+}
+
+export type ResponseConfig = {
+ data: TData
+ status: number
+ statusText: string
+ headers?: AxiosResponse['headers']
+}
+
+export const client = async <
+ TData,
+ TError = unknown,
+ TVariables = unknown,
+>(
+ config: RequestConfig
+): Promise> => {
+ const promise = clientInstance
+ .request>({ ...config })
+ .catch((e: AxiosError) => {
+ throw e
+ })
+
+ return promise
+}
diff --git a/app/api/client/index.ts b/app/api/client/index.ts
new file mode 100644
index 0000000..4b6fd95
--- /dev/null
+++ b/app/api/client/index.ts
@@ -0,0 +1,2 @@
+export { client as default } from './axios'
+export * from './axios'
diff --git a/app/api/generated/clients/axios/animeControllerService/animeControllerService.ts b/app/api/generated/clients/axios/animeControllerService/animeControllerService.ts
new file mode 100644
index 0000000..bb2a6a0
--- /dev/null
+++ b/app/api/generated/clients/axios/animeControllerService/animeControllerService.ts
@@ -0,0 +1,37 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable @typescript-eslint/ban-ts-comment */
+// @ts-nocheck
+
+/**
+ * Generated by Kubb (https://kubb.dev/).
+ * Do not edit manually.
+ */
+
+import { createAnime } from './createAnime.ts'
+import { deleteById } from './deleteById.ts'
+import { findById } from './findById.ts'
+import { findSimilar } from './findSimilar.ts'
+import { getAllGenres } from './getAllGenres.ts'
+import { getAllMpaaRatings } from './getAllMpaaRatings.ts'
+import { getAllStatuses } from './getAllStatuses.ts'
+import { getAllTypes } from './getAllTypes.ts'
+import { getPage } from './getPage.ts'
+import { increasePopularity } from './increasePopularity.ts'
+import { updateById } from './updateById.ts'
+
+export function animeControllerService() {
+ return {
+ getPage,
+ updateById,
+ createAnime,
+ increasePopularity,
+ findById,
+ deleteById,
+ findSimilar,
+ getAllTypes,
+ getAllStatuses,
+ getAllMpaaRatings,
+ getAllGenres,
+ }
+}
\ No newline at end of file
diff --git a/app/api/generated/clients/axios/animeControllerService/createAnime.ts b/app/api/generated/clients/axios/animeControllerService/createAnime.ts
new file mode 100644
index 0000000..9462c51
--- /dev/null
+++ b/app/api/generated/clients/axios/animeControllerService/createAnime.ts
@@ -0,0 +1,37 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable @typescript-eslint/ban-ts-comment */
+// @ts-nocheck
+
+/**
+ * Generated by Kubb (https://kubb.dev/).
+ * Do not edit manually.
+ */
+
+import fetch from '@/app/api/client'
+import type { RequestConfig, ResponseErrorConfig } from '@/app/api/client'
+import type { CreateAnimeMutationRequest, CreateAnimeMutationResponse, CreateAnime400 } from '../../../types/animeControllerController/CreateAnime.ts'
+
+function getCreateAnimeUrl() {
+ return `/api/v1/anime` as const
+}
+
+/**
+ * @summary Создание аниме
+ * {@link /api/v1/anime}
+ */
+export async function createAnime(
+ data: CreateAnimeMutationRequest,
+ config: Partial> & { client?: typeof fetch } = {},
+) {
+ const { client: request = fetch, ...requestConfig } = config
+
+ const requestData = data
+ const res = await request, CreateAnimeMutationRequest>({
+ method: 'POST',
+ url: getCreateAnimeUrl().toString(),
+ data: requestData,
+ ...requestConfig,
+ })
+ return res.data
+}
\ No newline at end of file
diff --git a/app/api/generated/clients/axios/animeControllerService/deleteById.ts b/app/api/generated/clients/axios/animeControllerService/deleteById.ts
new file mode 100644
index 0000000..b636a25
--- /dev/null
+++ b/app/api/generated/clients/axios/animeControllerService/deleteById.ts
@@ -0,0 +1,32 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable @typescript-eslint/ban-ts-comment */
+// @ts-nocheck
+
+/**
+ * Generated by Kubb (https://kubb.dev/).
+ * Do not edit manually.
+ */
+
+import fetch from '@/app/api/client'
+import type { RequestConfig, ResponseErrorConfig } from '@/app/api/client'
+import type { DeleteByIdMutationResponse, DeleteByIdPathParams } from '../../../types/animeControllerController/DeleteById.ts'
+
+function getDeleteByIdUrl(id: DeleteByIdPathParams['id']) {
+ return `/api/v1/anime/${id}` as const
+}
+
+/**
+ * @summary Удаление аниме
+ * {@link /api/v1/anime/:id}
+ */
+export async function deleteById(id: DeleteByIdPathParams['id'], config: Partial & { client?: typeof fetch } = {}) {
+ const { client: request = fetch, ...requestConfig } = config
+
+ const res = await request, unknown>({
+ method: 'DELETE',
+ url: getDeleteByIdUrl(id).toString(),
+ ...requestConfig,
+ })
+ return res.data
+}
\ No newline at end of file
diff --git a/app/api/generated/clients/axios/animeControllerService/findById.ts b/app/api/generated/clients/axios/animeControllerService/findById.ts
new file mode 100644
index 0000000..2daa7e0
--- /dev/null
+++ b/app/api/generated/clients/axios/animeControllerService/findById.ts
@@ -0,0 +1,32 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable @typescript-eslint/ban-ts-comment */
+// @ts-nocheck
+
+/**
+ * Generated by Kubb (https://kubb.dev/).
+ * Do not edit manually.
+ */
+
+import fetch from '@/app/api/client'
+import type { RequestConfig, ResponseErrorConfig } from '@/app/api/client'
+import type { FindByIdQueryResponse, FindByIdPathParams, FindById404 } from '../../../types/animeControllerController/FindById.ts'
+
+function getFindByIdUrl(id: FindByIdPathParams['id']) {
+ return `/api/v1/anime/${id}` as const
+}
+
+/**
+ * @summary Поиск аниме по id
+ * {@link /api/v1/anime/:id}
+ */
+export async function findById(id: FindByIdPathParams['id'], config: Partial & { client?: typeof fetch } = {}) {
+ const { client: request = fetch, ...requestConfig } = config
+
+ const res = await request, unknown>({
+ method: 'GET',
+ url: getFindByIdUrl(id).toString(),
+ ...requestConfig,
+ })
+ return res.data
+}
\ No newline at end of file
diff --git a/app/api/generated/clients/axios/animeControllerService/findSimilar.ts b/app/api/generated/clients/axios/animeControllerService/findSimilar.ts
new file mode 100644
index 0000000..fb0dca3
--- /dev/null
+++ b/app/api/generated/clients/axios/animeControllerService/findSimilar.ts
@@ -0,0 +1,37 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable @typescript-eslint/ban-ts-comment */
+// @ts-nocheck
+
+/**
+ * Generated by Kubb (https://kubb.dev/).
+ * Do not edit manually.
+ */
+
+import fetch from '@/app/api/client'
+import type { RequestConfig, ResponseErrorConfig } from '@/app/api/client'
+import type { FindSimilarQueryResponse, FindSimilarPathParams, FindSimilarQueryParams } from '../../../types/animeControllerController/FindSimilar.ts'
+
+function getFindSimilarUrl(animeId: FindSimilarPathParams['animeId']) {
+ return `/api/v1/anime/${animeId}/similar` as const
+}
+
+/**
+ * @summary Получение страницы похожих аниме по animeId
+ * {@link /api/v1/anime/:animeId/similar}
+ */
+export async function findSimilar(
+ animeId: FindSimilarPathParams['animeId'],
+ params: FindSimilarQueryParams,
+ config: Partial & { client?: typeof fetch } = {},
+) {
+ const { client: request = fetch, ...requestConfig } = config
+
+ const res = await request, unknown>({
+ method: 'GET',
+ url: getFindSimilarUrl(animeId).toString(),
+ params,
+ ...requestConfig,
+ })
+ return res.data
+}
\ No newline at end of file
diff --git a/app/api/generated/clients/axios/animeControllerService/getAllGenres.ts b/app/api/generated/clients/axios/animeControllerService/getAllGenres.ts
new file mode 100644
index 0000000..029a6b9
--- /dev/null
+++ b/app/api/generated/clients/axios/animeControllerService/getAllGenres.ts
@@ -0,0 +1,32 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable @typescript-eslint/ban-ts-comment */
+// @ts-nocheck
+
+/**
+ * Generated by Kubb (https://kubb.dev/).
+ * Do not edit manually.
+ */
+
+import fetch from '@/app/api/client'
+import type { RequestConfig, ResponseErrorConfig } from '@/app/api/client'
+import type { GetAllGenresQueryResponse } from '../../../types/animeControllerController/GetAllGenres.ts'
+
+function getGetAllGenresUrl() {
+ return `/api/v1/anime/genres` as const
+}
+
+/**
+ * @summary Получение списка влзможных жанров аниме
+ * {@link /api/v1/anime/genres}
+ */
+export async function getAllGenres(config: Partial & { client?: typeof fetch } = {}) {
+ const { client: request = fetch, ...requestConfig } = config
+
+ const res = await request, unknown>({
+ method: 'GET',
+ url: getGetAllGenresUrl().toString(),
+ ...requestConfig,
+ })
+ return res.data
+}
\ No newline at end of file
diff --git a/app/api/generated/clients/axios/animeControllerService/getAllMpaaRatings.ts b/app/api/generated/clients/axios/animeControllerService/getAllMpaaRatings.ts
new file mode 100644
index 0000000..f08acdb
--- /dev/null
+++ b/app/api/generated/clients/axios/animeControllerService/getAllMpaaRatings.ts
@@ -0,0 +1,32 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable @typescript-eslint/ban-ts-comment */
+// @ts-nocheck
+
+/**
+ * Generated by Kubb (https://kubb.dev/).
+ * Do not edit manually.
+ */
+
+import fetch from '@/app/api/client'
+import type { RequestConfig, ResponseErrorConfig } from '@/app/api/client'
+import type { GetAllMpaaRatingsQueryResponse } from '../../../types/animeControllerController/GetAllMpaaRatings.ts'
+
+function getGetAllMpaaRatingsUrl() {
+ return `/api/v1/anime/mpaaratings` as const
+}
+
+/**
+ * @summary Получение списка влзможных mpa рейтингов
+ * {@link /api/v1/anime/mpaaratings}
+ */
+export async function getAllMpaaRatings(config: Partial & { client?: typeof fetch } = {}) {
+ const { client: request = fetch, ...requestConfig } = config
+
+ const res = await request, unknown>({
+ method: 'GET',
+ url: getGetAllMpaaRatingsUrl().toString(),
+ ...requestConfig,
+ })
+ return res.data
+}
\ No newline at end of file
diff --git a/app/api/generated/clients/axios/animeControllerService/getAllStatuses.ts b/app/api/generated/clients/axios/animeControllerService/getAllStatuses.ts
new file mode 100644
index 0000000..f2f05c6
--- /dev/null
+++ b/app/api/generated/clients/axios/animeControllerService/getAllStatuses.ts
@@ -0,0 +1,32 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable @typescript-eslint/ban-ts-comment */
+// @ts-nocheck
+
+/**
+ * Generated by Kubb (https://kubb.dev/).
+ * Do not edit manually.
+ */
+
+import fetch from '@/app/api/client'
+import type { RequestConfig, ResponseErrorConfig } from '@/app/api/client'
+import type { GetAllStatusesQueryResponse } from '../../../types/animeControllerController/GetAllStatuses.ts'
+
+function getGetAllStatusesUrl() {
+ return `/api/v1/anime/statuses` as const
+}
+
+/**
+ * @summary Получение списка влзможных статусов аниме
+ * {@link /api/v1/anime/statuses}
+ */
+export async function getAllStatuses(config: Partial & { client?: typeof fetch } = {}) {
+ const { client: request = fetch, ...requestConfig } = config
+
+ const res = await request, unknown>({
+ method: 'GET',
+ url: getGetAllStatusesUrl().toString(),
+ ...requestConfig,
+ })
+ return res.data
+}
\ No newline at end of file
diff --git a/app/api/generated/clients/axios/animeControllerService/getAllTypes.ts b/app/api/generated/clients/axios/animeControllerService/getAllTypes.ts
new file mode 100644
index 0000000..f6f2a6f
--- /dev/null
+++ b/app/api/generated/clients/axios/animeControllerService/getAllTypes.ts
@@ -0,0 +1,32 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable @typescript-eslint/ban-ts-comment */
+// @ts-nocheck
+
+/**
+ * Generated by Kubb (https://kubb.dev/).
+ * Do not edit manually.
+ */
+
+import fetch from '@/app/api/client'
+import type { RequestConfig, ResponseErrorConfig } from '@/app/api/client'
+import type { GetAllTypesQueryResponse } from '../../../types/animeControllerController/GetAllTypes.ts'
+
+function getGetAllTypesUrl() {
+ return `/api/v1/anime/types` as const
+}
+
+/**
+ * @summary Получение списка влзможных типов аниме
+ * {@link /api/v1/anime/types}
+ */
+export async function getAllTypes(config: Partial & { client?: typeof fetch } = {}) {
+ const { client: request = fetch, ...requestConfig } = config
+
+ const res = await request, unknown>({
+ method: 'GET',
+ url: getGetAllTypesUrl().toString(),
+ ...requestConfig,
+ })
+ return res.data
+}
\ No newline at end of file
diff --git a/app/api/generated/clients/axios/animeControllerService/getPage.ts b/app/api/generated/clients/axios/animeControllerService/getPage.ts
new file mode 100644
index 0000000..8ac676c
--- /dev/null
+++ b/app/api/generated/clients/axios/animeControllerService/getPage.ts
@@ -0,0 +1,34 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable @typescript-eslint/ban-ts-comment */
+// @ts-nocheck
+
+/**
+ * Generated by Kubb (https://kubb.dev/).
+ * Do not edit manually.
+ */
+
+import fetch from '@/app/api/client'
+import type { RequestConfig, ResponseErrorConfig } from '@/app/api/client'
+import type { GetPageQueryResponse, GetPageQueryParams, GetPage400 } from '../../../types/animeControllerController/GetPage.ts'
+
+function getGetPageUrl() {
+ return `/api/v1/anime` as const
+}
+
+/**
+ * @description Возвращает страницу AnimeDto/AnimeCardDto в зависимости от параметра запроса dtoType
+ * @summary Поиск аниме по параметрам
+ * {@link /api/v1/anime}
+ */
+export async function getPage(params: GetPageQueryParams, config: Partial & { client?: typeof fetch } = {}) {
+ const { client: request = fetch, ...requestConfig } = config
+
+ const res = await request, unknown>({
+ method: 'GET',
+ url: getGetPageUrl().toString(),
+ params,
+ ...requestConfig,
+ })
+ return res.data
+}
\ No newline at end of file
diff --git a/app/api/generated/clients/axios/animeControllerService/increasePopularity.ts b/app/api/generated/clients/axios/animeControllerService/increasePopularity.ts
new file mode 100644
index 0000000..88c7ab9
--- /dev/null
+++ b/app/api/generated/clients/axios/animeControllerService/increasePopularity.ts
@@ -0,0 +1,37 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable @typescript-eslint/ban-ts-comment */
+// @ts-nocheck
+
+/**
+ * Generated by Kubb (https://kubb.dev/).
+ * Do not edit manually.
+ */
+
+import fetch from '@/app/api/client'
+import type { RequestConfig, ResponseErrorConfig } from '@/app/api/client'
+import type { IncreasePopularityMutationRequest, IncreasePopularityMutationResponse } from '../../../types/animeControllerController/IncreasePopularity.ts'
+
+function getIncreasePopularityUrl() {
+ return `/api/v1/anime/increasePopularity` as const
+}
+
+/**
+ * @summary Увеличение популярности аниме по id на 1
+ * {@link /api/v1/anime/increasePopularity}
+ */
+export async function increasePopularity(
+ data?: IncreasePopularityMutationRequest,
+ config: Partial> & { client?: typeof fetch } = {},
+) {
+ const { client: request = fetch, ...requestConfig } = config
+
+ const requestData = data
+ const res = await request, IncreasePopularityMutationRequest>({
+ method: 'POST',
+ url: getIncreasePopularityUrl().toString(),
+ data: requestData,
+ ...requestConfig,
+ })
+ return res.data
+}
\ No newline at end of file
diff --git a/app/api/generated/clients/axios/animeControllerService/updateById.ts b/app/api/generated/clients/axios/animeControllerService/updateById.ts
new file mode 100644
index 0000000..e8c5750
--- /dev/null
+++ b/app/api/generated/clients/axios/animeControllerService/updateById.ts
@@ -0,0 +1,34 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable @typescript-eslint/ban-ts-comment */
+// @ts-nocheck
+
+/**
+ * Generated by Kubb (https://kubb.dev/).
+ * Do not edit manually.
+ */
+
+import fetch from '@/app/api/client'
+import type { RequestConfig, ResponseErrorConfig } from '@/app/api/client'
+import type { UpdateByIdMutationRequest, UpdateByIdMutationResponse, UpdateById404 } from '../../../types/animeControllerController/UpdateById.ts'
+
+function getUpdateByIdUrl() {
+ return `/api/v1/anime` as const
+}
+
+/**
+ * @summary Обновление аниме
+ * {@link /api/v1/anime}
+ */
+export async function updateById(data: UpdateByIdMutationRequest, config: Partial> & { client?: typeof fetch } = {}) {
+ const { client: request = fetch, ...requestConfig } = config
+
+ const requestData = data
+ const res = await request, UpdateByIdMutationRequest>({
+ method: 'PUT',
+ url: getUpdateByIdUrl().toString(),
+ data: requestData,
+ ...requestConfig,
+ })
+ return res.data
+}
\ No newline at end of file
diff --git a/app/api/generated/clients/axios/commentsControllerService/commentsControllerService.ts b/app/api/generated/clients/axios/commentsControllerService/commentsControllerService.ts
new file mode 100644
index 0000000..ed9c09d
--- /dev/null
+++ b/app/api/generated/clients/axios/commentsControllerService/commentsControllerService.ts
@@ -0,0 +1,19 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable @typescript-eslint/ban-ts-comment */
+// @ts-nocheck
+
+/**
+ * Generated by Kubb (https://kubb.dev/).
+ * Do not edit manually.
+ */
+
+import { createComment } from './createComment.ts'
+import { deleteComment } from './deleteComment.ts'
+import { getCommentsById } from './getCommentsById.ts'
+import { getCommentsByUser } from './getCommentsByUser.ts'
+import { updateComment } from './updateComment.ts'
+
+export function commentsControllerService() {
+ return { updateComment, createComment, getCommentsByUser, getCommentsById, deleteComment }
+}
\ No newline at end of file
diff --git a/app/api/generated/clients/axios/commentsControllerService/createComment.ts b/app/api/generated/clients/axios/commentsControllerService/createComment.ts
new file mode 100644
index 0000000..4931edf
--- /dev/null
+++ b/app/api/generated/clients/axios/commentsControllerService/createComment.ts
@@ -0,0 +1,42 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable @typescript-eslint/ban-ts-comment */
+// @ts-nocheck
+
+/**
+ * Generated by Kubb (https://kubb.dev/).
+ * Do not edit manually.
+ */
+
+import fetch from '@/app/api/client'
+import type { RequestConfig, ResponseErrorConfig } from '@/app/api/client'
+import type {
+ CreateCommentMutationRequest,
+ CreateCommentMutationResponse,
+ CreateComment400,
+ CreateComment404,
+} from '../../../types/commentsControllerController/CreateComment.ts'
+
+function getCreateCommentUrl() {
+ return `/api/v1/anime/comments` as const
+}
+
+/**
+ * @summary Создание комментария
+ * {@link /api/v1/anime/comments}
+ */
+export async function createComment(
+ data: CreateCommentMutationRequest,
+ config: Partial> & { client?: typeof fetch } = {},
+) {
+ const { client: request = fetch, ...requestConfig } = config
+
+ const requestData = data
+ const res = await request, CreateCommentMutationRequest>({
+ method: 'POST',
+ url: getCreateCommentUrl().toString(),
+ data: requestData,
+ ...requestConfig,
+ })
+ return res.data
+}
\ No newline at end of file
diff --git a/app/api/generated/clients/axios/commentsControllerService/deleteComment.ts b/app/api/generated/clients/axios/commentsControllerService/deleteComment.ts
new file mode 100644
index 0000000..dd0905d
--- /dev/null
+++ b/app/api/generated/clients/axios/commentsControllerService/deleteComment.ts
@@ -0,0 +1,37 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable @typescript-eslint/ban-ts-comment */
+// @ts-nocheck
+
+/**
+ * Generated by Kubb (https://kubb.dev/).
+ * Do not edit manually.
+ */
+
+import fetch from '@/app/api/client'
+import type { RequestConfig, ResponseErrorConfig } from '@/app/api/client'
+import type {
+ DeleteCommentMutationResponse,
+ DeleteCommentPathParams,
+ DeleteComment400,
+ DeleteComment404,
+} from '../../../types/commentsControllerController/DeleteComment.ts'
+
+function getDeleteCommentUrl(id: DeleteCommentPathParams['id']) {
+ return `/api/v1/anime/comments/${id}` as const
+}
+
+/**
+ * @summary Удаление комментария по id
+ * {@link /api/v1/anime/comments/:id}
+ */
+export async function deleteComment(id: DeleteCommentPathParams['id'], config: Partial & { client?: typeof fetch } = {}) {
+ const { client: request = fetch, ...requestConfig } = config
+
+ const res = await request, unknown>({
+ method: 'DELETE',
+ url: getDeleteCommentUrl(id).toString(),
+ ...requestConfig,
+ })
+ return res.data
+}
\ No newline at end of file
diff --git a/app/api/generated/clients/axios/commentsControllerService/getCommentsById.ts b/app/api/generated/clients/axios/commentsControllerService/getCommentsById.ts
new file mode 100644
index 0000000..11cd7dd
--- /dev/null
+++ b/app/api/generated/clients/axios/commentsControllerService/getCommentsById.ts
@@ -0,0 +1,42 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable @typescript-eslint/ban-ts-comment */
+// @ts-nocheck
+
+/**
+ * Generated by Kubb (https://kubb.dev/).
+ * Do not edit manually.
+ */
+
+import fetch from '@/app/api/client'
+import type { RequestConfig, ResponseErrorConfig } from '@/app/api/client'
+import type {
+ GetCommentsByIdQueryResponse,
+ GetCommentsByIdPathParams,
+ GetCommentsByIdQueryParams,
+} from '../../../types/commentsControllerController/GetCommentsById.ts'
+
+function getGetCommentsByIdUrl(type: GetCommentsByIdPathParams['type'], id: GetCommentsByIdPathParams['id']) {
+ return `/api/v1/anime/comments/by-type-and-id/${type}/${id}` as const
+}
+
+/**
+ * @summary Постраничное получение всех комментариев пользователя по id пользователя с фильтрацией по типу комментария
+ * {@link /api/v1/anime/comments/by-type-and-id/:type/:id}
+ */
+export async function getCommentsById(
+ type: GetCommentsByIdPathParams['type'],
+ id: GetCommentsByIdPathParams['id'],
+ params: GetCommentsByIdQueryParams,
+ config: Partial & { client?: typeof fetch } = {},
+) {
+ const { client: request = fetch, ...requestConfig } = config
+
+ const res = await request, unknown>({
+ method: 'GET',
+ url: getGetCommentsByIdUrl(type, id).toString(),
+ params,
+ ...requestConfig,
+ })
+ return res.data
+}
\ No newline at end of file
diff --git a/app/api/generated/clients/axios/commentsControllerService/getCommentsByUser.ts b/app/api/generated/clients/axios/commentsControllerService/getCommentsByUser.ts
new file mode 100644
index 0000000..5c403c6
--- /dev/null
+++ b/app/api/generated/clients/axios/commentsControllerService/getCommentsByUser.ts
@@ -0,0 +1,41 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable @typescript-eslint/ban-ts-comment */
+// @ts-nocheck
+
+/**
+ * Generated by Kubb (https://kubb.dev/).
+ * Do not edit manually.
+ */
+
+import fetch from '@/app/api/client'
+import type { RequestConfig, ResponseErrorConfig } from '@/app/api/client'
+import type {
+ GetCommentsByUserQueryResponse,
+ GetCommentsByUserPathParams,
+ GetCommentsByUserQueryParams,
+} from '../../../types/commentsControllerController/GetCommentsByUser.ts'
+
+function getGetCommentsByUserUrl(id: GetCommentsByUserPathParams['id']) {
+ return `/api/v1/anime/comments/by-user/${id}` as const
+}
+
+/**
+ * @summary Постраничное получение всех комментариев пользователя по id пользователя
+ * {@link /api/v1/anime/comments/by-user/:id}
+ */
+export async function getCommentsByUser(
+ id: GetCommentsByUserPathParams['id'],
+ params: GetCommentsByUserQueryParams,
+ config: Partial & { client?: typeof fetch } = {},
+) {
+ const { client: request = fetch, ...requestConfig } = config
+
+ const res = await request, unknown>({
+ method: 'GET',
+ url: getGetCommentsByUserUrl(id).toString(),
+ params,
+ ...requestConfig,
+ })
+ return res.data
+}
\ No newline at end of file
diff --git a/app/api/generated/clients/axios/commentsControllerService/updateComment.ts b/app/api/generated/clients/axios/commentsControllerService/updateComment.ts
new file mode 100644
index 0000000..7821cda
--- /dev/null
+++ b/app/api/generated/clients/axios/commentsControllerService/updateComment.ts
@@ -0,0 +1,42 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable @typescript-eslint/ban-ts-comment */
+// @ts-nocheck
+
+/**
+ * Generated by Kubb (https://kubb.dev/).
+ * Do not edit manually.
+ */
+
+import fetch from '@/app/api/client'
+import type { RequestConfig, ResponseErrorConfig } from '@/app/api/client'
+import type {
+ UpdateCommentMutationRequest,
+ UpdateCommentMutationResponse,
+ UpdateComment400,
+ UpdateComment404,
+} from '../../../types/commentsControllerController/UpdateComment.ts'
+
+function getUpdateCommentUrl() {
+ return `/api/v1/anime/comments` as const
+}
+
+/**
+ * @summary Удаление комментария по id
+ * {@link /api/v1/anime/comments}
+ */
+export async function updateComment(
+ data: UpdateCommentMutationRequest,
+ config: Partial> & { client?: typeof fetch } = {},
+) {
+ const { client: request = fetch, ...requestConfig } = config
+
+ const requestData = data
+ const res = await request, UpdateCommentMutationRequest>({
+ method: 'PUT',
+ url: getUpdateCommentUrl().toString(),
+ data: requestData,
+ ...requestConfig,
+ })
+ return res.data
+}
\ No newline at end of file
diff --git a/app/api/generated/clients/axios/complaintControllerService/complaintControllerService.ts b/app/api/generated/clients/axios/complaintControllerService/complaintControllerService.ts
new file mode 100644
index 0000000..5914c4a
--- /dev/null
+++ b/app/api/generated/clients/axios/complaintControllerService/complaintControllerService.ts
@@ -0,0 +1,18 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable @typescript-eslint/ban-ts-comment */
+// @ts-nocheck
+
+/**
+ * Generated by Kubb (https://kubb.dev/).
+ * Do not edit manually.
+ */
+
+import { createComplaint } from './createComplaint.ts'
+import { getComplaintById } from './getComplaintById.ts'
+import { getComplaints } from './getComplaints.ts'
+import { updateComplaintStatus } from './updateComplaintStatus.ts'
+
+export function complaintControllerService() {
+ return { getComplaintById, updateComplaintStatus, createComplaint, getComplaints }
+}
\ No newline at end of file
diff --git a/app/api/generated/clients/axios/complaintControllerService/createComplaint.ts b/app/api/generated/clients/axios/complaintControllerService/createComplaint.ts
new file mode 100644
index 0000000..4c4b42f
--- /dev/null
+++ b/app/api/generated/clients/axios/complaintControllerService/createComplaint.ts
@@ -0,0 +1,41 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable @typescript-eslint/ban-ts-comment */
+// @ts-nocheck
+
+/**
+ * Generated by Kubb (https://kubb.dev/).
+ * Do not edit manually.
+ */
+
+import fetch from '@/app/api/client'
+import type { RequestConfig, ResponseErrorConfig } from '@/app/api/client'
+import type {
+ CreateComplaintMutationRequest,
+ CreateComplaintMutationResponse,
+ CreateComplaint400,
+} from '../../../types/complaintControllerController/CreateComplaint.ts'
+
+function getCreateComplaintUrl() {
+ return `/api/v1/complaint` as const
+}
+
+/**
+ * @summary Создание жалобы
+ * {@link /api/v1/complaint}
+ */
+export async function createComplaint(
+ data: CreateComplaintMutationRequest,
+ config: Partial> & { client?: typeof fetch } = {},
+) {
+ const { client: request = fetch, ...requestConfig } = config
+
+ const requestData = data
+ const res = await request, CreateComplaintMutationRequest>({
+ method: 'POST',
+ url: getCreateComplaintUrl().toString(),
+ data: requestData,
+ ...requestConfig,
+ })
+ return res.data
+}
\ No newline at end of file
diff --git a/app/api/generated/clients/axios/complaintControllerService/getComplaintById.ts b/app/api/generated/clients/axios/complaintControllerService/getComplaintById.ts
new file mode 100644
index 0000000..a5defaf
--- /dev/null
+++ b/app/api/generated/clients/axios/complaintControllerService/getComplaintById.ts
@@ -0,0 +1,39 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable @typescript-eslint/ban-ts-comment */
+// @ts-nocheck
+
+/**
+ * Generated by Kubb (https://kubb.dev/).
+ * Do not edit manually.
+ */
+
+import fetch from '@/app/api/client'
+import type { RequestConfig, ResponseErrorConfig } from '@/app/api/client'
+import type {
+ GetComplaintByIdQueryResponse,
+ GetComplaintByIdPathParams,
+ GetComplaintById404,
+} from '../../../types/complaintControllerController/GetComplaintById.ts'
+
+function getGetComplaintByIdUrl(complaintId: GetComplaintByIdPathParams['complaintId']) {
+ return `/api/v1/complaint/${complaintId}` as const
+}
+
+/**
+ * @summary Получение жалобы по id
+ * {@link /api/v1/complaint/:complaintId}
+ */
+export async function getComplaintById(
+ complaintId: GetComplaintByIdPathParams['complaintId'],
+ config: Partial & { client?: typeof fetch } = {},
+) {
+ const { client: request = fetch, ...requestConfig } = config
+
+ const res = await request, unknown>({
+ method: 'GET',
+ url: getGetComplaintByIdUrl(complaintId).toString(),
+ ...requestConfig,
+ })
+ return res.data
+}
\ No newline at end of file
diff --git a/app/api/generated/clients/axios/complaintControllerService/getComplaints.ts b/app/api/generated/clients/axios/complaintControllerService/getComplaints.ts
new file mode 100644
index 0000000..9e12ab9
--- /dev/null
+++ b/app/api/generated/clients/axios/complaintControllerService/getComplaints.ts
@@ -0,0 +1,37 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable @typescript-eslint/ban-ts-comment */
+// @ts-nocheck
+
+/**
+ * Generated by Kubb (https://kubb.dev/).
+ * Do not edit manually.
+ */
+
+import fetch from '@/app/api/client'
+import type { RequestConfig, ResponseErrorConfig } from '@/app/api/client'
+import type { GetComplaintsMutationRequest, GetComplaintsMutationResponse } from '../../../types/complaintControllerController/GetComplaints.ts'
+
+function getGetComplaintsUrl() {
+ return `/api/v1/complaint/search` as const
+}
+
+/**
+ * @summary Поиск жалоб по фильтрам
+ * {@link /api/v1/complaint/search}
+ */
+export async function getComplaints(
+ data?: GetComplaintsMutationRequest,
+ config: Partial> & { client?: typeof fetch } = {},
+) {
+ const { client: request = fetch, ...requestConfig } = config
+
+ const requestData = data
+ const res = await request, GetComplaintsMutationRequest>({
+ method: 'POST',
+ url: getGetComplaintsUrl().toString(),
+ data: requestData,
+ ...requestConfig,
+ })
+ return res.data
+}
\ No newline at end of file
diff --git a/app/api/generated/clients/axios/complaintControllerService/updateComplaintStatus.ts b/app/api/generated/clients/axios/complaintControllerService/updateComplaintStatus.ts
new file mode 100644
index 0000000..7bcbc71
--- /dev/null
+++ b/app/api/generated/clients/axios/complaintControllerService/updateComplaintStatus.ts
@@ -0,0 +1,42 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable @typescript-eslint/ban-ts-comment */
+// @ts-nocheck
+
+/**
+ * Generated by Kubb (https://kubb.dev/).
+ * Do not edit manually.
+ */
+
+import fetch from '@/app/api/client'
+import type { RequestConfig, ResponseErrorConfig } from '@/app/api/client'
+import type {
+ UpdateComplaintStatusMutationResponse,
+ UpdateComplaintStatusPathParams,
+ UpdateComplaintStatusQueryParams,
+ UpdateComplaintStatus404,
+} from '../../../types/complaintControllerController/UpdateComplaintStatus.ts'
+
+function getUpdateComplaintStatusUrl(complaintId: UpdateComplaintStatusPathParams['complaintId']) {
+ return `/api/v1/complaint/${complaintId}` as const
+}
+
+/**
+ * @summary Измененение статуса жалобы
+ * {@link /api/v1/complaint/:complaintId}
+ */
+export async function updateComplaintStatus(
+ complaintId: UpdateComplaintStatusPathParams['complaintId'],
+ params: UpdateComplaintStatusQueryParams,
+ config: Partial & { client?: typeof fetch } = {},
+) {
+ const { client: request = fetch, ...requestConfig } = config
+
+ const res = await request, unknown>({
+ method: 'PUT',
+ url: getUpdateComplaintStatusUrl(complaintId).toString(),
+ params,
+ ...requestConfig,
+ })
+ return res.data
+}
\ No newline at end of file
diff --git a/app/api/generated/clients/axios/dubControllerService/addDubToEpisode.ts b/app/api/generated/clients/axios/dubControllerService/addDubToEpisode.ts
new file mode 100644
index 0000000..42e003c
--- /dev/null
+++ b/app/api/generated/clients/axios/dubControllerService/addDubToEpisode.ts
@@ -0,0 +1,36 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable @typescript-eslint/ban-ts-comment */
+// @ts-nocheck
+
+/**
+ * Generated by Kubb (https://kubb.dev/).
+ * Do not edit manually.
+ */
+
+import fetch from '@/app/api/client'
+import type { RequestConfig, ResponseErrorConfig } from '@/app/api/client'
+import type { AddDubToEpisodeMutationResponse, AddDubToEpisodePathParams, AddDubToEpisode404 } from '../../../types/dubControllerController/AddDubToEpisode.ts'
+
+function getAddDubToEpisodeUrl(dubId: AddDubToEpisodePathParams['dubId'], episodeId: AddDubToEpisodePathParams['episodeId']) {
+ return `/api/v1/anime/dubs/${dubId}/episodes/${episodeId}` as const
+}
+
+/**
+ * @summary Добавление дубляжа к эпизоду
+ * {@link /api/v1/anime/dubs/:dubId/episodes/:episodeId}
+ */
+export async function addDubToEpisode(
+ dubId: AddDubToEpisodePathParams['dubId'],
+ episodeId: AddDubToEpisodePathParams['episodeId'],
+ config: Partial & { client?: typeof fetch } = {},
+) {
+ const { client: request = fetch, ...requestConfig } = config
+
+ const res = await request, unknown>({
+ method: 'POST',
+ url: getAddDubToEpisodeUrl(dubId, episodeId).toString(),
+ ...requestConfig,
+ })
+ return res.data
+}
\ No newline at end of file
diff --git a/app/api/generated/clients/axios/dubControllerService/createDub.ts b/app/api/generated/clients/axios/dubControllerService/createDub.ts
new file mode 100644
index 0000000..adb28f5
--- /dev/null
+++ b/app/api/generated/clients/axios/dubControllerService/createDub.ts
@@ -0,0 +1,34 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable @typescript-eslint/ban-ts-comment */
+// @ts-nocheck
+
+/**
+ * Generated by Kubb (https://kubb.dev/).
+ * Do not edit manually.
+ */
+
+import fetch from '@/app/api/client'
+import type { RequestConfig, ResponseErrorConfig } from '@/app/api/client'
+import type { CreateDubMutationRequest, CreateDubMutationResponse } from '../../../types/dubControllerController/CreateDub.ts'
+
+function getCreateDubUrl() {
+ return `/api/v1/anime/dubs` as const
+}
+
+/**
+ * @summary Создание дубляжа
+ * {@link /api/v1/anime/dubs}
+ */
+export async function createDub(data: CreateDubMutationRequest, config: Partial> & { client?: typeof fetch } = {}) {
+ const { client: request = fetch, ...requestConfig } = config
+
+ const requestData = data
+ const res = await request, CreateDubMutationRequest>({
+ method: 'POST',
+ url: getCreateDubUrl().toString(),
+ data: requestData,
+ ...requestConfig,
+ })
+ return res.data
+}
\ No newline at end of file
diff --git a/app/api/generated/clients/axios/dubControllerService/deleteDub.ts b/app/api/generated/clients/axios/dubControllerService/deleteDub.ts
new file mode 100644
index 0000000..331937e
--- /dev/null
+++ b/app/api/generated/clients/axios/dubControllerService/deleteDub.ts
@@ -0,0 +1,32 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable @typescript-eslint/ban-ts-comment */
+// @ts-nocheck
+
+/**
+ * Generated by Kubb (https://kubb.dev/).
+ * Do not edit manually.
+ */
+
+import fetch from '@/app/api/client'
+import type { RequestConfig, ResponseErrorConfig } from '@/app/api/client'
+import type { DeleteDubMutationResponse, DeleteDubPathParams } from '../../../types/dubControllerController/DeleteDub.ts'
+
+function getDeleteDubUrl(id: DeleteDubPathParams['id']) {
+ return `/api/v1/anime/dubs/${id}` as const
+}
+
+/**
+ * @summary Удаление дубляжа
+ * {@link /api/v1/anime/dubs/:id}
+ */
+export async function deleteDub(id: DeleteDubPathParams['id'], config: Partial & { client?: typeof fetch } = {}) {
+ const { client: request = fetch, ...requestConfig } = config
+
+ const res = await request, unknown>({
+ method: 'DELETE',
+ url: getDeleteDubUrl(id).toString(),
+ ...requestConfig,
+ })
+ return res.data
+}
\ No newline at end of file
diff --git a/app/api/generated/clients/axios/dubControllerService/dubControllerService.ts b/app/api/generated/clients/axios/dubControllerService/dubControllerService.ts
new file mode 100644
index 0000000..3597e42
--- /dev/null
+++ b/app/api/generated/clients/axios/dubControllerService/dubControllerService.ts
@@ -0,0 +1,21 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable @typescript-eslint/ban-ts-comment */
+// @ts-nocheck
+
+/**
+ * Generated by Kubb (https://kubb.dev/).
+ * Do not edit manually.
+ */
+
+import { addDubToEpisode } from './addDubToEpisode.ts'
+import { createDub } from './createDub.ts'
+import { deleteDub } from './deleteDub.ts'
+import { getDubById } from './getDubById.ts'
+import { getDubsByEpisode } from './getDubsByEpisode.ts'
+import { removeDubFromEpisode } from './removeDubFromEpisode.ts'
+import { updateDubName } from './updateDubName.ts'
+
+export function dubControllerService() {
+ return { getDubById, updateDubName, deleteDub, createDub, addDubToEpisode, removeDubFromEpisode, getDubsByEpisode }
+}
\ No newline at end of file
diff --git a/app/api/generated/clients/axios/dubControllerService/getDubById.ts b/app/api/generated/clients/axios/dubControllerService/getDubById.ts
new file mode 100644
index 0000000..312512a
--- /dev/null
+++ b/app/api/generated/clients/axios/dubControllerService/getDubById.ts
@@ -0,0 +1,32 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable @typescript-eslint/ban-ts-comment */
+// @ts-nocheck
+
+/**
+ * Generated by Kubb (https://kubb.dev/).
+ * Do not edit manually.
+ */
+
+import fetch from '@/app/api/client'
+import type { RequestConfig, ResponseErrorConfig } from '@/app/api/client'
+import type { GetDubByIdQueryResponse, GetDubByIdPathParams, GetDubById404 } from '../../../types/dubControllerController/GetDubById.ts'
+
+function getGetDubByIdUrl(id: GetDubByIdPathParams['id']) {
+ return `/api/v1/anime/dubs/${id}` as const
+}
+
+/**
+ * @summary Получение дубляжа по id
+ * {@link /api/v1/anime/dubs/:id}
+ */
+export async function getDubById(id: GetDubByIdPathParams['id'], config: Partial & { client?: typeof fetch } = {}) {
+ const { client: request = fetch, ...requestConfig } = config
+
+ const res = await request, unknown>({
+ method: 'GET',
+ url: getGetDubByIdUrl(id).toString(),
+ ...requestConfig,
+ })
+ return res.data
+}
\ No newline at end of file
diff --git a/app/api/generated/clients/axios/dubControllerService/getDubsByEpisode.ts b/app/api/generated/clients/axios/dubControllerService/getDubsByEpisode.ts
new file mode 100644
index 0000000..901adcf
--- /dev/null
+++ b/app/api/generated/clients/axios/dubControllerService/getDubsByEpisode.ts
@@ -0,0 +1,33 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable @typescript-eslint/ban-ts-comment */
+// @ts-nocheck
+
+/**
+ * Generated by Kubb (https://kubb.dev/).
+ * Do not edit manually.
+ */
+
+import fetch from '@/app/api/client'
+import type { RequestConfig, ResponseErrorConfig } from '@/app/api/client'
+import type { GetDubsByEpisodeQueryResponse, GetDubsByEpisodePathParams } from '../../../types/dubControllerController/GetDubsByEpisode.ts'
+
+function getGetDubsByEpisodeUrl(episodeID: GetDubsByEpisodePathParams['episodeID']) {
+ return `/api/v1/anime/dubs/by-episode/${episodeID}/all` as const
+}
+
+/**
+ * @description В случае отсутствия эпизода или дубляжей вернет пустой список
+ * @summary Получение списка дубляжей по id эпизода
+ * {@link /api/v1/anime/dubs/by-episode/:episodeID/all}
+ */
+export async function getDubsByEpisode(episodeID: GetDubsByEpisodePathParams['episodeID'], config: Partial & { client?: typeof fetch } = {}) {
+ const { client: request = fetch, ...requestConfig } = config
+
+ const res = await request, unknown>({
+ method: 'GET',
+ url: getGetDubsByEpisodeUrl(episodeID).toString(),
+ ...requestConfig,
+ })
+ return res.data
+}
\ No newline at end of file
diff --git a/app/api/generated/clients/axios/dubControllerService/removeDubFromEpisode.ts b/app/api/generated/clients/axios/dubControllerService/removeDubFromEpisode.ts
new file mode 100644
index 0000000..17b17f7
--- /dev/null
+++ b/app/api/generated/clients/axios/dubControllerService/removeDubFromEpisode.ts
@@ -0,0 +1,40 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable @typescript-eslint/ban-ts-comment */
+// @ts-nocheck
+
+/**
+ * Generated by Kubb (https://kubb.dev/).
+ * Do not edit manually.
+ */
+
+import fetch from '@/app/api/client'
+import type { RequestConfig, ResponseErrorConfig } from '@/app/api/client'
+import type {
+ RemoveDubFromEpisodeMutationResponse,
+ RemoveDubFromEpisodePathParams,
+ RemoveDubFromEpisode404,
+} from '../../../types/dubControllerController/RemoveDubFromEpisode.ts'
+
+function getRemoveDubFromEpisodeUrl(dubId: RemoveDubFromEpisodePathParams['dubId'], episodeId: RemoveDubFromEpisodePathParams['episodeId']) {
+ return `/api/v1/anime/dubs/${dubId}/episodes/${episodeId}` as const
+}
+
+/**
+ * @summary Удаление дубляжа к эпизоду
+ * {@link /api/v1/anime/dubs/:dubId/episodes/:episodeId}
+ */
+export async function removeDubFromEpisode(
+ dubId: RemoveDubFromEpisodePathParams['dubId'],
+ episodeId: RemoveDubFromEpisodePathParams['episodeId'],
+ config: Partial & { client?: typeof fetch } = {},
+) {
+ const { client: request = fetch, ...requestConfig } = config
+
+ const res = await request, unknown>({
+ method: 'DELETE',
+ url: getRemoveDubFromEpisodeUrl(dubId, episodeId).toString(),
+ ...requestConfig,
+ })
+ return res.data
+}
\ No newline at end of file
diff --git a/app/api/generated/clients/axios/dubControllerService/updateDubName.ts b/app/api/generated/clients/axios/dubControllerService/updateDubName.ts
new file mode 100644
index 0000000..28bda51
--- /dev/null
+++ b/app/api/generated/clients/axios/dubControllerService/updateDubName.ts
@@ -0,0 +1,42 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable @typescript-eslint/ban-ts-comment */
+// @ts-nocheck
+
+/**
+ * Generated by Kubb (https://kubb.dev/).
+ * Do not edit manually.
+ */
+
+import fetch from '@/app/api/client'
+import type { RequestConfig, ResponseErrorConfig } from '@/app/api/client'
+import type {
+ UpdateDubNameMutationResponse,
+ UpdateDubNamePathParams,
+ UpdateDubNameQueryParams,
+ UpdateDubName404,
+} from '../../../types/dubControllerController/UpdateDubName.ts'
+
+function getUpdateDubNameUrl(id: UpdateDubNamePathParams['id']) {
+ return `/api/v1/anime/dubs/${id}` as const
+}
+
+/**
+ * @summary Обновление дубляжа по id
+ * {@link /api/v1/anime/dubs/:id}
+ */
+export async function updateDubName(
+ id: UpdateDubNamePathParams['id'],
+ params: UpdateDubNameQueryParams,
+ config: Partial & { client?: typeof fetch } = {},
+) {
+ const { client: request = fetch, ...requestConfig } = config
+
+ const res = await request, unknown>({
+ method: 'PUT',
+ url: getUpdateDubNameUrl(id).toString(),
+ params,
+ ...requestConfig,
+ })
+ return res.data
+}
\ No newline at end of file
diff --git a/app/api/generated/clients/axios/episodesControllerService/addView.ts b/app/api/generated/clients/axios/episodesControllerService/addView.ts
new file mode 100644
index 0000000..549837d
--- /dev/null
+++ b/app/api/generated/clients/axios/episodesControllerService/addView.ts
@@ -0,0 +1,32 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable @typescript-eslint/ban-ts-comment */
+// @ts-nocheck
+
+/**
+ * Generated by Kubb (https://kubb.dev/).
+ * Do not edit manually.
+ */
+
+import fetch from '@/app/api/client'
+import type { RequestConfig, ResponseErrorConfig } from '@/app/api/client'
+import type { AddViewMutationResponse, AddViewPathParams } from '../../../types/episodesControllerController/AddView.ts'
+
+function getAddViewUrl(id: AddViewPathParams['id']) {
+ return `/api/v1/anime/episodes/${id}/view` as const
+}
+
+/**
+ * @summary Добавление просмотра эпизода
+ * {@link /api/v1/anime/episodes/:id/view}
+ */
+export async function addView(id: AddViewPathParams['id'], config: Partial & { client?: typeof fetch } = {}) {
+ const { client: request = fetch, ...requestConfig } = config
+
+ const res = await request, unknown>({
+ method: 'POST',
+ url: getAddViewUrl(id).toString(),
+ ...requestConfig,
+ })
+ return res.data
+}
\ No newline at end of file
diff --git a/app/api/generated/clients/axios/episodesControllerService/createEpisode.ts b/app/api/generated/clients/axios/episodesControllerService/createEpisode.ts
new file mode 100644
index 0000000..5aaf8a0
--- /dev/null
+++ b/app/api/generated/clients/axios/episodesControllerService/createEpisode.ts
@@ -0,0 +1,37 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable @typescript-eslint/ban-ts-comment */
+// @ts-nocheck
+
+/**
+ * Generated by Kubb (https://kubb.dev/).
+ * Do not edit manually.
+ */
+
+import fetch from '@/app/api/client'
+import type { RequestConfig, ResponseErrorConfig } from '@/app/api/client'
+import type { CreateEpisodeMutationRequest, CreateEpisodeMutationResponse } from '../../../types/episodesControllerController/CreateEpisode.ts'
+
+function getCreateEpisodeUrl() {
+ return `/api/v1/anime/episodes` as const
+}
+
+/**
+ * @summary Создание эпизода
+ * {@link /api/v1/anime/episodes}
+ */
+export async function createEpisode(
+ data: CreateEpisodeMutationRequest,
+ config: Partial> & { client?: typeof fetch } = {},
+) {
+ const { client: request = fetch, ...requestConfig } = config
+
+ const requestData = data
+ const res = await request, CreateEpisodeMutationRequest>({
+ method: 'POST',
+ url: getCreateEpisodeUrl().toString(),
+ data: requestData,
+ ...requestConfig,
+ })
+ return res.data
+}
\ No newline at end of file
diff --git a/app/api/generated/clients/axios/episodesControllerService/deleteEpisode.ts b/app/api/generated/clients/axios/episodesControllerService/deleteEpisode.ts
new file mode 100644
index 0000000..6a4c2b0
--- /dev/null
+++ b/app/api/generated/clients/axios/episodesControllerService/deleteEpisode.ts
@@ -0,0 +1,32 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable @typescript-eslint/ban-ts-comment */
+// @ts-nocheck
+
+/**
+ * Generated by Kubb (https://kubb.dev/).
+ * Do not edit manually.
+ */
+
+import fetch from '@/app/api/client'
+import type { RequestConfig, ResponseErrorConfig } from '@/app/api/client'
+import type { DeleteEpisodeMutationResponse, DeleteEpisodePathParams } from '../../../types/episodesControllerController/DeleteEpisode.ts'
+
+function getDeleteEpisodeUrl(id: DeleteEpisodePathParams['id']) {
+ return `/api/v1/anime/episodes/${id}` as const
+}
+
+/**
+ * @summary Удаление эпизода
+ * {@link /api/v1/anime/episodes/:id}
+ */
+export async function deleteEpisode(id: DeleteEpisodePathParams['id'], config: Partial & { client?: typeof fetch } = {}) {
+ const { client: request = fetch, ...requestConfig } = config
+
+ const res = await request, unknown>({
+ method: 'DELETE',
+ url: getDeleteEpisodeUrl(id).toString(),
+ ...requestConfig,
+ })
+ return res.data
+}
\ No newline at end of file
diff --git a/app/api/generated/clients/axios/episodesControllerService/episodesControllerService.ts b/app/api/generated/clients/axios/episodesControllerService/episodesControllerService.ts
new file mode 100644
index 0000000..b95ca65
--- /dev/null
+++ b/app/api/generated/clients/axios/episodesControllerService/episodesControllerService.ts
@@ -0,0 +1,22 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable @typescript-eslint/ban-ts-comment */
+// @ts-nocheck
+
+/**
+ * Generated by Kubb (https://kubb.dev/).
+ * Do not edit manually.
+ */
+
+import { addView } from './addView.ts'
+import { createEpisode } from './createEpisode.ts'
+import { deleteEpisode } from './deleteEpisode.ts'
+import { getAdminEpisodeById } from './getAdminEpisodeById.ts'
+import { getEpisodeById } from './getEpisodeById.ts'
+import { getEpisodesByAnimeId } from './getEpisodesByAnimeId.ts'
+import { updateEpisode } from './updateEpisode.ts'
+import { updateEpisodeOrder } from './updateEpisodeOrder.ts'
+
+export function episodesControllerService() {
+ return { getEpisodeById, updateEpisode, deleteEpisode, updateEpisodeOrder, createEpisode, addView, getAdminEpisodeById, getEpisodesByAnimeId }
+}
\ No newline at end of file
diff --git a/app/api/generated/clients/axios/episodesControllerService/getAdminEpisodeById.ts b/app/api/generated/clients/axios/episodesControllerService/getAdminEpisodeById.ts
new file mode 100644
index 0000000..947777c
--- /dev/null
+++ b/app/api/generated/clients/axios/episodesControllerService/getAdminEpisodeById.ts
@@ -0,0 +1,33 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable @typescript-eslint/ban-ts-comment */
+// @ts-nocheck
+
+/**
+ * Generated by Kubb (https://kubb.dev/).
+ * Do not edit manually.
+ */
+
+import fetch from '@/app/api/client'
+import type { RequestConfig, ResponseErrorConfig } from '@/app/api/client'
+import type { GetAdminEpisodeByIdQueryResponse, GetAdminEpisodeByIdPathParams } from '../../../types/episodesControllerController/GetAdminEpisodeById.ts'
+
+function getGetAdminEpisodeByIdUrl(id: GetAdminEpisodeByIdPathParams['id']) {
+ return `/api/v1/anime/episodes/${id}/admin` as const
+}
+
+/**
+ * @description (дополнительные данные о том, кто смодерировал, опубликовал)
+ * @summary Получение эпизода по ID для админки
+ * {@link /api/v1/anime/episodes/:id/admin}
+ */
+export async function getAdminEpisodeById(id: GetAdminEpisodeByIdPathParams['id'], config: Partial & { client?: typeof fetch } = {}) {
+ const { client: request = fetch, ...requestConfig } = config
+
+ const res = await request, unknown>({
+ method: 'GET',
+ url: getGetAdminEpisodeByIdUrl(id).toString(),
+ ...requestConfig,
+ })
+ return res.data
+}
\ No newline at end of file
diff --git a/app/api/generated/clients/axios/episodesControllerService/getEpisodeById.ts b/app/api/generated/clients/axios/episodesControllerService/getEpisodeById.ts
new file mode 100644
index 0000000..28f75ee
--- /dev/null
+++ b/app/api/generated/clients/axios/episodesControllerService/getEpisodeById.ts
@@ -0,0 +1,41 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable @typescript-eslint/ban-ts-comment */
+// @ts-nocheck
+
+/**
+ * Generated by Kubb (https://kubb.dev/).
+ * Do not edit manually.
+ */
+
+import fetch from '@/app/api/client'
+import type { RequestConfig, ResponseErrorConfig } from '@/app/api/client'
+import type {
+ GetEpisodeByIdQueryResponse,
+ GetEpisodeByIdPathParams,
+ GetEpisodeByIdQueryParams,
+} from '../../../types/episodesControllerController/GetEpisodeById.ts'
+
+function getGetEpisodeByIdUrl(id: GetEpisodeByIdPathParams['id']) {
+ return `/api/v1/anime/episodes/${id}` as const
+}
+
+/**
+ * @summary Получение эпизода по ID, с возможностью указания DtoType (DEFAULT/CARD), если тип не указан, будет выведен DEFAULT
+ * {@link /api/v1/anime/episodes/:id}
+ */
+export async function getEpisodeById(
+ id: GetEpisodeByIdPathParams['id'],
+ params?: GetEpisodeByIdQueryParams,
+ config: Partial & { client?: typeof fetch } = {},
+) {
+ const { client: request = fetch, ...requestConfig } = config
+
+ const res = await request, unknown>({
+ method: 'GET',
+ url: getGetEpisodeByIdUrl(id).toString(),
+ params,
+ ...requestConfig,
+ })
+ return res.data
+}
\ No newline at end of file
diff --git a/app/api/generated/clients/axios/episodesControllerService/getEpisodesByAnimeId.ts b/app/api/generated/clients/axios/episodesControllerService/getEpisodesByAnimeId.ts
new file mode 100644
index 0000000..1b4f851
--- /dev/null
+++ b/app/api/generated/clients/axios/episodesControllerService/getEpisodesByAnimeId.ts
@@ -0,0 +1,41 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable @typescript-eslint/ban-ts-comment */
+// @ts-nocheck
+
+/**
+ * Generated by Kubb (https://kubb.dev/).
+ * Do not edit manually.
+ */
+
+import fetch from '@/app/api/client'
+import type { RequestConfig, ResponseErrorConfig } from '@/app/api/client'
+import type {
+ GetEpisodesByAnimeIdQueryResponse,
+ GetEpisodesByAnimeIdPathParams,
+ GetEpisodesByAnimeIdQueryParams,
+} from '../../../types/episodesControllerController/GetEpisodesByAnimeId.ts'
+
+function getGetEpisodesByAnimeIdUrl(animeId: GetEpisodesByAnimeIdPathParams['animeId']) {
+ return `/api/v1/anime/episodes/by-anime/${animeId}` as const
+}
+
+/**
+ * @summary Получение списка эпизодов по ID аниме
+ * {@link /api/v1/anime/episodes/by-anime/:animeId}
+ */
+export async function getEpisodesByAnimeId(
+ animeId: GetEpisodesByAnimeIdPathParams['animeId'],
+ params: GetEpisodesByAnimeIdQueryParams,
+ config: Partial & { client?: typeof fetch } = {},
+) {
+ const { client: request = fetch, ...requestConfig } = config
+
+ const res = await request, unknown>({
+ method: 'GET',
+ url: getGetEpisodesByAnimeIdUrl(animeId).toString(),
+ params,
+ ...requestConfig,
+ })
+ return res.data
+}
\ No newline at end of file
diff --git a/app/api/generated/clients/axios/episodesControllerService/updateEpisode.ts b/app/api/generated/clients/axios/episodesControllerService/updateEpisode.ts
new file mode 100644
index 0000000..0f86cee
--- /dev/null
+++ b/app/api/generated/clients/axios/episodesControllerService/updateEpisode.ts
@@ -0,0 +1,42 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable @typescript-eslint/ban-ts-comment */
+// @ts-nocheck
+
+/**
+ * Generated by Kubb (https://kubb.dev/).
+ * Do not edit manually.
+ */
+
+import fetch from '@/app/api/client'
+import type { RequestConfig, ResponseErrorConfig } from '@/app/api/client'
+import type {
+ UpdateEpisodeMutationRequest,
+ UpdateEpisodeMutationResponse,
+ UpdateEpisodePathParams,
+} from '../../../types/episodesControllerController/UpdateEpisode.ts'
+
+function getUpdateEpisodeUrl(id: UpdateEpisodePathParams['id']) {
+ return `/api/v1/anime/episodes/${id}` as const
+}
+
+/**
+ * @summary Редактирование эпизода
+ * {@link /api/v1/anime/episodes/:id}
+ */
+export async function updateEpisode(
+ id: UpdateEpisodePathParams['id'],
+ data: UpdateEpisodeMutationRequest,
+ config: Partial> & { client?: typeof fetch } = {},
+) {
+ const { client: request = fetch, ...requestConfig } = config
+
+ const requestData = data
+ const res = await request, UpdateEpisodeMutationRequest>({
+ method: 'PUT',
+ url: getUpdateEpisodeUrl(id).toString(),
+ data: requestData,
+ ...requestConfig,
+ })
+ return res.data
+}
\ No newline at end of file
diff --git a/app/api/generated/clients/axios/episodesControllerService/updateEpisodeOrder.ts b/app/api/generated/clients/axios/episodesControllerService/updateEpisodeOrder.ts
new file mode 100644
index 0000000..332fd66
--- /dev/null
+++ b/app/api/generated/clients/axios/episodesControllerService/updateEpisodeOrder.ts
@@ -0,0 +1,36 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable @typescript-eslint/ban-ts-comment */
+// @ts-nocheck
+
+/**
+ * Generated by Kubb (https://kubb.dev/).
+ * Do not edit manually.
+ */
+
+import fetch from '@/app/api/client'
+import type { RequestConfig, ResponseErrorConfig } from '@/app/api/client'
+import type { UpdateEpisodeOrderMutationResponse, UpdateEpisodeOrderPathParams } from '../../../types/episodesControllerController/UpdateEpisodeOrder.ts'
+
+function getUpdateEpisodeOrderUrl(id: UpdateEpisodeOrderPathParams['id'], newOrderId: UpdateEpisodeOrderPathParams['newOrderId']) {
+ return `/api/v1/anime/episodes/${id}/order/${newOrderId}` as const
+}
+
+/**
+ * @summary Изменение порядка эпизода в списке
+ * {@link /api/v1/anime/episodes/:id/order/:newOrderId}
+ */
+export async function updateEpisodeOrder(
+ id: UpdateEpisodeOrderPathParams['id'],
+ newOrderId: UpdateEpisodeOrderPathParams['newOrderId'],
+ config: Partial & { client?: typeof fetch } = {},
+) {
+ const { client: request = fetch, ...requestConfig } = config
+
+ const res = await request, unknown>({
+ method: 'PUT',
+ url: getUpdateEpisodeOrderUrl(id, newOrderId).toString(),
+ ...requestConfig,
+ })
+ return res.data
+}
\ No newline at end of file
diff --git a/app/api/generated/clients/axios/groupControllerService/addAnimeIdsToGroup.ts b/app/api/generated/clients/axios/groupControllerService/addAnimeIdsToGroup.ts
new file mode 100644
index 0000000..a18ba8c
--- /dev/null
+++ b/app/api/generated/clients/axios/groupControllerService/addAnimeIdsToGroup.ts
@@ -0,0 +1,41 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable @typescript-eslint/ban-ts-comment */
+// @ts-nocheck
+
+/**
+ * Generated by Kubb (https://kubb.dev/).
+ * Do not edit manually.
+ */
+
+import fetch from '@/app/api/client'
+import type { RequestConfig, ResponseErrorConfig } from '@/app/api/client'
+import type {
+ AddAnimeIdsToGroupMutationRequest,
+ AddAnimeIdsToGroupMutationResponse,
+ AddAnimeIdsToGroup404,
+} from '../../../types/groupControllerController/AddAnimeIdsToGroup.ts'
+
+function getAddAnimeIdsToGroupUrl() {
+ return `/api/v1/anime/group/add-to-group` as const
+}
+
+/**
+ * @summary Добавление списка аниме в группу по id группы и списку id amine
+ * {@link /api/v1/anime/group/add-to-group}
+ */
+export async function addAnimeIdsToGroup(
+ data?: AddAnimeIdsToGroupMutationRequest,
+ config: Partial> & { client?: typeof fetch } = {},
+) {
+ const { client: request = fetch, ...requestConfig } = config
+
+ const requestData = data
+ const res = await request, AddAnimeIdsToGroupMutationRequest>({
+ method: 'PUT',
+ url: getAddAnimeIdsToGroupUrl().toString(),
+ data: requestData,
+ ...requestConfig,
+ })
+ return res.data
+}
\ No newline at end of file
diff --git a/app/api/generated/clients/axios/groupControllerService/create1.ts b/app/api/generated/clients/axios/groupControllerService/create1.ts
new file mode 100644
index 0000000..25825fd
--- /dev/null
+++ b/app/api/generated/clients/axios/groupControllerService/create1.ts
@@ -0,0 +1,34 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable @typescript-eslint/ban-ts-comment */
+// @ts-nocheck
+
+/**
+ * Generated by Kubb (https://kubb.dev/).
+ * Do not edit manually.
+ */
+
+import fetch from '@/app/api/client'
+import type { RequestConfig, ResponseErrorConfig } from '@/app/api/client'
+import type { Create1MutationRequest, Create1MutationResponse } from '../../../types/groupControllerController/Create1.ts'
+
+function getCreate1Url() {
+ return `/api/v1/anime/group` as const
+}
+
+/**
+ * @summary Создание группы
+ * {@link /api/v1/anime/group}
+ */
+export async function create1(data?: Create1MutationRequest, config: Partial> & { client?: typeof fetch } = {}) {
+ const { client: request = fetch, ...requestConfig } = config
+
+ const requestData = data
+ const res = await request, Create1MutationRequest>({
+ method: 'POST',
+ url: getCreate1Url().toString(),
+ data: requestData,
+ ...requestConfig,
+ })
+ return res.data
+}
\ No newline at end of file
diff --git a/app/api/generated/clients/axios/groupControllerService/deleteAnimeIdsFromGroup.ts b/app/api/generated/clients/axios/groupControllerService/deleteAnimeIdsFromGroup.ts
new file mode 100644
index 0000000..43859ac
--- /dev/null
+++ b/app/api/generated/clients/axios/groupControllerService/deleteAnimeIdsFromGroup.ts
@@ -0,0 +1,41 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable @typescript-eslint/ban-ts-comment */
+// @ts-nocheck
+
+/**
+ * Generated by Kubb (https://kubb.dev/).
+ * Do not edit manually.
+ */
+
+import fetch from '@/app/api/client'
+import type { RequestConfig, ResponseErrorConfig } from '@/app/api/client'
+import type {
+ DeleteAnimeIdsFromGroupMutationRequest,
+ DeleteAnimeIdsFromGroupMutationResponse,
+ DeleteAnimeIdsFromGroup404,
+} from '../../../types/groupControllerController/DeleteAnimeIdsFromGroup.ts'
+
+function getDeleteAnimeIdsFromGroupUrl() {
+ return `/api/v1/anime/group/delete-from-group` as const
+}
+
+/**
+ * @summary Удаление списка аниме из группы по id группы и списку id amine
+ * {@link /api/v1/anime/group/delete-from-group}
+ */
+export async function deleteAnimeIdsFromGroup(
+ data?: DeleteAnimeIdsFromGroupMutationRequest,
+ config: Partial> & { client?: typeof fetch } = {},
+) {
+ const { client: request = fetch, ...requestConfig } = config
+
+ const requestData = data
+ const res = await request, DeleteAnimeIdsFromGroupMutationRequest>({
+ method: 'PUT',
+ url: getDeleteAnimeIdsFromGroupUrl().toString(),
+ data: requestData,
+ ...requestConfig,
+ })
+ return res.data
+}
\ No newline at end of file
diff --git a/app/api/generated/clients/axios/groupControllerService/deleteById2.ts b/app/api/generated/clients/axios/groupControllerService/deleteById2.ts
new file mode 100644
index 0000000..093f4d4
--- /dev/null
+++ b/app/api/generated/clients/axios/groupControllerService/deleteById2.ts
@@ -0,0 +1,32 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable @typescript-eslint/ban-ts-comment */
+// @ts-nocheck
+
+/**
+ * Generated by Kubb (https://kubb.dev/).
+ * Do not edit manually.
+ */
+
+import fetch from '@/app/api/client'
+import type { RequestConfig, ResponseErrorConfig } from '@/app/api/client'
+import type { DeleteById2MutationResponse, DeleteById2PathParams, DeleteById2404 } from '../../../types/groupControllerController/DeleteById2.ts'
+
+function getDeleteById2Url(id: DeleteById2PathParams['id']) {
+ return `/api/v1/anime/group/${id}` as const
+}
+
+/**
+ * @summary Удаление группы
+ * {@link /api/v1/anime/group/:id}
+ */
+export async function deleteById2(id: DeleteById2PathParams['id'], config: Partial & { client?: typeof fetch } = {}) {
+ const { client: request = fetch, ...requestConfig } = config
+
+ const res = await request, unknown>({
+ method: 'DELETE',
+ url: getDeleteById2Url(id).toString(),
+ ...requestConfig,
+ })
+ return res.data
+}
\ No newline at end of file
diff --git a/app/api/generated/clients/axios/groupControllerService/getByAnimeId.ts b/app/api/generated/clients/axios/groupControllerService/getByAnimeId.ts
new file mode 100644
index 0000000..0acc97c
--- /dev/null
+++ b/app/api/generated/clients/axios/groupControllerService/getByAnimeId.ts
@@ -0,0 +1,32 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable @typescript-eslint/ban-ts-comment */
+// @ts-nocheck
+
+/**
+ * Generated by Kubb (https://kubb.dev/).
+ * Do not edit manually.
+ */
+
+import fetch from '@/app/api/client'
+import type { RequestConfig, ResponseErrorConfig } from '@/app/api/client'
+import type { GetByAnimeIdQueryResponse, GetByAnimeIdPathParams, GetByAnimeId404 } from '../../../types/groupControllerController/GetByAnimeId.ts'
+
+function getGetByAnimeIdUrl(animeId: GetByAnimeIdPathParams['animeId']) {
+ return `/api/v1/anime/group/by-anime/${animeId}` as const
+}
+
+/**
+ * @summary Получение группы по аниме id
+ * {@link /api/v1/anime/group/by-anime/:animeId}
+ */
+export async function getByAnimeId(animeId: GetByAnimeIdPathParams['animeId'], config: Partial & { client?: typeof fetch } = {}) {
+ const { client: request = fetch, ...requestConfig } = config
+
+ const res = await request, unknown>({
+ method: 'GET',
+ url: getGetByAnimeIdUrl(animeId).toString(),
+ ...requestConfig,
+ })
+ return res.data
+}
\ No newline at end of file
diff --git a/app/api/generated/clients/axios/groupControllerService/getById1.ts b/app/api/generated/clients/axios/groupControllerService/getById1.ts
new file mode 100644
index 0000000..8f4e2b5
--- /dev/null
+++ b/app/api/generated/clients/axios/groupControllerService/getById1.ts
@@ -0,0 +1,32 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable @typescript-eslint/ban-ts-comment */
+// @ts-nocheck
+
+/**
+ * Generated by Kubb (https://kubb.dev/).
+ * Do not edit manually.
+ */
+
+import fetch from '@/app/api/client'
+import type { RequestConfig, ResponseErrorConfig } from '@/app/api/client'
+import type { GetById1QueryResponse, GetById1PathParams, GetById1404 } from '../../../types/groupControllerController/GetById1.ts'
+
+function getGetById1Url(id: GetById1PathParams['id']) {
+ return `/api/v1/anime/group/${id}` as const
+}
+
+/**
+ * @summary Получение группы по id
+ * {@link /api/v1/anime/group/:id}
+ */
+export async function getById1(id: GetById1PathParams['id'], config: Partial & { client?: typeof fetch } = {}) {
+ const { client: request = fetch, ...requestConfig } = config
+
+ const res = await request, unknown>({
+ method: 'GET',
+ url: getGetById1Url(id).toString(),
+ ...requestConfig,
+ })
+ return res.data
+}
\ No newline at end of file
diff --git a/app/api/generated/clients/axios/groupControllerService/groupControllerService.ts b/app/api/generated/clients/axios/groupControllerService/groupControllerService.ts
new file mode 100644
index 0000000..e73d21f
--- /dev/null
+++ b/app/api/generated/clients/axios/groupControllerService/groupControllerService.ts
@@ -0,0 +1,21 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable @typescript-eslint/ban-ts-comment */
+// @ts-nocheck
+
+/**
+ * Generated by Kubb (https://kubb.dev/).
+ * Do not edit manually.
+ */
+
+import { addAnimeIdsToGroup } from './addAnimeIdsToGroup.ts'
+import { create1 } from './create1.ts'
+import { deleteAnimeIdsFromGroup } from './deleteAnimeIdsFromGroup.ts'
+import { deleteById2 } from './deleteById2.ts'
+import { getByAnimeId } from './getByAnimeId.ts'
+import { getById1 } from './getById1.ts'
+import { updateById1 } from './updateById1.ts'
+
+export function groupControllerService() {
+ return { updateById1, create1, deleteAnimeIdsFromGroup, addAnimeIdsToGroup, getById1, deleteById2, getByAnimeId }
+}
\ No newline at end of file
diff --git a/app/api/generated/clients/axios/groupControllerService/updateById1.ts b/app/api/generated/clients/axios/groupControllerService/updateById1.ts
new file mode 100644
index 0000000..bae77f0
--- /dev/null
+++ b/app/api/generated/clients/axios/groupControllerService/updateById1.ts
@@ -0,0 +1,37 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable @typescript-eslint/ban-ts-comment */
+// @ts-nocheck
+
+/**
+ * Generated by Kubb (https://kubb.dev/).
+ * Do not edit manually.
+ */
+
+import fetch from '@/app/api/client'
+import type { RequestConfig, ResponseErrorConfig } from '@/app/api/client'
+import type { UpdateById1MutationRequest, UpdateById1MutationResponse, UpdateById1404 } from '../../../types/groupControllerController/UpdateById1.ts'
+
+function getUpdateById1Url() {
+ return `/api/v1/anime/group` as const
+}
+
+/**
+ * @summary Обновление группы
+ * {@link /api/v1/anime/group}
+ */
+export async function updateById1(
+ data?: UpdateById1MutationRequest,
+ config: Partial> & { client?: typeof fetch } = {},
+) {
+ const { client: request = fetch, ...requestConfig } = config
+
+ const requestData = data
+ const res = await request, UpdateById1MutationRequest>({
+ method: 'PUT',
+ url: getUpdateById1Url().toString(),
+ data: requestData,
+ ...requestConfig,
+ })
+ return res.data
+}
\ No newline at end of file
diff --git a/app/api/generated/clients/axios/index.ts b/app/api/generated/clients/axios/index.ts
new file mode 100644
index 0000000..1b84f07
--- /dev/null
+++ b/app/api/generated/clients/axios/index.ts
@@ -0,0 +1,60 @@
+export { animeControllerService } from './animeControllerService/animeControllerService.ts'
+export { createAnime } from './animeControllerService/createAnime.ts'
+export { deleteById } from './animeControllerService/deleteById.ts'
+export { findById } from './animeControllerService/findById.ts'
+export { findSimilar } from './animeControllerService/findSimilar.ts'
+export { getAllGenres } from './animeControllerService/getAllGenres.ts'
+export { getAllMpaaRatings } from './animeControllerService/getAllMpaaRatings.ts'
+export { getAllStatuses } from './animeControllerService/getAllStatuses.ts'
+export { getAllTypes } from './animeControllerService/getAllTypes.ts'
+export { getPage } from './animeControllerService/getPage.ts'
+export { increasePopularity } from './animeControllerService/increasePopularity.ts'
+export { updateById } from './animeControllerService/updateById.ts'
+export { commentsControllerService } from './commentsControllerService/commentsControllerService.ts'
+export { createComment } from './commentsControllerService/createComment.ts'
+export { deleteComment } from './commentsControllerService/deleteComment.ts'
+export { getCommentsById } from './commentsControllerService/getCommentsById.ts'
+export { getCommentsByUser } from './commentsControllerService/getCommentsByUser.ts'
+export { updateComment } from './commentsControllerService/updateComment.ts'
+export { complaintControllerService } from './complaintControllerService/complaintControllerService.ts'
+export { createComplaint } from './complaintControllerService/createComplaint.ts'
+export { getComplaintById } from './complaintControllerService/getComplaintById.ts'
+export { getComplaints } from './complaintControllerService/getComplaints.ts'
+export { updateComplaintStatus } from './complaintControllerService/updateComplaintStatus.ts'
+export { addDubToEpisode } from './dubControllerService/addDubToEpisode.ts'
+export { createDub } from './dubControllerService/createDub.ts'
+export { deleteDub } from './dubControllerService/deleteDub.ts'
+export { dubControllerService } from './dubControllerService/dubControllerService.ts'
+export { getDubById } from './dubControllerService/getDubById.ts'
+export { getDubsByEpisode } from './dubControllerService/getDubsByEpisode.ts'
+export { removeDubFromEpisode } from './dubControllerService/removeDubFromEpisode.ts'
+export { updateDubName } from './dubControllerService/updateDubName.ts'
+export { addView } from './episodesControllerService/addView.ts'
+export { createEpisode } from './episodesControllerService/createEpisode.ts'
+export { deleteEpisode } from './episodesControllerService/deleteEpisode.ts'
+export { episodesControllerService } from './episodesControllerService/episodesControllerService.ts'
+export { getAdminEpisodeById } from './episodesControllerService/getAdminEpisodeById.ts'
+export { getEpisodeById } from './episodesControllerService/getEpisodeById.ts'
+export { getEpisodesByAnimeId } from './episodesControllerService/getEpisodesByAnimeId.ts'
+export { updateEpisode } from './episodesControllerService/updateEpisode.ts'
+export { updateEpisodeOrder } from './episodesControllerService/updateEpisodeOrder.ts'
+export { addAnimeIdsToGroup } from './groupControllerService/addAnimeIdsToGroup.ts'
+export { create1 } from './groupControllerService/create1.ts'
+export { deleteAnimeIdsFromGroup } from './groupControllerService/deleteAnimeIdsFromGroup.ts'
+export { deleteById2 } from './groupControllerService/deleteById2.ts'
+export { getByAnimeId } from './groupControllerService/getByAnimeId.ts'
+export { getById1 } from './groupControllerService/getById1.ts'
+export { groupControllerService } from './groupControllerService/groupControllerService.ts'
+export { updateById1 } from './groupControllerService/updateById1.ts'
+export { operations } from './operations.ts'
+export { create } from './titleControllerService/create.ts'
+export { createAll } from './titleControllerService/createAll.ts'
+export { deleteAllByAnimeId } from './titleControllerService/deleteAllByAnimeId.ts'
+export { deleteAllById } from './titleControllerService/deleteAllById.ts'
+export { deleteById1 } from './titleControllerService/deleteById1.ts'
+export { getAllByAnimeId } from './titleControllerService/getAllByAnimeId.ts'
+export { getById } from './titleControllerService/getById.ts'
+export { getPage1 } from './titleControllerService/getPage1.ts'
+export { titleControllerService } from './titleControllerService/titleControllerService.ts'
+export { updateAllById } from './titleControllerService/updateAllById.ts'
+export { updateById2 } from './titleControllerService/updateById2.ts'
\ No newline at end of file
diff --git a/app/api/generated/clients/axios/operations.ts b/app/api/generated/clients/axios/operations.ts
new file mode 100644
index 0000000..ac60ffe
--- /dev/null
+++ b/app/api/generated/clients/axios/operations.ts
@@ -0,0 +1,220 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable @typescript-eslint/ban-ts-comment */
+// @ts-nocheck
+
+/**
+ * Generated by Kubb (https://kubb.dev/).
+ * Do not edit manually.
+ */
+
+export const operations = {
+ getComplaintById: {
+ path: '/api/v1/complaint/:complaintId',
+ method: 'get',
+ },
+ updateComplaintStatus: {
+ path: '/api/v1/complaint/:complaintId',
+ method: 'put',
+ },
+ getPage: {
+ path: '/api/v1/anime',
+ method: 'get',
+ },
+ updateById: {
+ path: '/api/v1/anime',
+ method: 'put',
+ },
+ createAnime: {
+ path: '/api/v1/anime',
+ method: 'post',
+ },
+ updateById_1: {
+ path: '/api/v1/anime/group',
+ method: 'put',
+ },
+ create_1: {
+ path: '/api/v1/anime/group',
+ method: 'post',
+ },
+ deleteAnimeIdsFromGroup: {
+ path: '/api/v1/anime/group/delete-from-group',
+ method: 'put',
+ },
+ addAnimeIdsToGroup: {
+ path: '/api/v1/anime/group/add-to-group',
+ method: 'put',
+ },
+ getEpisodeById: {
+ path: '/api/v1/anime/episodes/:id',
+ method: 'get',
+ },
+ updateEpisode: {
+ path: '/api/v1/anime/episodes/:id',
+ method: 'put',
+ },
+ deleteEpisode: {
+ path: '/api/v1/anime/episodes/:id',
+ method: 'delete',
+ },
+ updateEpisodeOrder: {
+ path: '/api/v1/anime/episodes/:id/order/:newOrderId',
+ method: 'put',
+ },
+ getDubById: {
+ path: '/api/v1/anime/dubs/:id',
+ method: 'get',
+ },
+ updateDubName: {
+ path: '/api/v1/anime/dubs/:id',
+ method: 'put',
+ },
+ deleteDub: {
+ path: '/api/v1/anime/dubs/:id',
+ method: 'delete',
+ },
+ updateComment: {
+ path: '/api/v1/anime/comments',
+ method: 'put',
+ },
+ createComment: {
+ path: '/api/v1/anime/comments',
+ method: 'post',
+ },
+ createComplaint: {
+ path: '/api/v1/complaint',
+ method: 'post',
+ },
+ getComplaints: {
+ path: '/api/v1/complaint/search',
+ method: 'post',
+ },
+ create: {
+ path: '/api/v1/anime/title',
+ method: 'post',
+ },
+ updateById_2: {
+ path: '/api/v1/anime/title',
+ method: 'patch',
+ },
+ createAll: {
+ path: '/api/v1/anime/title/batch',
+ method: 'post',
+ },
+ deleteAllById: {
+ path: '/api/v1/anime/title/batch',
+ method: 'delete',
+ },
+ updateAllById: {
+ path: '/api/v1/anime/title/batch',
+ method: 'patch',
+ },
+ increasePopularity: {
+ path: '/api/v1/anime/increasePopularity',
+ method: 'post',
+ },
+ createEpisode: {
+ path: '/api/v1/anime/episodes',
+ method: 'post',
+ },
+ addView: {
+ path: '/api/v1/anime/episodes/:id/view',
+ method: 'post',
+ },
+ createDub: {
+ path: '/api/v1/anime/dubs',
+ method: 'post',
+ },
+ addDubToEpisode: {
+ path: '/api/v1/anime/dubs/:dubId/episodes/:episodeId',
+ method: 'post',
+ },
+ removeDubFromEpisode: {
+ path: '/api/v1/anime/dubs/:dubId/episodes/:episodeId',
+ method: 'delete',
+ },
+ findById: {
+ path: '/api/v1/anime/:id',
+ method: 'get',
+ },
+ deleteById: {
+ path: '/api/v1/anime/:id',
+ method: 'delete',
+ },
+ findSimilar: {
+ path: '/api/v1/anime/:animeId/similar',
+ method: 'get',
+ },
+ getAllTypes: {
+ path: '/api/v1/anime/types',
+ method: 'get',
+ },
+ getById: {
+ path: '/api/v1/anime/title/:id',
+ method: 'get',
+ },
+ deleteById_1: {
+ path: '/api/v1/anime/title/:id',
+ method: 'delete',
+ },
+ getPage_1: {
+ path: '/api/v1/anime/title/page',
+ method: 'get',
+ },
+ getAllByAnimeId: {
+ path: '/api/v1/anime/title/by-anime/:animeId',
+ method: 'get',
+ },
+ getAllStatuses: {
+ path: '/api/v1/anime/statuses',
+ method: 'get',
+ },
+ getAllMpaaRatings: {
+ path: '/api/v1/anime/mpaaratings',
+ method: 'get',
+ },
+ getById_1: {
+ path: '/api/v1/anime/group/:id',
+ method: 'get',
+ },
+ deleteById_2: {
+ path: '/api/v1/anime/group/:id',
+ method: 'delete',
+ },
+ getByAnimeId: {
+ path: '/api/v1/anime/group/by-anime/:animeId',
+ method: 'get',
+ },
+ getAllGenres: {
+ path: '/api/v1/anime/genres',
+ method: 'get',
+ },
+ getAdminEpisodeById: {
+ path: '/api/v1/anime/episodes/:id/admin',
+ method: 'get',
+ },
+ getEpisodesByAnimeId: {
+ path: '/api/v1/anime/episodes/by-anime/:animeId',
+ method: 'get',
+ },
+ getDubsByEpisode: {
+ path: '/api/v1/anime/dubs/by-episode/:episodeID/all',
+ method: 'get',
+ },
+ getCommentsByUser: {
+ path: '/api/v1/anime/comments/by-user/:id',
+ method: 'get',
+ },
+ getCommentsById: {
+ path: '/api/v1/anime/comments/by-type-and-id/:type/:id',
+ method: 'get',
+ },
+ deleteAllByAnimeId: {
+ path: '/api/v1/anime/title/by-anime',
+ method: 'delete',
+ },
+ deleteComment: {
+ path: '/api/v1/anime/comments/:id',
+ method: 'delete',
+ },
+} as const
\ No newline at end of file
diff --git a/app/api/generated/clients/axios/titleControllerService/create.ts b/app/api/generated/clients/axios/titleControllerService/create.ts
new file mode 100644
index 0000000..dc701cd
--- /dev/null
+++ b/app/api/generated/clients/axios/titleControllerService/create.ts
@@ -0,0 +1,33 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable @typescript-eslint/ban-ts-comment */
+// @ts-nocheck
+
+/**
+ * Generated by Kubb (https://kubb.dev/).
+ * Do not edit manually.
+ */
+
+import fetch from '@/app/api/client'
+import type { RequestConfig, ResponseErrorConfig } from '@/app/api/client'
+import type { CreateMutationResponse, CreateQueryParams } from '../../../types/titleControllerController/Create.ts'
+
+function getCreateUrl() {
+ return `/api/v1/anime/title` as const
+}
+
+/**
+ * @summary Создание тайтла
+ * {@link /api/v1/anime/title}
+ */
+export async function create(params: CreateQueryParams, config: Partial & { client?: typeof fetch } = {}) {
+ const { client: request = fetch, ...requestConfig } = config
+
+ const res = await request, unknown>({
+ method: 'POST',
+ url: getCreateUrl().toString(),
+ params,
+ ...requestConfig,
+ })
+ return res.data
+}
\ No newline at end of file
diff --git a/app/api/generated/clients/axios/titleControllerService/createAll.ts b/app/api/generated/clients/axios/titleControllerService/createAll.ts
new file mode 100644
index 0000000..0b985b9
--- /dev/null
+++ b/app/api/generated/clients/axios/titleControllerService/createAll.ts
@@ -0,0 +1,33 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable @typescript-eslint/ban-ts-comment */
+// @ts-nocheck
+
+/**
+ * Generated by Kubb (https://kubb.dev/).
+ * Do not edit manually.
+ */
+
+import fetch from '@/app/api/client'
+import type { RequestConfig, ResponseErrorConfig } from '@/app/api/client'
+import type { CreateAllMutationResponse, CreateAllQueryParams } from '../../../types/titleControllerController/CreateAll.ts'
+
+function getCreateAllUrl() {
+ return `/api/v1/anime/title/batch` as const
+}
+
+/**
+ * @summary Создание списка тайтлов
+ * {@link /api/v1/anime/title/batch}
+ */
+export async function createAll(params: CreateAllQueryParams, config: Partial & { client?: typeof fetch } = {}) {
+ const { client: request = fetch, ...requestConfig } = config
+
+ const res = await request, unknown>({
+ method: 'POST',
+ url: getCreateAllUrl().toString(),
+ params,
+ ...requestConfig,
+ })
+ return res.data
+}
\ No newline at end of file
diff --git a/app/api/generated/clients/axios/titleControllerService/deleteAllByAnimeId.ts b/app/api/generated/clients/axios/titleControllerService/deleteAllByAnimeId.ts
new file mode 100644
index 0000000..c97ea0d
--- /dev/null
+++ b/app/api/generated/clients/axios/titleControllerService/deleteAllByAnimeId.ts
@@ -0,0 +1,37 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable @typescript-eslint/ban-ts-comment */
+// @ts-nocheck
+
+/**
+ * Generated by Kubb (https://kubb.dev/).
+ * Do not edit manually.
+ */
+
+import fetch from '@/app/api/client'
+import type { RequestConfig, ResponseErrorConfig } from '@/app/api/client'
+import type {
+ DeleteAllByAnimeIdMutationResponse,
+ DeleteAllByAnimeIdQueryParams,
+ DeleteAllByAnimeId404,
+} from '../../../types/titleControllerController/DeleteAllByAnimeId.ts'
+
+function getDeleteAllByAnimeIdUrl() {
+ return `/api/v1/anime/title/by-anime` as const
+}
+
+/**
+ * @summary Удаление тайтлов по аниме id
+ * {@link /api/v1/anime/title/by-anime}
+ */
+export async function deleteAllByAnimeId(params: DeleteAllByAnimeIdQueryParams, config: Partial & { client?: typeof fetch } = {}) {
+ const { client: request = fetch, ...requestConfig } = config
+
+ const res = await request, unknown>({
+ method: 'DELETE',
+ url: getDeleteAllByAnimeIdUrl().toString(),
+ params,
+ ...requestConfig,
+ })
+ return res.data
+}
\ No newline at end of file
diff --git a/app/api/generated/clients/axios/titleControllerService/deleteAllById.ts b/app/api/generated/clients/axios/titleControllerService/deleteAllById.ts
new file mode 100644
index 0000000..e9488ae
--- /dev/null
+++ b/app/api/generated/clients/axios/titleControllerService/deleteAllById.ts
@@ -0,0 +1,33 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable @typescript-eslint/ban-ts-comment */
+// @ts-nocheck
+
+/**
+ * Generated by Kubb (https://kubb.dev/).
+ * Do not edit manually.
+ */
+
+import fetch from '@/app/api/client'
+import type { RequestConfig, ResponseErrorConfig } from '@/app/api/client'
+import type { DeleteAllByIdMutationResponse, DeleteAllByIdQueryParams } from '../../../types/titleControllerController/DeleteAllById.ts'
+
+function getDeleteAllByIdUrl() {
+ return `/api/v1/anime/title/batch` as const
+}
+
+/**
+ * @summary Удаление тайтлов по списку id
+ * {@link /api/v1/anime/title/batch}
+ */
+export async function deleteAllById(params: DeleteAllByIdQueryParams, config: Partial & { client?: typeof fetch } = {}) {
+ const { client: request = fetch, ...requestConfig } = config
+
+ const res = await request, unknown>({
+ method: 'DELETE',
+ url: getDeleteAllByIdUrl().toString(),
+ params,
+ ...requestConfig,
+ })
+ return res.data
+}
\ No newline at end of file
diff --git a/app/api/generated/clients/axios/titleControllerService/deleteById1.ts b/app/api/generated/clients/axios/titleControllerService/deleteById1.ts
new file mode 100644
index 0000000..92ea4e8
--- /dev/null
+++ b/app/api/generated/clients/axios/titleControllerService/deleteById1.ts
@@ -0,0 +1,32 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable @typescript-eslint/ban-ts-comment */
+// @ts-nocheck
+
+/**
+ * Generated by Kubb (https://kubb.dev/).
+ * Do not edit manually.
+ */
+
+import fetch from '@/app/api/client'
+import type { RequestConfig, ResponseErrorConfig } from '@/app/api/client'
+import type { DeleteById1MutationResponse, DeleteById1PathParams } from '../../../types/titleControllerController/DeleteById1.ts'
+
+function getDeleteById1Url(id: DeleteById1PathParams['id']) {
+ return `/api/v1/anime/title/${id}` as const
+}
+
+/**
+ * @summary Удаление тайтла
+ * {@link /api/v1/anime/title/:id}
+ */
+export async function deleteById1(id: DeleteById1PathParams['id'], config: Partial & { client?: typeof fetch } = {}) {
+ const { client: request = fetch, ...requestConfig } = config
+
+ const res = await request, unknown>({
+ method: 'DELETE',
+ url: getDeleteById1Url(id).toString(),
+ ...requestConfig,
+ })
+ return res.data
+}
\ No newline at end of file
diff --git a/app/api/generated/clients/axios/titleControllerService/getAllByAnimeId.ts b/app/api/generated/clients/axios/titleControllerService/getAllByAnimeId.ts
new file mode 100644
index 0000000..9ae3b4e
--- /dev/null
+++ b/app/api/generated/clients/axios/titleControllerService/getAllByAnimeId.ts
@@ -0,0 +1,32 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable @typescript-eslint/ban-ts-comment */
+// @ts-nocheck
+
+/**
+ * Generated by Kubb (https://kubb.dev/).
+ * Do not edit manually.
+ */
+
+import fetch from '@/app/api/client'
+import type { RequestConfig, ResponseErrorConfig } from '@/app/api/client'
+import type { GetAllByAnimeIdQueryResponse, GetAllByAnimeIdPathParams, GetAllByAnimeId404 } from '../../../types/titleControllerController/GetAllByAnimeId.ts'
+
+function getGetAllByAnimeIdUrl(animeId: GetAllByAnimeIdPathParams['animeId']) {
+ return `/api/v1/anime/title/by-anime/${animeId}` as const
+}
+
+/**
+ * @summary Получение списка тайтлов по аниме id
+ * {@link /api/v1/anime/title/by-anime/:animeId}
+ */
+export async function getAllByAnimeId(animeId: GetAllByAnimeIdPathParams['animeId'], config: Partial & { client?: typeof fetch } = {}) {
+ const { client: request = fetch, ...requestConfig } = config
+
+ const res = await request, unknown>({
+ method: 'GET',
+ url: getGetAllByAnimeIdUrl(animeId).toString(),
+ ...requestConfig,
+ })
+ return res.data
+}
\ No newline at end of file
diff --git a/app/api/generated/clients/axios/titleControllerService/getById.ts b/app/api/generated/clients/axios/titleControllerService/getById.ts
new file mode 100644
index 0000000..0a6be4f
--- /dev/null
+++ b/app/api/generated/clients/axios/titleControllerService/getById.ts
@@ -0,0 +1,32 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable @typescript-eslint/ban-ts-comment */
+// @ts-nocheck
+
+/**
+ * Generated by Kubb (https://kubb.dev/).
+ * Do not edit manually.
+ */
+
+import fetch from '@/app/api/client'
+import type { RequestConfig, ResponseErrorConfig } from '@/app/api/client'
+import type { GetByIdQueryResponse, GetByIdPathParams, GetById404 } from '../../../types/titleControllerController/GetById.ts'
+
+function getGetByIdUrl(id: GetByIdPathParams['id']) {
+ return `/api/v1/anime/title/${id}` as const
+}
+
+/**
+ * @summary Получение тайтла по id
+ * {@link /api/v1/anime/title/:id}
+ */
+export async function getById(id: GetByIdPathParams['id'], config: Partial & { client?: typeof fetch } = {}) {
+ const { client: request = fetch, ...requestConfig } = config
+
+ const res = await request, unknown>({
+ method: 'GET',
+ url: getGetByIdUrl(id).toString(),
+ ...requestConfig,
+ })
+ return res.data
+}
\ No newline at end of file
diff --git a/app/api/generated/clients/axios/titleControllerService/getPage1.ts b/app/api/generated/clients/axios/titleControllerService/getPage1.ts
new file mode 100644
index 0000000..29e404f
--- /dev/null
+++ b/app/api/generated/clients/axios/titleControllerService/getPage1.ts
@@ -0,0 +1,33 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable @typescript-eslint/ban-ts-comment */
+// @ts-nocheck
+
+/**
+ * Generated by Kubb (https://kubb.dev/).
+ * Do not edit manually.
+ */
+
+import fetch from '@/app/api/client'
+import type { RequestConfig, ResponseErrorConfig } from '@/app/api/client'
+import type { GetPage1QueryResponse, GetPage1QueryParams } from '../../../types/titleControllerController/GetPage1.ts'
+
+function getGetPage1Url() {
+ return `/api/v1/anime/title/page` as const
+}
+
+/**
+ * @summary Постраничное получение всех тайтлов
+ * {@link /api/v1/anime/title/page}
+ */
+export async function getPage1(params: GetPage1QueryParams, config: Partial & { client?: typeof fetch } = {}) {
+ const { client: request = fetch, ...requestConfig } = config
+
+ const res = await request, unknown>({
+ method: 'GET',
+ url: getGetPage1Url().toString(),
+ params,
+ ...requestConfig,
+ })
+ return res.data
+}
\ No newline at end of file
diff --git a/app/api/generated/clients/axios/titleControllerService/titleControllerService.ts b/app/api/generated/clients/axios/titleControllerService/titleControllerService.ts
new file mode 100644
index 0000000..73e378b
--- /dev/null
+++ b/app/api/generated/clients/axios/titleControllerService/titleControllerService.ts
@@ -0,0 +1,24 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable @typescript-eslint/ban-ts-comment */
+// @ts-nocheck
+
+/**
+ * Generated by Kubb (https://kubb.dev/).
+ * Do not edit manually.
+ */
+
+import { create } from './create.ts'
+import { createAll } from './createAll.ts'
+import { deleteAllByAnimeId } from './deleteAllByAnimeId.ts'
+import { deleteAllById } from './deleteAllById.ts'
+import { deleteById1 } from './deleteById1.ts'
+import { getAllByAnimeId } from './getAllByAnimeId.ts'
+import { getById } from './getById.ts'
+import { getPage1 } from './getPage1.ts'
+import { updateAllById } from './updateAllById.ts'
+import { updateById2 } from './updateById2.ts'
+
+export function titleControllerService() {
+ return { create, updateById2, createAll, deleteAllById, updateAllById, getById, deleteById1, getPage1, getAllByAnimeId, deleteAllByAnimeId }
+}
\ No newline at end of file
diff --git a/app/api/generated/clients/axios/titleControllerService/updateAllById.ts b/app/api/generated/clients/axios/titleControllerService/updateAllById.ts
new file mode 100644
index 0000000..3a822a2
--- /dev/null
+++ b/app/api/generated/clients/axios/titleControllerService/updateAllById.ts
@@ -0,0 +1,33 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable @typescript-eslint/ban-ts-comment */
+// @ts-nocheck
+
+/**
+ * Generated by Kubb (https://kubb.dev/).
+ * Do not edit manually.
+ */
+
+import fetch from '@/app/api/client'
+import type { RequestConfig, ResponseErrorConfig } from '@/app/api/client'
+import type { UpdateAllByIdMutationResponse, UpdateAllByIdQueryParams, UpdateAllById404 } from '../../../types/titleControllerController/UpdateAllById.ts'
+
+function getUpdateAllByIdUrl() {
+ return `/api/v1/anime/title/batch` as const
+}
+
+/**
+ * @summary Обновление тайтла списком
+ * {@link /api/v1/anime/title/batch}
+ */
+export async function updateAllById(params: UpdateAllByIdQueryParams, config: Partial & { client?: typeof fetch } = {}) {
+ const { client: request = fetch, ...requestConfig } = config
+
+ const res = await request, unknown>({
+ method: 'PATCH',
+ url: getUpdateAllByIdUrl().toString(),
+ params,
+ ...requestConfig,
+ })
+ return res.data
+}
\ No newline at end of file
diff --git a/app/api/generated/clients/axios/titleControllerService/updateById2.ts b/app/api/generated/clients/axios/titleControllerService/updateById2.ts
new file mode 100644
index 0000000..e2c85a1
--- /dev/null
+++ b/app/api/generated/clients/axios/titleControllerService/updateById2.ts
@@ -0,0 +1,33 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable @typescript-eslint/ban-ts-comment */
+// @ts-nocheck
+
+/**
+ * Generated by Kubb (https://kubb.dev/).
+ * Do not edit manually.
+ */
+
+import fetch from '@/app/api/client'
+import type { RequestConfig, ResponseErrorConfig } from '@/app/api/client'
+import type { UpdateById2MutationResponse, UpdateById2QueryParams, UpdateById2404 } from '../../../types/titleControllerController/UpdateById2.ts'
+
+function getUpdateById2Url() {
+ return `/api/v1/anime/title` as const
+}
+
+/**
+ * @summary Обновление тайтла
+ * {@link /api/v1/anime/title}
+ */
+export async function updateById2(params: UpdateById2QueryParams, config: Partial & { client?: typeof fetch } = {}) {
+ const { client: request = fetch, ...requestConfig } = config
+
+ const res = await request, unknown>({
+ method: 'PATCH',
+ url: getUpdateById2Url().toString(),
+ params,
+ ...requestConfig,
+ })
+ return res.data
+}
\ No newline at end of file
diff --git a/app/api/generated/hooks/animeControllerHooks/useCreateAnime.ts b/app/api/generated/hooks/animeControllerHooks/useCreateAnime.ts
new file mode 100644
index 0000000..00317a0
--- /dev/null
+++ b/app/api/generated/hooks/animeControllerHooks/useCreateAnime.ts
@@ -0,0 +1,48 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable @typescript-eslint/ban-ts-comment */
+// @ts-nocheck
+
+/**
+ * Generated by Kubb (https://kubb.dev/).
+ * Do not edit manually.
+ */
+
+import fetch from '@/app/api/client'
+import type { RequestConfig, ResponseErrorConfig } from '@/app/api/client'
+import type { UseMutationOptions, QueryClient } from '@tanstack/react-query'
+import type { CreateAnimeMutationRequest, CreateAnimeMutationResponse, CreateAnime400 } from '../../types/animeControllerController/CreateAnime.ts'
+import { useMutation } from '@tanstack/react-query'
+import { createAnime } from '../../clients/axios/animeControllerService/createAnime.ts'
+
+export const createAnimeMutationKey = () => [{ url: '/api/v1/anime' }] as const
+
+export type CreateAnimeMutationKey = ReturnType
+
+/**
+ * @summary Создание аниме
+ * {@link /api/v1/anime}
+ */
+export function useCreateAnime(
+ options: {
+ mutation?: UseMutationOptions, { data: CreateAnimeMutationRequest }, TContext> & {
+ client?: QueryClient
+ }
+ client?: Partial> & { client?: typeof fetch }
+ } = {},
+) {
+ const { mutation = {}, client: config = {} } = options ?? {}
+ const { client: queryClient, ...mutationOptions } = mutation
+ const mutationKey = mutationOptions.mutationKey ?? createAnimeMutationKey()
+
+ return useMutation, { data: CreateAnimeMutationRequest }, TContext>(
+ {
+ mutationFn: async ({ data }) => {
+ return createAnime(data, config)
+ },
+ mutationKey,
+ ...mutationOptions,
+ },
+ queryClient,
+ )
+}
\ No newline at end of file
diff --git a/app/api/generated/hooks/animeControllerHooks/useDeleteById.ts b/app/api/generated/hooks/animeControllerHooks/useDeleteById.ts
new file mode 100644
index 0000000..b6dabba
--- /dev/null
+++ b/app/api/generated/hooks/animeControllerHooks/useDeleteById.ts
@@ -0,0 +1,48 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable @typescript-eslint/ban-ts-comment */
+// @ts-nocheck
+
+/**
+ * Generated by Kubb (https://kubb.dev/).
+ * Do not edit manually.
+ */
+
+import fetch from '@/app/api/client'
+import type { RequestConfig, ResponseErrorConfig } from '@/app/api/client'
+import type { UseMutationOptions, QueryClient } from '@tanstack/react-query'
+import type { DeleteByIdMutationResponse, DeleteByIdPathParams } from '../../types/animeControllerController/DeleteById.ts'
+import { useMutation } from '@tanstack/react-query'
+import { deleteById } from '../../clients/axios/animeControllerService/deleteById.ts'
+
+export const deleteByIdMutationKey = () => [{ url: '/api/v1/anime/{id}' }] as const
+
+export type DeleteByIdMutationKey = ReturnType
+
+/**
+ * @summary Удаление аниме
+ * {@link /api/v1/anime/:id}
+ */
+export function useDeleteById(
+ options: {
+ mutation?: UseMutationOptions, { id: DeleteByIdPathParams['id'] }, TContext> & {
+ client?: QueryClient
+ }
+ client?: Partial & { client?: typeof fetch }
+ } = {},
+) {
+ const { mutation = {}, client: config = {} } = options ?? {}
+ const { client: queryClient, ...mutationOptions } = mutation
+ const mutationKey = mutationOptions.mutationKey ?? deleteByIdMutationKey()
+
+ return useMutation, { id: DeleteByIdPathParams['id'] }, TContext>(
+ {
+ mutationFn: async ({ id }) => {
+ return deleteById(id, config)
+ },
+ mutationKey,
+ ...mutationOptions,
+ },
+ queryClient,
+ )
+}
\ No newline at end of file
diff --git a/app/api/generated/hooks/animeControllerHooks/useFindById.ts b/app/api/generated/hooks/animeControllerHooks/useFindById.ts
new file mode 100644
index 0000000..d6d9939
--- /dev/null
+++ b/app/api/generated/hooks/animeControllerHooks/useFindById.ts
@@ -0,0 +1,60 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable @typescript-eslint/ban-ts-comment */
+// @ts-nocheck
+
+/**
+ * Generated by Kubb (https://kubb.dev/).
+ * Do not edit manually.
+ */
+
+import fetch from '@/app/api/client'
+import type { RequestConfig, ResponseErrorConfig } from '@/app/api/client'
+import type { QueryKey, QueryClient, QueryObserverOptions, UseQueryResult } from '@tanstack/react-query'
+import type { FindByIdQueryResponse, FindByIdPathParams, FindById404 } from '../../types/animeControllerController/FindById.ts'
+import { queryOptions, useQuery } from '@tanstack/react-query'
+import { findById } from '../../clients/axios/animeControllerService/findById.ts'
+
+export const findByIdQueryKey = (id: FindByIdPathParams['id']) => [{ url: '/api/v1/anime/:id', params: { id: id } }] as const
+
+export type FindByIdQueryKey = ReturnType
+
+export function findByIdQueryOptions(id: FindByIdPathParams['id'], config: Partial & { client?: typeof fetch } = {}) {
+ const queryKey = findByIdQueryKey(id)
+ return queryOptions, FindByIdQueryResponse, typeof queryKey>({
+ enabled: !!id,
+ queryKey,
+ queryFn: async ({ signal }) => {
+ config.signal = signal
+ return findById(id, config)
+ },
+ })
+}
+
+/**
+ * @summary Поиск аниме по id
+ * {@link /api/v1/anime/:id}
+ */
+export function useFindById(
+ id: FindByIdPathParams['id'],
+ options: {
+ query?: Partial, TData, TQueryData, TQueryKey>> & { client?: QueryClient }
+ client?: Partial & { client?: typeof fetch }
+ } = {},
+) {
+ const { query: { client: queryClient, ...queryOptions } = {}, client: config = {} } = options ?? {}
+ const queryKey = queryOptions?.queryKey ?? findByIdQueryKey(id)
+
+ const query = useQuery(
+ {
+ ...findByIdQueryOptions(id, config),
+ queryKey,
+ ...queryOptions,
+ } as unknown as QueryObserverOptions,
+ queryClient,
+ ) as UseQueryResult> & { queryKey: TQueryKey }
+
+ query.queryKey = queryKey as TQueryKey
+
+ return query
+}
\ No newline at end of file
diff --git a/app/api/generated/hooks/animeControllerHooks/useFindByIdInfinite.ts b/app/api/generated/hooks/animeControllerHooks/useFindByIdInfinite.ts
new file mode 100644
index 0000000..8949c1e
--- /dev/null
+++ b/app/api/generated/hooks/animeControllerHooks/useFindByIdInfinite.ts
@@ -0,0 +1,67 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable @typescript-eslint/ban-ts-comment */
+// @ts-nocheck
+
+/**
+ * Generated by Kubb (https://kubb.dev/).
+ * Do not edit manually.
+ */
+
+import fetch from '@/app/api/client'
+import type { RequestConfig, ResponseErrorConfig } from '@/app/api/client'
+import type { InfiniteData, QueryKey, QueryClient, InfiniteQueryObserverOptions, UseInfiniteQueryResult } from '@tanstack/react-query'
+import type { FindByIdQueryResponse, FindByIdPathParams, FindById404 } from '../../types/animeControllerController/FindById.ts'
+import { infiniteQueryOptions, useInfiniteQuery } from '@tanstack/react-query'
+import { findById } from '../../clients/axios/animeControllerService/findById.ts'
+
+export const findByIdInfiniteQueryKey = (id: FindByIdPathParams['id']) => [{ url: '/api/v1/anime/:id', params: { id: id } }] as const
+
+export type FindByIdInfiniteQueryKey = ReturnType
+
+export function findByIdInfiniteQueryOptions(id: FindByIdPathParams['id'], config: Partial & { client?: typeof fetch } = {}) {
+ const queryKey = findByIdInfiniteQueryKey(id)
+ return infiniteQueryOptions, FindByIdQueryResponse, typeof queryKey>({
+ enabled: !!id,
+ queryKey,
+ queryFn: async ({ signal }) => {
+ config.signal = signal
+ return findById(id, config)
+ },
+ initialPageParam: 1,
+ getNextPageParam: (lastPage) => lastPage['nextCursor'],
+ getPreviousPageParam: (firstPage) => firstPage['nextCursor'],
+ })
+}
+
+/**
+ * @summary Поиск аниме по id
+ * {@link /api/v1/anime/:id}
+ */
+export function useFindByIdInfinite<
+ TData = InfiniteData,
+ TQueryData = FindByIdQueryResponse,
+ TQueryKey extends QueryKey = FindByIdInfiniteQueryKey,
+>(
+ id: FindByIdPathParams['id'],
+ options: {
+ query?: Partial, TData, TQueryKey>> & { client?: QueryClient }
+ client?: Partial & { client?: typeof fetch }
+ } = {},
+) {
+ const { query: { client: queryClient, ...queryOptions } = {}, client: config = {} } = options ?? {}
+ const queryKey = queryOptions?.queryKey ?? findByIdInfiniteQueryKey(id)
+
+ const query = useInfiniteQuery(
+ {
+ ...findByIdInfiniteQueryOptions(id, config),
+ queryKey,
+ ...queryOptions,
+ } as unknown as InfiniteQueryObserverOptions,
+ queryClient,
+ ) as UseInfiniteQueryResult> & { queryKey: TQueryKey }
+
+ query.queryKey = queryKey as TQueryKey
+
+ return query
+}
\ No newline at end of file
diff --git a/app/api/generated/hooks/animeControllerHooks/useFindByIdSuspense.ts b/app/api/generated/hooks/animeControllerHooks/useFindByIdSuspense.ts
new file mode 100644
index 0000000..42bb665
--- /dev/null
+++ b/app/api/generated/hooks/animeControllerHooks/useFindByIdSuspense.ts
@@ -0,0 +1,60 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable @typescript-eslint/ban-ts-comment */
+// @ts-nocheck
+
+/**
+ * Generated by Kubb (https://kubb.dev/).
+ * Do not edit manually.
+ */
+
+import fetch from '@/app/api/client'
+import type { RequestConfig, ResponseErrorConfig } from '@/app/api/client'
+import type { QueryKey, QueryClient, UseSuspenseQueryOptions, UseSuspenseQueryResult } from '@tanstack/react-query'
+import type { FindByIdQueryResponse, FindByIdPathParams, FindById404 } from '../../types/animeControllerController/FindById.ts'
+import { queryOptions, useSuspenseQuery } from '@tanstack/react-query'
+import { findById } from '../../clients/axios/animeControllerService/findById.ts'
+
+export const findByIdSuspenseQueryKey = (id: FindByIdPathParams['id']) => [{ url: '/api/v1/anime/:id', params: { id: id } }] as const
+
+export type FindByIdSuspenseQueryKey = ReturnType
+
+export function findByIdSuspenseQueryOptions(id: FindByIdPathParams['id'], config: Partial & { client?: typeof fetch } = {}) {
+ const queryKey = findByIdSuspenseQueryKey(id)
+ return queryOptions, FindByIdQueryResponse, typeof queryKey>({
+ enabled: !!id,
+ queryKey,
+ queryFn: async ({ signal }) => {
+ config.signal = signal
+ return findById(id, config)
+ },
+ })
+}
+
+/**
+ * @summary Поиск аниме по id
+ * {@link /api/v1/anime/:id}
+ */
+export function useFindByIdSuspense(
+ id: FindByIdPathParams['id'],
+ options: {
+ query?: Partial, TData, TQueryKey>> & { client?: QueryClient }
+ client?: Partial & { client?: typeof fetch }
+ } = {},
+) {
+ const { query: { client: queryClient, ...queryOptions } = {}, client: config = {} } = options ?? {}
+ const queryKey = queryOptions?.queryKey ?? findByIdSuspenseQueryKey(id)
+
+ const query = useSuspenseQuery(
+ {
+ ...findByIdSuspenseQueryOptions(id, config),
+ queryKey,
+ ...queryOptions,
+ } as unknown as UseSuspenseQueryOptions,
+ queryClient,
+ ) as UseSuspenseQueryResult> & { queryKey: TQueryKey }
+
+ query.queryKey = queryKey as TQueryKey
+
+ return query
+}
\ No newline at end of file
diff --git a/app/api/generated/hooks/animeControllerHooks/useFindSimilar.ts b/app/api/generated/hooks/animeControllerHooks/useFindSimilar.ts
new file mode 100644
index 0000000..08d1705
--- /dev/null
+++ b/app/api/generated/hooks/animeControllerHooks/useFindSimilar.ts
@@ -0,0 +1,66 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable @typescript-eslint/ban-ts-comment */
+// @ts-nocheck
+
+/**
+ * Generated by Kubb (https://kubb.dev/).
+ * Do not edit manually.
+ */
+
+import fetch from '@/app/api/client'
+import type { RequestConfig, ResponseErrorConfig } from '@/app/api/client'
+import type { QueryKey, QueryClient, QueryObserverOptions, UseQueryResult } from '@tanstack/react-query'
+import type { FindSimilarQueryResponse, FindSimilarPathParams, FindSimilarQueryParams } from '../../types/animeControllerController/FindSimilar.ts'
+import { queryOptions, useQuery } from '@tanstack/react-query'
+import { findSimilar } from '../../clients/axios/animeControllerService/findSimilar.ts'
+
+export const findSimilarQueryKey = (animeId: FindSimilarPathParams['animeId'], params: FindSimilarQueryParams) =>
+ [{ url: '/api/v1/anime/:animeId/similar', params: { animeId: animeId } }, ...(params ? [params] : [])] as const
+
+export type FindSimilarQueryKey = ReturnType
+
+export function findSimilarQueryOptions(
+ animeId: FindSimilarPathParams['animeId'],
+ params: FindSimilarQueryParams,
+ config: Partial & { client?: typeof fetch } = {},
+) {
+ const queryKey = findSimilarQueryKey(animeId, params)
+ return queryOptions, FindSimilarQueryResponse, typeof queryKey>({
+ enabled: !!(animeId && params),
+ queryKey,
+ queryFn: async ({ signal }) => {
+ config.signal = signal
+ return findSimilar(animeId, params, config)
+ },
+ })
+}
+
+/**
+ * @summary Получение страницы похожих аниме по animeId
+ * {@link /api/v1/anime/:animeId/similar}
+ */
+export function useFindSimilar(
+ animeId: FindSimilarPathParams['animeId'],
+ params: FindSimilarQueryParams,
+ options: {
+ query?: Partial, TData, TQueryData, TQueryKey>> & { client?: QueryClient }
+ client?: Partial & { client?: typeof fetch }
+ } = {},
+) {
+ const { query: { client: queryClient, ...queryOptions } = {}, client: config = {} } = options ?? {}
+ const queryKey = queryOptions?.queryKey ?? findSimilarQueryKey(animeId, params)
+
+ const query = useQuery(
+ {
+ ...findSimilarQueryOptions(animeId, params, config),
+ queryKey,
+ ...queryOptions,
+ } as unknown as QueryObserverOptions,
+ queryClient,
+ ) as UseQueryResult> & { queryKey: TQueryKey }
+
+ query.queryKey = queryKey as TQueryKey
+
+ return query
+}
\ No newline at end of file
diff --git a/app/api/generated/hooks/animeControllerHooks/useFindSimilarInfinite.ts b/app/api/generated/hooks/animeControllerHooks/useFindSimilarInfinite.ts
new file mode 100644
index 0000000..1964e6d
--- /dev/null
+++ b/app/api/generated/hooks/animeControllerHooks/useFindSimilarInfinite.ts
@@ -0,0 +1,77 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable @typescript-eslint/ban-ts-comment */
+// @ts-nocheck
+
+/**
+ * Generated by Kubb (https://kubb.dev/).
+ * Do not edit manually.
+ */
+
+import fetch from '@/app/api/client'
+import type { RequestConfig, ResponseErrorConfig } from '@/app/api/client'
+import type { InfiniteData, QueryKey, QueryClient, InfiniteQueryObserverOptions, UseInfiniteQueryResult } from '@tanstack/react-query'
+import type { FindSimilarQueryResponse, FindSimilarPathParams, FindSimilarQueryParams } from '../../types/animeControllerController/FindSimilar.ts'
+import { infiniteQueryOptions, useInfiniteQuery } from '@tanstack/react-query'
+import { findSimilar } from '../../clients/axios/animeControllerService/findSimilar.ts'
+
+export const findSimilarInfiniteQueryKey = (animeId: FindSimilarPathParams['animeId'], params: FindSimilarQueryParams) =>
+ [{ url: '/api/v1/anime/:animeId/similar', params: { animeId: animeId } }, ...(params ? [params] : [])] as const
+
+export type FindSimilarInfiniteQueryKey = ReturnType
+
+export function findSimilarInfiniteQueryOptions(
+ animeId: FindSimilarPathParams['animeId'],
+ params: FindSimilarQueryParams,
+ config: Partial & { client?: typeof fetch } = {},
+) {
+ const queryKey = findSimilarInfiniteQueryKey(animeId, params)
+ return infiniteQueryOptions, FindSimilarQueryResponse, typeof queryKey, number>({
+ enabled: !!(animeId && params),
+ queryKey,
+ queryFn: async ({ signal, pageParam }) => {
+ config.signal = signal
+
+ if (params) {
+ params['page'] = pageParam as unknown as FindSimilarQueryParams['page']
+ }
+ return findSimilar(animeId, params, config)
+ },
+ initialPageParam: 1,
+ getNextPageParam: (lastPage) => lastPage['nextCursor'],
+ getPreviousPageParam: (firstPage) => firstPage['nextCursor'],
+ })
+}
+
+/**
+ * @summary Получение страницы похожих аниме по animeId
+ * {@link /api/v1/anime/:animeId/similar}
+ */
+export function useFindSimilarInfinite<
+ TData = InfiniteData,
+ TQueryData = FindSimilarQueryResponse,
+ TQueryKey extends QueryKey = FindSimilarInfiniteQueryKey,
+>(
+ animeId: FindSimilarPathParams['animeId'],
+ params: FindSimilarQueryParams,
+ options: {
+ query?: Partial, TData, TQueryKey>> & { client?: QueryClient }
+ client?: Partial & { client?: typeof fetch }
+ } = {},
+) {
+ const { query: { client: queryClient, ...queryOptions } = {}, client: config = {} } = options ?? {}
+ const queryKey = queryOptions?.queryKey ?? findSimilarInfiniteQueryKey(animeId, params)
+
+ const query = useInfiniteQuery(
+ {
+ ...findSimilarInfiniteQueryOptions(animeId, params, config),
+ queryKey,
+ ...queryOptions,
+ } as unknown as InfiniteQueryObserverOptions,
+ queryClient,
+ ) as UseInfiniteQueryResult> & { queryKey: TQueryKey }
+
+ query.queryKey = queryKey as TQueryKey
+
+ return query
+}
\ No newline at end of file
diff --git a/app/api/generated/hooks/animeControllerHooks/useFindSimilarSuspense.ts b/app/api/generated/hooks/animeControllerHooks/useFindSimilarSuspense.ts
new file mode 100644
index 0000000..c3fcce7
--- /dev/null
+++ b/app/api/generated/hooks/animeControllerHooks/useFindSimilarSuspense.ts
@@ -0,0 +1,66 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable @typescript-eslint/ban-ts-comment */
+// @ts-nocheck
+
+/**
+ * Generated by Kubb (https://kubb.dev/).
+ * Do not edit manually.
+ */
+
+import fetch from '@/app/api/client'
+import type { RequestConfig, ResponseErrorConfig } from '@/app/api/client'
+import type { QueryKey, QueryClient, UseSuspenseQueryOptions, UseSuspenseQueryResult } from '@tanstack/react-query'
+import type { FindSimilarQueryResponse, FindSimilarPathParams, FindSimilarQueryParams } from '../../types/animeControllerController/FindSimilar.ts'
+import { queryOptions, useSuspenseQuery } from '@tanstack/react-query'
+import { findSimilar } from '../../clients/axios/animeControllerService/findSimilar.ts'
+
+export const findSimilarSuspenseQueryKey = (animeId: FindSimilarPathParams['animeId'], params: FindSimilarQueryParams) =>
+ [{ url: '/api/v1/anime/:animeId/similar', params: { animeId: animeId } }, ...(params ? [params] : [])] as const
+
+export type FindSimilarSuspenseQueryKey = ReturnType
+
+export function findSimilarSuspenseQueryOptions(
+ animeId: FindSimilarPathParams['animeId'],
+ params: FindSimilarQueryParams,
+ config: Partial & { client?: typeof fetch } = {},
+) {
+ const queryKey = findSimilarSuspenseQueryKey(animeId, params)
+ return queryOptions, FindSimilarQueryResponse, typeof queryKey>({
+ enabled: !!(animeId && params),
+ queryKey,
+ queryFn: async ({ signal }) => {
+ config.signal = signal
+ return findSimilar(animeId, params, config)
+ },
+ })
+}
+
+/**
+ * @summary Получение страницы похожих аниме по animeId
+ * {@link /api/v1/anime/:animeId/similar}
+ */
+export function useFindSimilarSuspense(
+ animeId: FindSimilarPathParams['animeId'],
+ params: FindSimilarQueryParams,
+ options: {
+ query?: Partial, TData, TQueryKey>> & { client?: QueryClient }
+ client?: Partial & { client?: typeof fetch }
+ } = {},
+) {
+ const { query: { client: queryClient, ...queryOptions } = {}, client: config = {} } = options ?? {}
+ const queryKey = queryOptions?.queryKey ?? findSimilarSuspenseQueryKey(animeId, params)
+
+ const query = useSuspenseQuery(
+ {
+ ...findSimilarSuspenseQueryOptions(animeId, params, config),
+ queryKey,
+ ...queryOptions,
+ } as unknown as UseSuspenseQueryOptions,
+ queryClient,
+ ) as UseSuspenseQueryResult> & { queryKey: TQueryKey }
+
+ query.queryKey = queryKey as TQueryKey
+
+ return query
+}
\ No newline at end of file
diff --git a/app/api/generated/hooks/animeControllerHooks/useGetAllGenres.ts b/app/api/generated/hooks/animeControllerHooks/useGetAllGenres.ts
new file mode 100644
index 0000000..3bc5fab
--- /dev/null
+++ b/app/api/generated/hooks/animeControllerHooks/useGetAllGenres.ts
@@ -0,0 +1,58 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable @typescript-eslint/ban-ts-comment */
+// @ts-nocheck
+
+/**
+ * Generated by Kubb (https://kubb.dev/).
+ * Do not edit manually.
+ */
+
+import fetch from '@/app/api/client'
+import type { RequestConfig, ResponseErrorConfig } from '@/app/api/client'
+import type { QueryKey, QueryClient, QueryObserverOptions, UseQueryResult } from '@tanstack/react-query'
+import type { GetAllGenresQueryResponse } from '../../types/animeControllerController/GetAllGenres.ts'
+import { queryOptions, useQuery } from '@tanstack/react-query'
+import { getAllGenres } from '../../clients/axios/animeControllerService/getAllGenres.ts'
+
+export const getAllGenresQueryKey = () => [{ url: '/api/v1/anime/genres' }] as const
+
+export type GetAllGenresQueryKey = ReturnType
+
+export function getAllGenresQueryOptions(config: Partial & { client?: typeof fetch } = {}) {
+ const queryKey = getAllGenresQueryKey()
+ return queryOptions, GetAllGenresQueryResponse, typeof queryKey>({
+ queryKey,
+ queryFn: async ({ signal }) => {
+ config.signal = signal
+ return getAllGenres(config)
+ },
+ })
+}
+
+/**
+ * @summary Получение списка влзможных жанров аниме
+ * {@link /api/v1/anime/genres}
+ */
+export function useGetAllGenres(
+ options: {
+ query?: Partial, TData, TQueryData, TQueryKey>> & { client?: QueryClient }
+ client?: Partial & { client?: typeof fetch }
+ } = {},
+) {
+ const { query: { client: queryClient, ...queryOptions } = {}, client: config = {} } = options ?? {}
+ const queryKey = queryOptions?.queryKey ?? getAllGenresQueryKey()
+
+ const query = useQuery(
+ {
+ ...getAllGenresQueryOptions(config),
+ queryKey,
+ ...queryOptions,
+ } as unknown as QueryObserverOptions,
+ queryClient,
+ ) as UseQueryResult> & { queryKey: TQueryKey }
+
+ query.queryKey = queryKey as TQueryKey
+
+ return query
+}
\ No newline at end of file
diff --git a/app/api/generated/hooks/animeControllerHooks/useGetAllGenresInfinite.ts b/app/api/generated/hooks/animeControllerHooks/useGetAllGenresInfinite.ts
new file mode 100644
index 0000000..80e6669
--- /dev/null
+++ b/app/api/generated/hooks/animeControllerHooks/useGetAllGenresInfinite.ts
@@ -0,0 +1,65 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable @typescript-eslint/ban-ts-comment */
+// @ts-nocheck
+
+/**
+ * Generated by Kubb (https://kubb.dev/).
+ * Do not edit manually.
+ */
+
+import fetch from '@/app/api/client'
+import type { RequestConfig, ResponseErrorConfig } from '@/app/api/client'
+import type { InfiniteData, QueryKey, QueryClient, InfiniteQueryObserverOptions, UseInfiniteQueryResult } from '@tanstack/react-query'
+import type { GetAllGenresQueryResponse } from '../../types/animeControllerController/GetAllGenres.ts'
+import { infiniteQueryOptions, useInfiniteQuery } from '@tanstack/react-query'
+import { getAllGenres } from '../../clients/axios/animeControllerService/getAllGenres.ts'
+
+export const getAllGenresInfiniteQueryKey = () => [{ url: '/api/v1/anime/genres' }] as const
+
+export type GetAllGenresInfiniteQueryKey = ReturnType
+
+export function getAllGenresInfiniteQueryOptions(config: Partial & { client?: typeof fetch } = {}) {
+ const queryKey = getAllGenresInfiniteQueryKey()
+ return infiniteQueryOptions, GetAllGenresQueryResponse, typeof queryKey>({
+ queryKey,
+ queryFn: async ({ signal }) => {
+ config.signal = signal
+ return getAllGenres(config)
+ },
+ initialPageParam: 1,
+ getNextPageParam: (lastPage) => lastPage['nextCursor'],
+ getPreviousPageParam: (firstPage) => firstPage['nextCursor'],
+ })
+}
+
+/**
+ * @summary Получение списка влзможных жанров аниме
+ * {@link /api/v1/anime/genres}
+ */
+export function useGetAllGenresInfinite<
+ TData = InfiniteData,
+ TQueryData = GetAllGenresQueryResponse,
+ TQueryKey extends QueryKey = GetAllGenresInfiniteQueryKey,
+>(
+ options: {
+ query?: Partial, TData, TQueryKey>> & { client?: QueryClient }
+ client?: Partial & { client?: typeof fetch }
+ } = {},
+) {
+ const { query: { client: queryClient, ...queryOptions } = {}, client: config = {} } = options ?? {}
+ const queryKey = queryOptions?.queryKey ?? getAllGenresInfiniteQueryKey()
+
+ const query = useInfiniteQuery(
+ {
+ ...getAllGenresInfiniteQueryOptions(config),
+ queryKey,
+ ...queryOptions,
+ } as unknown as InfiniteQueryObserverOptions,
+ queryClient,
+ ) as UseInfiniteQueryResult> & { queryKey: TQueryKey }
+
+ query.queryKey = queryKey as TQueryKey
+
+ return query
+}
\ No newline at end of file
diff --git a/app/api/generated/hooks/animeControllerHooks/useGetAllGenresSuspense.ts b/app/api/generated/hooks/animeControllerHooks/useGetAllGenresSuspense.ts
new file mode 100644
index 0000000..316dc51
--- /dev/null
+++ b/app/api/generated/hooks/animeControllerHooks/useGetAllGenresSuspense.ts
@@ -0,0 +1,58 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable @typescript-eslint/ban-ts-comment */
+// @ts-nocheck
+
+/**
+ * Generated by Kubb (https://kubb.dev/).
+ * Do not edit manually.
+ */
+
+import fetch from '@/app/api/client'
+import type { RequestConfig, ResponseErrorConfig } from '@/app/api/client'
+import type { QueryKey, QueryClient, UseSuspenseQueryOptions, UseSuspenseQueryResult } from '@tanstack/react-query'
+import type { GetAllGenresQueryResponse } from '../../types/animeControllerController/GetAllGenres.ts'
+import { queryOptions, useSuspenseQuery } from '@tanstack/react-query'
+import { getAllGenres } from '../../clients/axios/animeControllerService/getAllGenres.ts'
+
+export const getAllGenresSuspenseQueryKey = () => [{ url: '/api/v1/anime/genres' }] as const
+
+export type GetAllGenresSuspenseQueryKey = ReturnType
+
+export function getAllGenresSuspenseQueryOptions(config: Partial & { client?: typeof fetch } = {}) {
+ const queryKey = getAllGenresSuspenseQueryKey()
+ return queryOptions, GetAllGenresQueryResponse, typeof queryKey>({
+ queryKey,
+ queryFn: async ({ signal }) => {
+ config.signal = signal
+ return getAllGenres(config)
+ },
+ })
+}
+
+/**
+ * @summary Получение списка влзможных жанров аниме
+ * {@link /api/v1/anime/genres}
+ */
+export function useGetAllGenresSuspense(
+ options: {
+ query?: Partial, TData, TQueryKey>> & { client?: QueryClient }
+ client?: Partial & { client?: typeof fetch }
+ } = {},
+) {
+ const { query: { client: queryClient, ...queryOptions } = {}, client: config = {} } = options ?? {}
+ const queryKey = queryOptions?.queryKey ?? getAllGenresSuspenseQueryKey()
+
+ const query = useSuspenseQuery(
+ {
+ ...getAllGenresSuspenseQueryOptions(config),
+ queryKey,
+ ...queryOptions,
+ } as unknown as UseSuspenseQueryOptions,
+ queryClient,
+ ) as UseSuspenseQueryResult> & { queryKey: TQueryKey }
+
+ query.queryKey = queryKey as TQueryKey
+
+ return query
+}
\ No newline at end of file
diff --git a/app/api/generated/hooks/animeControllerHooks/useGetAllMpaaRatings.ts b/app/api/generated/hooks/animeControllerHooks/useGetAllMpaaRatings.ts
new file mode 100644
index 0000000..f23fabc
--- /dev/null
+++ b/app/api/generated/hooks/animeControllerHooks/useGetAllMpaaRatings.ts
@@ -0,0 +1,62 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable @typescript-eslint/ban-ts-comment */
+// @ts-nocheck
+
+/**
+ * Generated by Kubb (https://kubb.dev/).
+ * Do not edit manually.
+ */
+
+import fetch from '@/app/api/client'
+import type { RequestConfig, ResponseErrorConfig } from '@/app/api/client'
+import type { QueryKey, QueryClient, QueryObserverOptions, UseQueryResult } from '@tanstack/react-query'
+import type { GetAllMpaaRatingsQueryResponse } from '../../types/animeControllerController/GetAllMpaaRatings.ts'
+import { queryOptions, useQuery } from '@tanstack/react-query'
+import { getAllMpaaRatings } from '../../clients/axios/animeControllerService/getAllMpaaRatings.ts'
+
+export const getAllMpaaRatingsQueryKey = () => [{ url: '/api/v1/anime/mpaaratings' }] as const
+
+export type GetAllMpaaRatingsQueryKey = ReturnType
+
+export function getAllMpaaRatingsQueryOptions(config: Partial & { client?: typeof fetch } = {}) {
+ const queryKey = getAllMpaaRatingsQueryKey()
+ return queryOptions, GetAllMpaaRatingsQueryResponse, typeof queryKey>({
+ queryKey,
+ queryFn: async ({ signal }) => {
+ config.signal = signal
+ return getAllMpaaRatings(config)
+ },
+ })
+}
+
+/**
+ * @summary Получение списка влзможных mpa рейтингов
+ * {@link /api/v1/anime/mpaaratings}
+ */
+export function useGetAllMpaaRatings<
+ TData = GetAllMpaaRatingsQueryResponse,
+ TQueryData = GetAllMpaaRatingsQueryResponse,
+ TQueryKey extends QueryKey = GetAllMpaaRatingsQueryKey,
+>(
+ options: {
+ query?: Partial, TData, TQueryData, TQueryKey>> & { client?: QueryClient }
+ client?: Partial & { client?: typeof fetch }
+ } = {},
+) {
+ const { query: { client: queryClient, ...queryOptions } = {}, client: config = {} } = options ?? {}
+ const queryKey = queryOptions?.queryKey ?? getAllMpaaRatingsQueryKey()
+
+ const query = useQuery(
+ {
+ ...getAllMpaaRatingsQueryOptions(config),
+ queryKey,
+ ...queryOptions,
+ } as unknown as QueryObserverOptions,
+ queryClient,
+ ) as UseQueryResult> & { queryKey: TQueryKey }
+
+ query.queryKey = queryKey as TQueryKey
+
+ return query
+}
\ No newline at end of file
diff --git a/app/api/generated/hooks/animeControllerHooks/useGetAllMpaaRatingsInfinite.ts b/app/api/generated/hooks/animeControllerHooks/useGetAllMpaaRatingsInfinite.ts
new file mode 100644
index 0000000..d729173
--- /dev/null
+++ b/app/api/generated/hooks/animeControllerHooks/useGetAllMpaaRatingsInfinite.ts
@@ -0,0 +1,65 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable @typescript-eslint/ban-ts-comment */
+// @ts-nocheck
+
+/**
+ * Generated by Kubb (https://kubb.dev/).
+ * Do not edit manually.
+ */
+
+import fetch from '@/app/api/client'
+import type { RequestConfig, ResponseErrorConfig } from '@/app/api/client'
+import type { InfiniteData, QueryKey, QueryClient, InfiniteQueryObserverOptions, UseInfiniteQueryResult } from '@tanstack/react-query'
+import type { GetAllMpaaRatingsQueryResponse } from '../../types/animeControllerController/GetAllMpaaRatings.ts'
+import { infiniteQueryOptions, useInfiniteQuery } from '@tanstack/react-query'
+import { getAllMpaaRatings } from '../../clients/axios/animeControllerService/getAllMpaaRatings.ts'
+
+export const getAllMpaaRatingsInfiniteQueryKey = () => [{ url: '/api/v1/anime/mpaaratings' }] as const
+
+export type GetAllMpaaRatingsInfiniteQueryKey = ReturnType
+
+export function getAllMpaaRatingsInfiniteQueryOptions(config: Partial & { client?: typeof fetch } = {}) {
+ const queryKey = getAllMpaaRatingsInfiniteQueryKey()
+ return infiniteQueryOptions, GetAllMpaaRatingsQueryResponse, typeof queryKey>({
+ queryKey,
+ queryFn: async ({ signal }) => {
+ config.signal = signal
+ return getAllMpaaRatings(config)
+ },
+ initialPageParam: 1,
+ getNextPageParam: (lastPage) => lastPage['nextCursor'],
+ getPreviousPageParam: (firstPage) => firstPage['nextCursor'],
+ })
+}
+
+/**
+ * @summary Получение списка влзможных mpa рейтингов
+ * {@link /api/v1/anime/mpaaratings}
+ */
+export function useGetAllMpaaRatingsInfinite<
+ TData = InfiniteData,
+ TQueryData = GetAllMpaaRatingsQueryResponse,
+ TQueryKey extends QueryKey = GetAllMpaaRatingsInfiniteQueryKey,
+>(
+ options: {
+ query?: Partial, TData, TQueryKey>> & { client?: QueryClient }
+ client?: Partial & { client?: typeof fetch }
+ } = {},
+) {
+ const { query: { client: queryClient, ...queryOptions } = {}, client: config = {} } = options ?? {}
+ const queryKey = queryOptions?.queryKey ?? getAllMpaaRatingsInfiniteQueryKey()
+
+ const query = useInfiniteQuery(
+ {
+ ...getAllMpaaRatingsInfiniteQueryOptions(config),
+ queryKey,
+ ...queryOptions,
+ } as unknown as InfiniteQueryObserverOptions,
+ queryClient,
+ ) as UseInfiniteQueryResult> & { queryKey: TQueryKey }
+
+ query.queryKey = queryKey as TQueryKey
+
+ return query
+}
\ No newline at end of file
diff --git a/app/api/generated/hooks/animeControllerHooks/useGetAllMpaaRatingsSuspense.ts b/app/api/generated/hooks/animeControllerHooks/useGetAllMpaaRatingsSuspense.ts
new file mode 100644
index 0000000..e888eb4
--- /dev/null
+++ b/app/api/generated/hooks/animeControllerHooks/useGetAllMpaaRatingsSuspense.ts
@@ -0,0 +1,58 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable @typescript-eslint/ban-ts-comment */
+// @ts-nocheck
+
+/**
+ * Generated by Kubb (https://kubb.dev/).
+ * Do not edit manually.
+ */
+
+import fetch from '@/app/api/client'
+import type { RequestConfig, ResponseErrorConfig } from '@/app/api/client'
+import type { QueryKey, QueryClient, UseSuspenseQueryOptions, UseSuspenseQueryResult } from '@tanstack/react-query'
+import type { GetAllMpaaRatingsQueryResponse } from '../../types/animeControllerController/GetAllMpaaRatings.ts'
+import { queryOptions, useSuspenseQuery } from '@tanstack/react-query'
+import { getAllMpaaRatings } from '../../clients/axios/animeControllerService/getAllMpaaRatings.ts'
+
+export const getAllMpaaRatingsSuspenseQueryKey = () => [{ url: '/api/v1/anime/mpaaratings' }] as const
+
+export type GetAllMpaaRatingsSuspenseQueryKey = ReturnType
+
+export function getAllMpaaRatingsSuspenseQueryOptions(config: Partial & { client?: typeof fetch } = {}) {
+ const queryKey = getAllMpaaRatingsSuspenseQueryKey()
+ return queryOptions, GetAllMpaaRatingsQueryResponse, typeof queryKey>({
+ queryKey,
+ queryFn: async ({ signal }) => {
+ config.signal = signal
+ return getAllMpaaRatings(config)
+ },
+ })
+}
+
+/**
+ * @summary Получение списка влзможных mpa рейтингов
+ * {@link /api/v1/anime/mpaaratings}
+ */
+export function useGetAllMpaaRatingsSuspense(
+ options: {
+ query?: Partial, TData, TQueryKey>> & { client?: QueryClient }
+ client?: Partial & { client?: typeof fetch }
+ } = {},
+) {
+ const { query: { client: queryClient, ...queryOptions } = {}, client: config = {} } = options ?? {}
+ const queryKey = queryOptions?.queryKey ?? getAllMpaaRatingsSuspenseQueryKey()
+
+ const query = useSuspenseQuery(
+ {
+ ...getAllMpaaRatingsSuspenseQueryOptions(config),
+ queryKey,
+ ...queryOptions,
+ } as unknown as UseSuspenseQueryOptions,
+ queryClient,
+ ) as UseSuspenseQueryResult> & { queryKey: TQueryKey }
+
+ query.queryKey = queryKey as TQueryKey
+
+ return query
+}
\ No newline at end of file
diff --git a/app/api/generated/hooks/animeControllerHooks/useGetAllStatuses.ts b/app/api/generated/hooks/animeControllerHooks/useGetAllStatuses.ts
new file mode 100644
index 0000000..528ed0b
--- /dev/null
+++ b/app/api/generated/hooks/animeControllerHooks/useGetAllStatuses.ts
@@ -0,0 +1,62 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable @typescript-eslint/ban-ts-comment */
+// @ts-nocheck
+
+/**
+ * Generated by Kubb (https://kubb.dev/).
+ * Do not edit manually.
+ */
+
+import fetch from '@/app/api/client'
+import type { RequestConfig, ResponseErrorConfig } from '@/app/api/client'
+import type { QueryKey, QueryClient, QueryObserverOptions, UseQueryResult } from '@tanstack/react-query'
+import type { GetAllStatusesQueryResponse } from '../../types/animeControllerController/GetAllStatuses.ts'
+import { queryOptions, useQuery } from '@tanstack/react-query'
+import { getAllStatuses } from '../../clients/axios/animeControllerService/getAllStatuses.ts'
+
+export const getAllStatusesQueryKey = () => [{ url: '/api/v1/anime/statuses' }] as const
+
+export type GetAllStatusesQueryKey = ReturnType
+
+export function getAllStatusesQueryOptions(config: Partial & { client?: typeof fetch } = {}) {
+ const queryKey = getAllStatusesQueryKey()
+ return queryOptions, GetAllStatusesQueryResponse, typeof queryKey>({
+ queryKey,
+ queryFn: async ({ signal }) => {
+ config.signal = signal
+ return getAllStatuses(config)
+ },
+ })
+}
+
+/**
+ * @summary Получение списка влзможных статусов аниме
+ * {@link /api/v1/anime/statuses}
+ */
+export function useGetAllStatuses<
+ TData = GetAllStatusesQueryResponse,
+ TQueryData = GetAllStatusesQueryResponse,
+ TQueryKey extends QueryKey = GetAllStatusesQueryKey,
+>(
+ options: {
+ query?: Partial, TData, TQueryData, TQueryKey>> & { client?: QueryClient }
+ client?: Partial & { client?: typeof fetch }
+ } = {},
+) {
+ const { query: { client: queryClient, ...queryOptions } = {}, client: config = {} } = options ?? {}
+ const queryKey = queryOptions?.queryKey ?? getAllStatusesQueryKey()
+
+ const query = useQuery(
+ {
+ ...getAllStatusesQueryOptions(config),
+ queryKey,
+ ...queryOptions,
+ } as unknown as QueryObserverOptions,
+ queryClient,
+ ) as UseQueryResult> & { queryKey: TQueryKey }
+
+ query.queryKey = queryKey as TQueryKey
+
+ return query
+}
\ No newline at end of file
diff --git a/app/api/generated/hooks/animeControllerHooks/useGetAllStatusesInfinite.ts b/app/api/generated/hooks/animeControllerHooks/useGetAllStatusesInfinite.ts
new file mode 100644
index 0000000..175b146
--- /dev/null
+++ b/app/api/generated/hooks/animeControllerHooks/useGetAllStatusesInfinite.ts
@@ -0,0 +1,65 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable @typescript-eslint/ban-ts-comment */
+// @ts-nocheck
+
+/**
+ * Generated by Kubb (https://kubb.dev/).
+ * Do not edit manually.
+ */
+
+import fetch from '@/app/api/client'
+import type { RequestConfig, ResponseErrorConfig } from '@/app/api/client'
+import type { InfiniteData, QueryKey, QueryClient, InfiniteQueryObserverOptions, UseInfiniteQueryResult } from '@tanstack/react-query'
+import type { GetAllStatusesQueryResponse } from '../../types/animeControllerController/GetAllStatuses.ts'
+import { infiniteQueryOptions, useInfiniteQuery } from '@tanstack/react-query'
+import { getAllStatuses } from '../../clients/axios/animeControllerService/getAllStatuses.ts'
+
+export const getAllStatusesInfiniteQueryKey = () => [{ url: '/api/v1/anime/statuses' }] as const
+
+export type GetAllStatusesInfiniteQueryKey = ReturnType
+
+export function getAllStatusesInfiniteQueryOptions(config: Partial & { client?: typeof fetch } = {}) {
+ const queryKey = getAllStatusesInfiniteQueryKey()
+ return infiniteQueryOptions, GetAllStatusesQueryResponse, typeof queryKey>({
+ queryKey,
+ queryFn: async ({ signal }) => {
+ config.signal = signal
+ return getAllStatuses(config)
+ },
+ initialPageParam: 1,
+ getNextPageParam: (lastPage) => lastPage['nextCursor'],
+ getPreviousPageParam: (firstPage) => firstPage['nextCursor'],
+ })
+}
+
+/**
+ * @summary Получение списка влзможных статусов аниме
+ * {@link /api/v1/anime/statuses}
+ */
+export function useGetAllStatusesInfinite<
+ TData = InfiniteData,
+ TQueryData = GetAllStatusesQueryResponse,
+ TQueryKey extends QueryKey = GetAllStatusesInfiniteQueryKey,
+>(
+ options: {
+ query?: Partial, TData, TQueryKey>> & { client?: QueryClient }
+ client?: Partial & { client?: typeof fetch }
+ } = {},
+) {
+ const { query: { client: queryClient, ...queryOptions } = {}, client: config = {} } = options ?? {}
+ const queryKey = queryOptions?.queryKey ?? getAllStatusesInfiniteQueryKey()
+
+ const query = useInfiniteQuery(
+ {
+ ...getAllStatusesInfiniteQueryOptions(config),
+ queryKey,
+ ...queryOptions,
+ } as unknown as InfiniteQueryObserverOptions,
+ queryClient,
+ ) as UseInfiniteQueryResult> & { queryKey: TQueryKey }
+
+ query.queryKey = queryKey as TQueryKey
+
+ return query
+}
\ No newline at end of file
diff --git a/app/api/generated/hooks/animeControllerHooks/useGetAllStatusesSuspense.ts b/app/api/generated/hooks/animeControllerHooks/useGetAllStatusesSuspense.ts
new file mode 100644
index 0000000..d5d9a42
--- /dev/null
+++ b/app/api/generated/hooks/animeControllerHooks/useGetAllStatusesSuspense.ts
@@ -0,0 +1,58 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable @typescript-eslint/ban-ts-comment */
+// @ts-nocheck
+
+/**
+ * Generated by Kubb (https://kubb.dev/).
+ * Do not edit manually.
+ */
+
+import fetch from '@/app/api/client'
+import type { RequestConfig, ResponseErrorConfig } from '@/app/api/client'
+import type { QueryKey, QueryClient, UseSuspenseQueryOptions, UseSuspenseQueryResult } from '@tanstack/react-query'
+import type { GetAllStatusesQueryResponse } from '../../types/animeControllerController/GetAllStatuses.ts'
+import { queryOptions, useSuspenseQuery } from '@tanstack/react-query'
+import { getAllStatuses } from '../../clients/axios/animeControllerService/getAllStatuses.ts'
+
+export const getAllStatusesSuspenseQueryKey = () => [{ url: '/api/v1/anime/statuses' }] as const
+
+export type GetAllStatusesSuspenseQueryKey = ReturnType
+
+export function getAllStatusesSuspenseQueryOptions(config: Partial & { client?: typeof fetch } = {}) {
+ const queryKey = getAllStatusesSuspenseQueryKey()
+ return queryOptions, GetAllStatusesQueryResponse, typeof queryKey>({
+ queryKey,
+ queryFn: async ({ signal }) => {
+ config.signal = signal
+ return getAllStatuses(config)
+ },
+ })
+}
+
+/**
+ * @summary Получение списка влзможных статусов аниме
+ * {@link /api/v1/anime/statuses}
+ */
+export function useGetAllStatusesSuspense(
+ options: {
+ query?: Partial, TData, TQueryKey>> & { client?: QueryClient }
+ client?: Partial & { client?: typeof fetch }
+ } = {},
+) {
+ const { query: { client: queryClient, ...queryOptions } = {}, client: config = {} } = options ?? {}
+ const queryKey = queryOptions?.queryKey ?? getAllStatusesSuspenseQueryKey()
+
+ const query = useSuspenseQuery(
+ {
+ ...getAllStatusesSuspenseQueryOptions(config),
+ queryKey,
+ ...queryOptions,
+ } as unknown as UseSuspenseQueryOptions,
+ queryClient,
+ ) as UseSuspenseQueryResult> & { queryKey: TQueryKey }
+
+ query.queryKey = queryKey as TQueryKey
+
+ return query
+}
\ No newline at end of file
diff --git a/app/api/generated/hooks/animeControllerHooks/useGetAllTypes.ts b/app/api/generated/hooks/animeControllerHooks/useGetAllTypes.ts
new file mode 100644
index 0000000..1a4973c
--- /dev/null
+++ b/app/api/generated/hooks/animeControllerHooks/useGetAllTypes.ts
@@ -0,0 +1,58 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable @typescript-eslint/ban-ts-comment */
+// @ts-nocheck
+
+/**
+ * Generated by Kubb (https://kubb.dev/).
+ * Do not edit manually.
+ */
+
+import fetch from '@/app/api/client'
+import type { RequestConfig, ResponseErrorConfig } from '@/app/api/client'
+import type { QueryKey, QueryClient, QueryObserverOptions, UseQueryResult } from '@tanstack/react-query'
+import type { GetAllTypesQueryResponse } from '../../types/animeControllerController/GetAllTypes.ts'
+import { queryOptions, useQuery } from '@tanstack/react-query'
+import { getAllTypes } from '../../clients/axios/animeControllerService/getAllTypes.ts'
+
+export const getAllTypesQueryKey = () => [{ url: '/api/v1/anime/types' }] as const
+
+export type GetAllTypesQueryKey = ReturnType
+
+export function getAllTypesQueryOptions(config: Partial & { client?: typeof fetch } = {}) {
+ const queryKey = getAllTypesQueryKey()
+ return queryOptions, GetAllTypesQueryResponse, typeof queryKey>({
+ queryKey,
+ queryFn: async ({ signal }) => {
+ config.signal = signal
+ return getAllTypes(config)
+ },
+ })
+}
+
+/**
+ * @summary Получение списка влзможных типов аниме
+ * {@link /api/v1/anime/types}
+ */
+export function useGetAllTypes(
+ options: {
+ query?: Partial, TData, TQueryData, TQueryKey>> & { client?: QueryClient }
+ client?: Partial & { client?: typeof fetch }
+ } = {},
+) {
+ const { query: { client: queryClient, ...queryOptions } = {}, client: config = {} } = options ?? {}
+ const queryKey = queryOptions?.queryKey ?? getAllTypesQueryKey()
+
+ const query = useQuery(
+ {
+ ...getAllTypesQueryOptions(config),
+ queryKey,
+ ...queryOptions,
+ } as unknown as QueryObserverOptions,
+ queryClient,
+ ) as UseQueryResult> & { queryKey: TQueryKey }
+
+ query.queryKey = queryKey as TQueryKey
+
+ return query
+}
\ No newline at end of file
diff --git a/app/api/generated/hooks/animeControllerHooks/useGetAllTypesInfinite.ts b/app/api/generated/hooks/animeControllerHooks/useGetAllTypesInfinite.ts
new file mode 100644
index 0000000..9f4ce50
--- /dev/null
+++ b/app/api/generated/hooks/animeControllerHooks/useGetAllTypesInfinite.ts
@@ -0,0 +1,65 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable @typescript-eslint/ban-ts-comment */
+// @ts-nocheck
+
+/**
+ * Generated by Kubb (https://kubb.dev/).
+ * Do not edit manually.
+ */
+
+import fetch from '@/app/api/client'
+import type { RequestConfig, ResponseErrorConfig } from '@/app/api/client'
+import type { InfiniteData, QueryKey, QueryClient, InfiniteQueryObserverOptions, UseInfiniteQueryResult } from '@tanstack/react-query'
+import type { GetAllTypesQueryResponse } from '../../types/animeControllerController/GetAllTypes.ts'
+import { infiniteQueryOptions, useInfiniteQuery } from '@tanstack/react-query'
+import { getAllTypes } from '../../clients/axios/animeControllerService/getAllTypes.ts'
+
+export const getAllTypesInfiniteQueryKey = () => [{ url: '/api/v1/anime/types' }] as const
+
+export type GetAllTypesInfiniteQueryKey = ReturnType
+
+export function getAllTypesInfiniteQueryOptions(config: Partial & { client?: typeof fetch } = {}) {
+ const queryKey = getAllTypesInfiniteQueryKey()
+ return infiniteQueryOptions, GetAllTypesQueryResponse, typeof queryKey>({
+ queryKey,
+ queryFn: async ({ signal }) => {
+ config.signal = signal
+ return getAllTypes(config)
+ },
+ initialPageParam: 1,
+ getNextPageParam: (lastPage) => lastPage['nextCursor'],
+ getPreviousPageParam: (firstPage) => firstPage['nextCursor'],
+ })
+}
+
+/**
+ * @summary Получение списка влзможных типов аниме
+ * {@link /api/v1/anime/types}
+ */
+export function useGetAllTypesInfinite<
+ TData = InfiniteData,
+ TQueryData = GetAllTypesQueryResponse,
+ TQueryKey extends QueryKey = GetAllTypesInfiniteQueryKey,
+>(
+ options: {
+ query?: Partial, TData, TQueryKey>> & { client?: QueryClient }
+ client?: Partial & { client?: typeof fetch }
+ } = {},
+) {
+ const { query: { client: queryClient, ...queryOptions } = {}, client: config = {} } = options ?? {}
+ const queryKey = queryOptions?.queryKey ?? getAllTypesInfiniteQueryKey()
+
+ const query = useInfiniteQuery(
+ {
+ ...getAllTypesInfiniteQueryOptions(config),
+ queryKey,
+ ...queryOptions,
+ } as unknown as InfiniteQueryObserverOptions,
+ queryClient,
+ ) as UseInfiniteQueryResult> & { queryKey: TQueryKey }
+
+ query.queryKey = queryKey as TQueryKey
+
+ return query
+}
\ No newline at end of file
diff --git a/app/api/generated/hooks/animeControllerHooks/useGetAllTypesSuspense.ts b/app/api/generated/hooks/animeControllerHooks/useGetAllTypesSuspense.ts
new file mode 100644
index 0000000..789f4d5
--- /dev/null
+++ b/app/api/generated/hooks/animeControllerHooks/useGetAllTypesSuspense.ts
@@ -0,0 +1,58 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable @typescript-eslint/ban-ts-comment */
+// @ts-nocheck
+
+/**
+ * Generated by Kubb (https://kubb.dev/).
+ * Do not edit manually.
+ */
+
+import fetch from '@/app/api/client'
+import type { RequestConfig, ResponseErrorConfig } from '@/app/api/client'
+import type { QueryKey, QueryClient, UseSuspenseQueryOptions, UseSuspenseQueryResult } from '@tanstack/react-query'
+import type { GetAllTypesQueryResponse } from '../../types/animeControllerController/GetAllTypes.ts'
+import { queryOptions, useSuspenseQuery } from '@tanstack/react-query'
+import { getAllTypes } from '../../clients/axios/animeControllerService/getAllTypes.ts'
+
+export const getAllTypesSuspenseQueryKey = () => [{ url: '/api/v1/anime/types' }] as const
+
+export type GetAllTypesSuspenseQueryKey = ReturnType
+
+export function getAllTypesSuspenseQueryOptions(config: Partial & { client?: typeof fetch } = {}) {
+ const queryKey = getAllTypesSuspenseQueryKey()
+ return queryOptions, GetAllTypesQueryResponse, typeof queryKey>({
+ queryKey,
+ queryFn: async ({ signal }) => {
+ config.signal = signal
+ return getAllTypes(config)
+ },
+ })
+}
+
+/**
+ * @summary Получение списка влзможных типов аниме
+ * {@link /api/v1/anime/types}
+ */
+export function useGetAllTypesSuspense(
+ options: {
+ query?: Partial, TData, TQueryKey>> & { client?: QueryClient }
+ client?: Partial & { client?: typeof fetch }
+ } = {},
+) {
+ const { query: { client: queryClient, ...queryOptions } = {}, client: config = {} } = options ?? {}
+ const queryKey = queryOptions?.queryKey ?? getAllTypesSuspenseQueryKey()
+
+ const query = useSuspenseQuery(
+ {
+ ...getAllTypesSuspenseQueryOptions(config),
+ queryKey,
+ ...queryOptions,
+ } as unknown as UseSuspenseQueryOptions,
+ queryClient,
+ ) as UseSuspenseQueryResult> & { queryKey: TQueryKey }
+
+ query.queryKey = queryKey as TQueryKey
+
+ return query
+}
\ No newline at end of file
diff --git a/app/api/generated/hooks/animeControllerHooks/useGetPage.ts b/app/api/generated/hooks/animeControllerHooks/useGetPage.ts
new file mode 100644
index 0000000..d46865a
--- /dev/null
+++ b/app/api/generated/hooks/animeControllerHooks/useGetPage.ts
@@ -0,0 +1,61 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable @typescript-eslint/ban-ts-comment */
+// @ts-nocheck
+
+/**
+ * Generated by Kubb (https://kubb.dev/).
+ * Do not edit manually.
+ */
+
+import fetch from '@/app/api/client'
+import type { RequestConfig, ResponseErrorConfig } from '@/app/api/client'
+import type { QueryKey, QueryClient, QueryObserverOptions, UseQueryResult } from '@tanstack/react-query'
+import type { GetPageQueryResponse, GetPageQueryParams, GetPage400 } from '../../types/animeControllerController/GetPage.ts'
+import { queryOptions, useQuery } from '@tanstack/react-query'
+import { getPage } from '../../clients/axios/animeControllerService/getPage.ts'
+
+export const getPageQueryKey = (params: GetPageQueryParams) => [{ url: '/api/v1/anime' }, ...(params ? [params] : [])] as const
+
+export type GetPageQueryKey = ReturnType
+
+export function getPageQueryOptions(params: GetPageQueryParams, config: Partial & { client?: typeof fetch } = {}) {
+ const queryKey = getPageQueryKey(params)
+ return queryOptions, GetPageQueryResponse, typeof queryKey>({
+ enabled: !!params,
+ queryKey,
+ queryFn: async ({ signal }) => {
+ config.signal = signal
+ return getPage(params, config)
+ },
+ })
+}
+
+/**
+ * @description Возвращает страницу AnimeDto/AnimeCardDto в зависимости от параметра запроса dtoType
+ * @summary Поиск аниме по параметрам
+ * {@link /api/v1/anime}
+ */
+export function useGetPage(
+ params: GetPageQueryParams,
+ options: {
+ query?: Partial, TData, TQueryData, TQueryKey>> & { client?: QueryClient }
+ client?: Partial & { client?: typeof fetch }
+ } = {},
+) {
+ const { query: { client: queryClient, ...queryOptions } = {}, client: config = {} } = options ?? {}
+ const queryKey = queryOptions?.queryKey ?? getPageQueryKey(params)
+
+ const query = useQuery(
+ {
+ ...getPageQueryOptions(params, config),
+ queryKey,
+ ...queryOptions,
+ } as unknown as QueryObserverOptions,
+ queryClient,
+ ) as UseQueryResult> & { queryKey: TQueryKey }
+
+ query.queryKey = queryKey as TQueryKey
+
+ return query
+}
\ No newline at end of file
diff --git a/app/api/generated/hooks/animeControllerHooks/useGetPageInfinite.ts b/app/api/generated/hooks/animeControllerHooks/useGetPageInfinite.ts
new file mode 100644
index 0000000..6f888f7
--- /dev/null
+++ b/app/api/generated/hooks/animeControllerHooks/useGetPageInfinite.ts
@@ -0,0 +1,72 @@
+/* eslint-disable @typescript-eslint/no-explicit-any */
+/* eslint-disable @typescript-eslint/no-unused-vars */
+/* eslint-disable @typescript-eslint/ban-ts-comment */
+// @ts-nocheck
+
+/**
+ * Generated by Kubb (https://kubb.dev/).
+ * Do not edit manually.
+ */
+
+import fetch from '@/app/api/client'
+import type { RequestConfig, ResponseErrorConfig } from '@/app/api/client'
+import type { InfiniteData, QueryKey, QueryClient, InfiniteQueryObserverOptions, UseInfiniteQueryResult } from '@tanstack/react-query'
+import type { GetPageQueryResponse, GetPageQueryParams, GetPage400 } from '../../types/animeControllerController/GetPage.ts'
+import { infiniteQueryOptions, useInfiniteQuery } from '@tanstack/react-query'
+import { getPage } from '../../clients/axios/animeControllerService/getPage.ts'
+
+export const getPageInfiniteQueryKey = (params: GetPageQueryParams) => [{ url: '/api/v1/anime' }, ...(params ? [params] : [])] as const
+
+export type GetPageInfiniteQueryKey = ReturnType