From a32e8eb5cd47ef9020125d9aa59704aadffd0611 Mon Sep 17 00:00:00 2001
From: "a.cherkashin"
Date: Mon, 28 Jul 2025 00:50:12 +0300
Subject: [PATCH] feat: codegen example
---
api-docs.json | 2719 +++++++++++++++++
app/(main)/test/Genres/Genres.tsx | 27 +
app/(main)/test/Genres/index.ts | 1 +
app/(main)/test/page.tsx | 35 +
app/api/client/axios.ts | 44 +
app/api/client/index.ts | 2 +
.../animeControllerService.ts | 37 +
.../animeControllerService/createAnime.ts | 37 +
.../animeControllerService/deleteById.ts | 32 +
.../axios/animeControllerService/findById.ts | 32 +
.../animeControllerService/findSimilar.ts | 37 +
.../animeControllerService/getAllGenres.ts | 32 +
.../getAllMpaaRatings.ts | 32 +
.../animeControllerService/getAllStatuses.ts | 32 +
.../animeControllerService/getAllTypes.ts | 32 +
.../axios/animeControllerService/getPage.ts | 34 +
.../increasePopularity.ts | 37 +
.../animeControllerService/updateById.ts | 34 +
.../commentsControllerService.ts | 19 +
.../createComment.ts | 42 +
.../deleteComment.ts | 37 +
.../getCommentsById.ts | 42 +
.../getCommentsByUser.ts | 41 +
.../updateComment.ts | 42 +
.../complaintControllerService.ts | 18 +
.../createComplaint.ts | 41 +
.../getComplaintById.ts | 39 +
.../getComplaints.ts | 37 +
.../updateComplaintStatus.ts | 42 +
.../dubControllerService/addDubToEpisode.ts | 36 +
.../axios/dubControllerService/createDub.ts | 34 +
.../axios/dubControllerService/deleteDub.ts | 32 +
.../dubControllerService.ts | 21 +
.../axios/dubControllerService/getDubById.ts | 32 +
.../dubControllerService/getDubsByEpisode.ts | 33 +
.../removeDubFromEpisode.ts | 40 +
.../dubControllerService/updateDubName.ts | 42 +
.../episodesControllerService/addView.ts | 32 +
.../createEpisode.ts | 37 +
.../deleteEpisode.ts | 32 +
.../episodesControllerService.ts | 22 +
.../getAdminEpisodeById.ts | 33 +
.../getEpisodeById.ts | 41 +
.../getEpisodesByAnimeId.ts | 41 +
.../updateEpisode.ts | 42 +
.../updateEpisodeOrder.ts | 36 +
.../addAnimeIdsToGroup.ts | 41 +
.../axios/groupControllerService/create1.ts | 34 +
.../deleteAnimeIdsFromGroup.ts | 41 +
.../groupControllerService/deleteById2.ts | 32 +
.../groupControllerService/getByAnimeId.ts | 32 +
.../axios/groupControllerService/getById1.ts | 32 +
.../groupControllerService.ts | 21 +
.../groupControllerService/updateById1.ts | 37 +
app/api/generated/clients/axios/index.ts | 60 +
app/api/generated/clients/axios/operations.ts | 220 ++
.../axios/titleControllerService/create.ts | 33 +
.../axios/titleControllerService/createAll.ts | 33 +
.../deleteAllByAnimeId.ts | 37 +
.../titleControllerService/deleteAllById.ts | 33 +
.../titleControllerService/deleteById1.ts | 32 +
.../titleControllerService/getAllByAnimeId.ts | 32 +
.../axios/titleControllerService/getById.ts | 32 +
.../axios/titleControllerService/getPage1.ts | 33 +
.../titleControllerService.ts | 24 +
.../titleControllerService/updateAllById.ts | 33 +
.../titleControllerService/updateById2.ts | 33 +
.../animeControllerHooks/useCreateAnime.ts | 48 +
.../animeControllerHooks/useDeleteById.ts | 48 +
.../hooks/animeControllerHooks/useFindById.ts | 60 +
.../useFindByIdInfinite.ts | 67 +
.../useFindByIdSuspense.ts | 60 +
.../animeControllerHooks/useFindSimilar.ts | 66 +
.../useFindSimilarInfinite.ts | 77 +
.../useFindSimilarSuspense.ts | 66 +
.../animeControllerHooks/useGetAllGenres.ts | 58 +
.../useGetAllGenresInfinite.ts | 65 +
.../useGetAllGenresSuspense.ts | 58 +
.../useGetAllMpaaRatings.ts | 62 +
.../useGetAllMpaaRatingsInfinite.ts | 65 +
.../useGetAllMpaaRatingsSuspense.ts | 58 +
.../animeControllerHooks/useGetAllStatuses.ts | 62 +
.../useGetAllStatusesInfinite.ts | 65 +
.../useGetAllStatusesSuspense.ts | 58 +
.../animeControllerHooks/useGetAllTypes.ts | 58 +
.../useGetAllTypesInfinite.ts | 65 +
.../useGetAllTypesSuspense.ts | 58 +
.../hooks/animeControllerHooks/useGetPage.ts | 61 +
.../useGetPageInfinite.ts | 72 +
.../useGetPageSuspense.ts | 61 +
.../useIncreasePopularity.ts | 48 +
.../animeControllerHooks/useUpdateById.ts | 48 +
.../useCreateComment.ts | 56 +
.../useDeleteComment.ts | 56 +
.../useGetCommentsById.ts | 76 +
.../useGetCommentsByIdInfinite.ts | 86 +
.../useGetCommentsByIdSuspense.ts | 75 +
.../useGetCommentsByUser.ts | 74 +
.../useGetCommentsByUserInfinite.ts | 81 +
.../useGetCommentsByUserSuspense.ts | 70 +
.../useUpdateComment.ts | 56 +
.../useCreateComplaint.ts | 55 +
.../useGetComplaintById.ts | 74 +
.../useGetComplaintByIdInfinite.ts | 77 +
.../useGetComplaintByIdSuspense.ts | 70 +
.../useGetComplaints.ts | 48 +
.../useUpdateComplaintStatus.ts | 61 +
.../dubControllerHooks/useAddDubToEpisode.ts | 56 +
.../hooks/dubControllerHooks/useCreateDub.ts | 48 +
.../hooks/dubControllerHooks/useDeleteDub.ts | 46 +
.../hooks/dubControllerHooks/useGetDubById.ts | 60 +
.../useGetDubByIdInfinite.ts | 67 +
.../useGetDubByIdSuspense.ts | 60 +
.../dubControllerHooks/useGetDubsByEpisode.ts | 69 +
.../useGetDubsByEpisodeInfinite.ts | 72 +
.../useGetDubsByEpisodeSuspense.ts | 65 +
.../useRemoveDubFromEpisode.ts | 60 +
.../dubControllerHooks/useUpdateDubName.ts | 61 +
.../episodesControllerHooks/useAddView.ts | 46 +
.../useCreateEpisode.ts | 48 +
.../useDeleteEpisode.ts | 48 +
.../useGetAdminEpisodeById.ts | 66 +
.../useGetAdminEpisodeByIdInfinite.ts | 72 +
.../useGetAdminEpisodeByIdSuspense.ts | 65 +
.../useGetEpisodeById.ts | 74 +
.../useGetEpisodeByIdInfinite.ts | 81 +
.../useGetEpisodeByIdSuspense.ts | 70 +
.../useGetEpisodesByAnimeId.ts | 76 +
.../useGetEpisodesByAnimeIdInfinite.ts | 81 +
.../useGetEpisodesByAnimeIdSuspense.ts | 70 +
.../useUpdateEpisode.ts | 60 +
.../useUpdateEpisodeOrder.ts | 56 +
.../useAddAnimeIdsToGroup.ts | 55 +
.../hooks/groupControllerHooks/useCreate1.ts | 46 +
.../useDeleteAnimeIdsFromGroup.ts | 60 +
.../groupControllerHooks/useDeleteById2.ts | 48 +
.../groupControllerHooks/useGetByAnimeId.ts | 63 +
.../useGetByAnimeIdInfinite.ts | 68 +
.../useGetByAnimeIdSuspense.ts | 61 +
.../hooks/groupControllerHooks/useGetById1.ts | 60 +
.../useGetById1Infinite.ts | 67 +
.../useGetById1Suspense.ts | 60 +
.../groupControllerHooks/useUpdateById1.ts | 48 +
app/api/generated/hooks/index.ts | 264 ++
.../hooks/titleControllerHooks/useCreate.ts | 46 +
.../titleControllerHooks/useCreateAll.ts | 46 +
.../useDeleteAllByAnimeId.ts | 55 +
.../titleControllerHooks/useDeleteAllById.ts | 48 +
.../titleControllerHooks/useDeleteById1.ts | 48 +
.../useGetAllByAnimeId.ts | 67 +
.../useGetAllByAnimeIdInfinite.ts | 73 +
.../useGetAllByAnimeIdSuspense.ts | 64 +
.../hooks/titleControllerHooks/useGetById.ts | 60 +
.../useGetByIdInfinite.ts | 67 +
.../useGetByIdSuspense.ts | 60 +
.../hooks/titleControllerHooks/useGetPage1.ts | 60 +
.../useGetPage1Infinite.ts | 71 +
.../useGetPage1Suspense.ts | 60 +
.../titleControllerHooks/useUpdateAllById.ts | 48 +
.../titleControllerHooks/useUpdateById2.ts | 48 +
app/api/generated/index.ts | 731 +++++
.../schemas/addAnimeToGroupRequest.json | 1 +
.../generated/schemas/adminEpisodeDTO.json | 1 +
app/api/generated/schemas/animeCardDTO.json | 1 +
app/api/generated/schemas/animeDTO.json | 1 +
app/api/generated/schemas/animeGroupDTO.json | 1 +
.../schemas/animeSearchCriteria.json | 1 +
app/api/generated/schemas/animeTitleDTO.json | 1 +
app/api/generated/schemas/characterDTO.json | 1 +
.../generated/schemas/commentAnswerDTO.json | 1 +
app/api/generated/schemas/commentDTO.json | 1 +
app/api/generated/schemas/complaintDto.json | 1 +
.../schemas/complaintSearchParams.json | 1 +
.../schemas/createAnimeGroupRequest.json | 1 +
.../generated/schemas/createAnimeRequest.json | 1 +
.../schemas/createAnimeTitleRequest.json | 1 +
.../schemas/createCommentRequest.json | 1 +
.../schemas/createComplaintRequest.json | 1 +
.../generated/schemas/createDubRequest.json | 1 +
.../schemas/createEpisodeRequest.json | 1 +
.../generated/schemas/createdAnimeDTO.json | 1 +
.../schemas/deleteAnimeFromGroupRequest.json | 1 +
app/api/generated/schemas/dubDTO.json | 1 +
app/api/generated/schemas/episodeDTO.json | 1 +
app/api/generated/schemas/errorDTO.json | 1 +
.../schemas/increasePopularityRequest.json | 1 +
app/api/generated/schemas/page.json | 1 +
.../generated/schemas/pageAnimeCardDTO.json | 1 +
.../generated/schemas/pageAnimeTitleDTO.json | 1 +
.../generated/schemas/pageComplaintDto.json | 1 +
app/api/generated/schemas/pageable.json | 1 +
app/api/generated/schemas/pageableObject.json | 1 +
app/api/generated/schemas/sortObject.json | 1 +
app/api/generated/schemas/studioDTO.json | 1 +
.../schemas/updateAnimeGroupRequest.json | 1 +
.../generated/schemas/updateAnimeRequest.json | 1 +
.../schemas/updateAnimeTitleRequest.json | 1 +
.../schemas/updateCommentRequest.json | 1 +
.../schemas/updateEpisodeRequest.json | 1 +
.../generated/types/AddAnimeToGroupRequest.ts | 20 +
app/api/generated/types/AdminEpisodeDTO.ts | 54 +
app/api/generated/types/AnimeCardDTO.ts | 79 +
app/api/generated/types/AnimeDTO.ts | 158 +
app/api/generated/types/AnimeGroupDTO.ts | 24 +
.../generated/types/AnimeSearchCriteria.ts | 156 +
app/api/generated/types/AnimeTitleDTO.ts | 51 +
app/api/generated/types/CharacterDTO.ts | 40 +
app/api/generated/types/CommentAnswerDTO.ts | 20 +
app/api/generated/types/CommentDTO.ts | 26 +
app/api/generated/types/ComplaintDto.ts | 72 +
.../generated/types/ComplaintSearchParams.ts | 93 +
.../types/CreateAnimeGroupRequest.ts | 16 +
app/api/generated/types/CreateAnimeRequest.ts | 216 ++
.../types/CreateAnimeTitleRequest.ts | 47 +
.../generated/types/CreateCommentRequest.ts | 37 +
.../generated/types/CreateComplaintRequest.ts | 51 +
app/api/generated/types/CreateDubRequest.ts | 16 +
.../generated/types/CreateEpisodeRequest.ts | 24 +
app/api/generated/types/CreatedAnimeDTO.ts | 141 +
.../types/DeleteAnimeFromGroupRequest.ts | 20 +
app/api/generated/types/DubDTO.ts | 26 +
app/api/generated/types/EpisodeDTO.ts | 46 +
app/api/generated/types/ErrorDTO.ts | 102 +
.../types/IncreasePopularityRequest.ts | 16 +
app/api/generated/types/Page.ts | 59 +
app/api/generated/types/PageAnimeCardDTO.ts | 60 +
app/api/generated/types/PageAnimeTitleDTO.ts | 60 +
app/api/generated/types/PageComplaintDto.ts | 60 +
app/api/generated/types/Pageable.ts | 26 +
app/api/generated/types/PageableObject.ts | 38 +
app/api/generated/types/SortObject.ts | 32 +
app/api/generated/types/StudioDTO.ts | 20 +
.../types/UpdateAnimeGroupRequest.ts | 20 +
app/api/generated/types/UpdateAnimeRequest.ts | 153 +
.../types/UpdateAnimeTitleRequest.ts | 51 +
.../generated/types/UpdateCommentRequest.ts | 22 +
.../generated/types/UpdateEpisodeRequest.ts | 24 +
.../animeControllerController/CreateAnime.ts | 33 +
.../animeControllerController/DeleteById.ts | 29 +
.../animeControllerController/FindById.ts | 37 +
.../animeControllerController/FindSimilar.ts | 40 +
.../animeControllerController/GetAllGenres.ts | 72 +
.../GetAllMpaaRatings.ts | 31 +
.../GetAllStatuses.ts | 29 +
.../animeControllerController/GetAllTypes.ts | 35 +
.../animeControllerController/GetPage.ts | 54 +
.../IncreasePopularity.ts | 26 +
.../animeControllerController/UpdateById.ts | 33 +
.../CreateComment.ts | 38 +
.../DeleteComment.ts | 41 +
.../GetCommentsById.ts | 44 +
.../GetCommentsByUser.ts | 40 +
.../UpdateComment.ts | 38 +
.../CreateComplaint.ts | 33 +
.../GetComplaintById.ts | 37 +
.../GetComplaints.ts | 27 +
.../UpdateComplaintStatus.ts | 55 +
.../AddDubToEpisode.ts | 41 +
.../dubControllerController/CreateDub.ts | 27 +
.../dubControllerController/DeleteDub.ts | 29 +
.../dubControllerController/GetDubById.ts | 37 +
.../GetDubsByEpisode.ts | 31 +
.../RemoveDubFromEpisode.ts | 40 +
.../dubControllerController/UpdateDubName.ts | 45 +
.../episodesControllerController/AddView.ts | 29 +
.../CreateEpisode.ts | 27 +
.../DeleteEpisode.ts | 29 +
.../GetAdminEpisodeById.ts | 31 +
.../GetEpisodeById.ts | 45 +
.../GetEpisodesByAnimeId.ts | 53 +
.../UpdateEpisode.ts | 35 +
.../UpdateEpisodeOrder.ts | 33 +
.../AddAnimeIdsToGroup.ts | 33 +
.../groupControllerController/Create1.ts | 27 +
.../DeleteAnimeIdsFromGroup.ts | 33 +
.../groupControllerController/DeleteById2.ts | 36 +
.../groupControllerController/GetByAnimeId.ts | 37 +
.../groupControllerController/GetById1.ts | 37 +
.../groupControllerController/UpdateById1.ts | 33 +
app/api/generated/types/index.ts | 376 +++
.../types/titleControllerController/Create.ts | 32 +
.../titleControllerController/CreateAll.ts | 32 +
.../DeleteAllByAnimeId.ts | 36 +
.../DeleteAllById.ts | 29 +
.../titleControllerController/DeleteById1.ts | 29 +
.../GetAllByAnimeId.ts | 37 +
.../titleControllerController/GetById.ts | 37 +
.../titleControllerController/GetPage1.ts | 35 +
.../UpdateAllById.ts | 38 +
.../titleControllerController/UpdateById2.ts | 38 +
app/api/helpers/createAxiosInstance.ts | 12 +
app/api/helpers/index.ts | 2 +
app/api/helpers/routesMapping.ts | 19 +
app/api/instances/clientInstance.ts | 5 +
app/api/instances/index.ts | 1 +
app/api/types/index.ts | 1 +
app/api/types/routes.ts | 3 +
app/layout.tsx | 5 +-
app/libs/tanstackQuery.ts | 37 +
app/ui/tanstack/tanstack-provider.tsx | 19 +
db.json | 5 +
kubb.config.ts | 104 +
package.json | 11 +-
pnpm-lock.yaml | 1627 +++++++++-
304 files changed, 18105 insertions(+), 4 deletions(-)
create mode 100644 api-docs.json
create mode 100644 app/(main)/test/Genres/Genres.tsx
create mode 100644 app/(main)/test/Genres/index.ts
create mode 100644 app/(main)/test/page.tsx
create mode 100644 app/api/client/axios.ts
create mode 100644 app/api/client/index.ts
create mode 100644 app/api/generated/clients/axios/animeControllerService/animeControllerService.ts
create mode 100644 app/api/generated/clients/axios/animeControllerService/createAnime.ts
create mode 100644 app/api/generated/clients/axios/animeControllerService/deleteById.ts
create mode 100644 app/api/generated/clients/axios/animeControllerService/findById.ts
create mode 100644 app/api/generated/clients/axios/animeControllerService/findSimilar.ts
create mode 100644 app/api/generated/clients/axios/animeControllerService/getAllGenres.ts
create mode 100644 app/api/generated/clients/axios/animeControllerService/getAllMpaaRatings.ts
create mode 100644 app/api/generated/clients/axios/animeControllerService/getAllStatuses.ts
create mode 100644 app/api/generated/clients/axios/animeControllerService/getAllTypes.ts
create mode 100644 app/api/generated/clients/axios/animeControllerService/getPage.ts
create mode 100644 app/api/generated/clients/axios/animeControllerService/increasePopularity.ts
create mode 100644 app/api/generated/clients/axios/animeControllerService/updateById.ts
create mode 100644 app/api/generated/clients/axios/commentsControllerService/commentsControllerService.ts
create mode 100644 app/api/generated/clients/axios/commentsControllerService/createComment.ts
create mode 100644 app/api/generated/clients/axios/commentsControllerService/deleteComment.ts
create mode 100644 app/api/generated/clients/axios/commentsControllerService/getCommentsById.ts
create mode 100644 app/api/generated/clients/axios/commentsControllerService/getCommentsByUser.ts
create mode 100644 app/api/generated/clients/axios/commentsControllerService/updateComment.ts
create mode 100644 app/api/generated/clients/axios/complaintControllerService/complaintControllerService.ts
create mode 100644 app/api/generated/clients/axios/complaintControllerService/createComplaint.ts
create mode 100644 app/api/generated/clients/axios/complaintControllerService/getComplaintById.ts
create mode 100644 app/api/generated/clients/axios/complaintControllerService/getComplaints.ts
create mode 100644 app/api/generated/clients/axios/complaintControllerService/updateComplaintStatus.ts
create mode 100644 app/api/generated/clients/axios/dubControllerService/addDubToEpisode.ts
create mode 100644 app/api/generated/clients/axios/dubControllerService/createDub.ts
create mode 100644 app/api/generated/clients/axios/dubControllerService/deleteDub.ts
create mode 100644 app/api/generated/clients/axios/dubControllerService/dubControllerService.ts
create mode 100644 app/api/generated/clients/axios/dubControllerService/getDubById.ts
create mode 100644 app/api/generated/clients/axios/dubControllerService/getDubsByEpisode.ts
create mode 100644 app/api/generated/clients/axios/dubControllerService/removeDubFromEpisode.ts
create mode 100644 app/api/generated/clients/axios/dubControllerService/updateDubName.ts
create mode 100644 app/api/generated/clients/axios/episodesControllerService/addView.ts
create mode 100644 app/api/generated/clients/axios/episodesControllerService/createEpisode.ts
create mode 100644 app/api/generated/clients/axios/episodesControllerService/deleteEpisode.ts
create mode 100644 app/api/generated/clients/axios/episodesControllerService/episodesControllerService.ts
create mode 100644 app/api/generated/clients/axios/episodesControllerService/getAdminEpisodeById.ts
create mode 100644 app/api/generated/clients/axios/episodesControllerService/getEpisodeById.ts
create mode 100644 app/api/generated/clients/axios/episodesControllerService/getEpisodesByAnimeId.ts
create mode 100644 app/api/generated/clients/axios/episodesControllerService/updateEpisode.ts
create mode 100644 app/api/generated/clients/axios/episodesControllerService/updateEpisodeOrder.ts
create mode 100644 app/api/generated/clients/axios/groupControllerService/addAnimeIdsToGroup.ts
create mode 100644 app/api/generated/clients/axios/groupControllerService/create1.ts
create mode 100644 app/api/generated/clients/axios/groupControllerService/deleteAnimeIdsFromGroup.ts
create mode 100644 app/api/generated/clients/axios/groupControllerService/deleteById2.ts
create mode 100644 app/api/generated/clients/axios/groupControllerService/getByAnimeId.ts
create mode 100644 app/api/generated/clients/axios/groupControllerService/getById1.ts
create mode 100644 app/api/generated/clients/axios/groupControllerService/groupControllerService.ts
create mode 100644 app/api/generated/clients/axios/groupControllerService/updateById1.ts
create mode 100644 app/api/generated/clients/axios/index.ts
create mode 100644 app/api/generated/clients/axios/operations.ts
create mode 100644 app/api/generated/clients/axios/titleControllerService/create.ts
create mode 100644 app/api/generated/clients/axios/titleControllerService/createAll.ts
create mode 100644 app/api/generated/clients/axios/titleControllerService/deleteAllByAnimeId.ts
create mode 100644 app/api/generated/clients/axios/titleControllerService/deleteAllById.ts
create mode 100644 app/api/generated/clients/axios/titleControllerService/deleteById1.ts
create mode 100644 app/api/generated/clients/axios/titleControllerService/getAllByAnimeId.ts
create mode 100644 app/api/generated/clients/axios/titleControllerService/getById.ts
create mode 100644 app/api/generated/clients/axios/titleControllerService/getPage1.ts
create mode 100644 app/api/generated/clients/axios/titleControllerService/titleControllerService.ts
create mode 100644 app/api/generated/clients/axios/titleControllerService/updateAllById.ts
create mode 100644 app/api/generated/clients/axios/titleControllerService/updateById2.ts
create mode 100644 app/api/generated/hooks/animeControllerHooks/useCreateAnime.ts
create mode 100644 app/api/generated/hooks/animeControllerHooks/useDeleteById.ts
create mode 100644 app/api/generated/hooks/animeControllerHooks/useFindById.ts
create mode 100644 app/api/generated/hooks/animeControllerHooks/useFindByIdInfinite.ts
create mode 100644 app/api/generated/hooks/animeControllerHooks/useFindByIdSuspense.ts
create mode 100644 app/api/generated/hooks/animeControllerHooks/useFindSimilar.ts
create mode 100644 app/api/generated/hooks/animeControllerHooks/useFindSimilarInfinite.ts
create mode 100644 app/api/generated/hooks/animeControllerHooks/useFindSimilarSuspense.ts
create mode 100644 app/api/generated/hooks/animeControllerHooks/useGetAllGenres.ts
create mode 100644 app/api/generated/hooks/animeControllerHooks/useGetAllGenresInfinite.ts
create mode 100644 app/api/generated/hooks/animeControllerHooks/useGetAllGenresSuspense.ts
create mode 100644 app/api/generated/hooks/animeControllerHooks/useGetAllMpaaRatings.ts
create mode 100644 app/api/generated/hooks/animeControllerHooks/useGetAllMpaaRatingsInfinite.ts
create mode 100644 app/api/generated/hooks/animeControllerHooks/useGetAllMpaaRatingsSuspense.ts
create mode 100644 app/api/generated/hooks/animeControllerHooks/useGetAllStatuses.ts
create mode 100644 app/api/generated/hooks/animeControllerHooks/useGetAllStatusesInfinite.ts
create mode 100644 app/api/generated/hooks/animeControllerHooks/useGetAllStatusesSuspense.ts
create mode 100644 app/api/generated/hooks/animeControllerHooks/useGetAllTypes.ts
create mode 100644 app/api/generated/hooks/animeControllerHooks/useGetAllTypesInfinite.ts
create mode 100644 app/api/generated/hooks/animeControllerHooks/useGetAllTypesSuspense.ts
create mode 100644 app/api/generated/hooks/animeControllerHooks/useGetPage.ts
create mode 100644 app/api/generated/hooks/animeControllerHooks/useGetPageInfinite.ts
create mode 100644 app/api/generated/hooks/animeControllerHooks/useGetPageSuspense.ts
create mode 100644 app/api/generated/hooks/animeControllerHooks/useIncreasePopularity.ts
create mode 100644 app/api/generated/hooks/animeControllerHooks/useUpdateById.ts
create mode 100644 app/api/generated/hooks/commentsControllerHooks/useCreateComment.ts
create mode 100644 app/api/generated/hooks/commentsControllerHooks/useDeleteComment.ts
create mode 100644 app/api/generated/hooks/commentsControllerHooks/useGetCommentsById.ts
create mode 100644 app/api/generated/hooks/commentsControllerHooks/useGetCommentsByIdInfinite.ts
create mode 100644 app/api/generated/hooks/commentsControllerHooks/useGetCommentsByIdSuspense.ts
create mode 100644 app/api/generated/hooks/commentsControllerHooks/useGetCommentsByUser.ts
create mode 100644 app/api/generated/hooks/commentsControllerHooks/useGetCommentsByUserInfinite.ts
create mode 100644 app/api/generated/hooks/commentsControllerHooks/useGetCommentsByUserSuspense.ts
create mode 100644 app/api/generated/hooks/commentsControllerHooks/useUpdateComment.ts
create mode 100644 app/api/generated/hooks/complaintControllerHooks/useCreateComplaint.ts
create mode 100644 app/api/generated/hooks/complaintControllerHooks/useGetComplaintById.ts
create mode 100644 app/api/generated/hooks/complaintControllerHooks/useGetComplaintByIdInfinite.ts
create mode 100644 app/api/generated/hooks/complaintControllerHooks/useGetComplaintByIdSuspense.ts
create mode 100644 app/api/generated/hooks/complaintControllerHooks/useGetComplaints.ts
create mode 100644 app/api/generated/hooks/complaintControllerHooks/useUpdateComplaintStatus.ts
create mode 100644 app/api/generated/hooks/dubControllerHooks/useAddDubToEpisode.ts
create mode 100644 app/api/generated/hooks/dubControllerHooks/useCreateDub.ts
create mode 100644 app/api/generated/hooks/dubControllerHooks/useDeleteDub.ts
create mode 100644 app/api/generated/hooks/dubControllerHooks/useGetDubById.ts
create mode 100644 app/api/generated/hooks/dubControllerHooks/useGetDubByIdInfinite.ts
create mode 100644 app/api/generated/hooks/dubControllerHooks/useGetDubByIdSuspense.ts
create mode 100644 app/api/generated/hooks/dubControllerHooks/useGetDubsByEpisode.ts
create mode 100644 app/api/generated/hooks/dubControllerHooks/useGetDubsByEpisodeInfinite.ts
create mode 100644 app/api/generated/hooks/dubControllerHooks/useGetDubsByEpisodeSuspense.ts
create mode 100644 app/api/generated/hooks/dubControllerHooks/useRemoveDubFromEpisode.ts
create mode 100644 app/api/generated/hooks/dubControllerHooks/useUpdateDubName.ts
create mode 100644 app/api/generated/hooks/episodesControllerHooks/useAddView.ts
create mode 100644 app/api/generated/hooks/episodesControllerHooks/useCreateEpisode.ts
create mode 100644 app/api/generated/hooks/episodesControllerHooks/useDeleteEpisode.ts
create mode 100644 app/api/generated/hooks/episodesControllerHooks/useGetAdminEpisodeById.ts
create mode 100644 app/api/generated/hooks/episodesControllerHooks/useGetAdminEpisodeByIdInfinite.ts
create mode 100644 app/api/generated/hooks/episodesControllerHooks/useGetAdminEpisodeByIdSuspense.ts
create mode 100644 app/api/generated/hooks/episodesControllerHooks/useGetEpisodeById.ts
create mode 100644 app/api/generated/hooks/episodesControllerHooks/useGetEpisodeByIdInfinite.ts
create mode 100644 app/api/generated/hooks/episodesControllerHooks/useGetEpisodeByIdSuspense.ts
create mode 100644 app/api/generated/hooks/episodesControllerHooks/useGetEpisodesByAnimeId.ts
create mode 100644 app/api/generated/hooks/episodesControllerHooks/useGetEpisodesByAnimeIdInfinite.ts
create mode 100644 app/api/generated/hooks/episodesControllerHooks/useGetEpisodesByAnimeIdSuspense.ts
create mode 100644 app/api/generated/hooks/episodesControllerHooks/useUpdateEpisode.ts
create mode 100644 app/api/generated/hooks/episodesControllerHooks/useUpdateEpisodeOrder.ts
create mode 100644 app/api/generated/hooks/groupControllerHooks/useAddAnimeIdsToGroup.ts
create mode 100644 app/api/generated/hooks/groupControllerHooks/useCreate1.ts
create mode 100644 app/api/generated/hooks/groupControllerHooks/useDeleteAnimeIdsFromGroup.ts
create mode 100644 app/api/generated/hooks/groupControllerHooks/useDeleteById2.ts
create mode 100644 app/api/generated/hooks/groupControllerHooks/useGetByAnimeId.ts
create mode 100644 app/api/generated/hooks/groupControllerHooks/useGetByAnimeIdInfinite.ts
create mode 100644 app/api/generated/hooks/groupControllerHooks/useGetByAnimeIdSuspense.ts
create mode 100644 app/api/generated/hooks/groupControllerHooks/useGetById1.ts
create mode 100644 app/api/generated/hooks/groupControllerHooks/useGetById1Infinite.ts
create mode 100644 app/api/generated/hooks/groupControllerHooks/useGetById1Suspense.ts
create mode 100644 app/api/generated/hooks/groupControllerHooks/useUpdateById1.ts
create mode 100644 app/api/generated/hooks/index.ts
create mode 100644 app/api/generated/hooks/titleControllerHooks/useCreate.ts
create mode 100644 app/api/generated/hooks/titleControllerHooks/useCreateAll.ts
create mode 100644 app/api/generated/hooks/titleControllerHooks/useDeleteAllByAnimeId.ts
create mode 100644 app/api/generated/hooks/titleControllerHooks/useDeleteAllById.ts
create mode 100644 app/api/generated/hooks/titleControllerHooks/useDeleteById1.ts
create mode 100644 app/api/generated/hooks/titleControllerHooks/useGetAllByAnimeId.ts
create mode 100644 app/api/generated/hooks/titleControllerHooks/useGetAllByAnimeIdInfinite.ts
create mode 100644 app/api/generated/hooks/titleControllerHooks/useGetAllByAnimeIdSuspense.ts
create mode 100644 app/api/generated/hooks/titleControllerHooks/useGetById.ts
create mode 100644 app/api/generated/hooks/titleControllerHooks/useGetByIdInfinite.ts
create mode 100644 app/api/generated/hooks/titleControllerHooks/useGetByIdSuspense.ts
create mode 100644 app/api/generated/hooks/titleControllerHooks/useGetPage1.ts
create mode 100644 app/api/generated/hooks/titleControllerHooks/useGetPage1Infinite.ts
create mode 100644 app/api/generated/hooks/titleControllerHooks/useGetPage1Suspense.ts
create mode 100644 app/api/generated/hooks/titleControllerHooks/useUpdateAllById.ts
create mode 100644 app/api/generated/hooks/titleControllerHooks/useUpdateById2.ts
create mode 100644 app/api/generated/index.ts
create mode 100644 app/api/generated/schemas/addAnimeToGroupRequest.json
create mode 100644 app/api/generated/schemas/adminEpisodeDTO.json
create mode 100644 app/api/generated/schemas/animeCardDTO.json
create mode 100644 app/api/generated/schemas/animeDTO.json
create mode 100644 app/api/generated/schemas/animeGroupDTO.json
create mode 100644 app/api/generated/schemas/animeSearchCriteria.json
create mode 100644 app/api/generated/schemas/animeTitleDTO.json
create mode 100644 app/api/generated/schemas/characterDTO.json
create mode 100644 app/api/generated/schemas/commentAnswerDTO.json
create mode 100644 app/api/generated/schemas/commentDTO.json
create mode 100644 app/api/generated/schemas/complaintDto.json
create mode 100644 app/api/generated/schemas/complaintSearchParams.json
create mode 100644 app/api/generated/schemas/createAnimeGroupRequest.json
create mode 100644 app/api/generated/schemas/createAnimeRequest.json
create mode 100644 app/api/generated/schemas/createAnimeTitleRequest.json
create mode 100644 app/api/generated/schemas/createCommentRequest.json
create mode 100644 app/api/generated/schemas/createComplaintRequest.json
create mode 100644 app/api/generated/schemas/createDubRequest.json
create mode 100644 app/api/generated/schemas/createEpisodeRequest.json
create mode 100644 app/api/generated/schemas/createdAnimeDTO.json
create mode 100644 app/api/generated/schemas/deleteAnimeFromGroupRequest.json
create mode 100644 app/api/generated/schemas/dubDTO.json
create mode 100644 app/api/generated/schemas/episodeDTO.json
create mode 100644 app/api/generated/schemas/errorDTO.json
create mode 100644 app/api/generated/schemas/increasePopularityRequest.json
create mode 100644 app/api/generated/schemas/page.json
create mode 100644 app/api/generated/schemas/pageAnimeCardDTO.json
create mode 100644 app/api/generated/schemas/pageAnimeTitleDTO.json
create mode 100644 app/api/generated/schemas/pageComplaintDto.json
create mode 100644 app/api/generated/schemas/pageable.json
create mode 100644 app/api/generated/schemas/pageableObject.json
create mode 100644 app/api/generated/schemas/sortObject.json
create mode 100644 app/api/generated/schemas/studioDTO.json
create mode 100644 app/api/generated/schemas/updateAnimeGroupRequest.json
create mode 100644 app/api/generated/schemas/updateAnimeRequest.json
create mode 100644 app/api/generated/schemas/updateAnimeTitleRequest.json
create mode 100644 app/api/generated/schemas/updateCommentRequest.json
create mode 100644 app/api/generated/schemas/updateEpisodeRequest.json
create mode 100644 app/api/generated/types/AddAnimeToGroupRequest.ts
create mode 100644 app/api/generated/types/AdminEpisodeDTO.ts
create mode 100644 app/api/generated/types/AnimeCardDTO.ts
create mode 100644 app/api/generated/types/AnimeDTO.ts
create mode 100644 app/api/generated/types/AnimeGroupDTO.ts
create mode 100644 app/api/generated/types/AnimeSearchCriteria.ts
create mode 100644 app/api/generated/types/AnimeTitleDTO.ts
create mode 100644 app/api/generated/types/CharacterDTO.ts
create mode 100644 app/api/generated/types/CommentAnswerDTO.ts
create mode 100644 app/api/generated/types/CommentDTO.ts
create mode 100644 app/api/generated/types/ComplaintDto.ts
create mode 100644 app/api/generated/types/ComplaintSearchParams.ts
create mode 100644 app/api/generated/types/CreateAnimeGroupRequest.ts
create mode 100644 app/api/generated/types/CreateAnimeRequest.ts
create mode 100644 app/api/generated/types/CreateAnimeTitleRequest.ts
create mode 100644 app/api/generated/types/CreateCommentRequest.ts
create mode 100644 app/api/generated/types/CreateComplaintRequest.ts
create mode 100644 app/api/generated/types/CreateDubRequest.ts
create mode 100644 app/api/generated/types/CreateEpisodeRequest.ts
create mode 100644 app/api/generated/types/CreatedAnimeDTO.ts
create mode 100644 app/api/generated/types/DeleteAnimeFromGroupRequest.ts
create mode 100644 app/api/generated/types/DubDTO.ts
create mode 100644 app/api/generated/types/EpisodeDTO.ts
create mode 100644 app/api/generated/types/ErrorDTO.ts
create mode 100644 app/api/generated/types/IncreasePopularityRequest.ts
create mode 100644 app/api/generated/types/Page.ts
create mode 100644 app/api/generated/types/PageAnimeCardDTO.ts
create mode 100644 app/api/generated/types/PageAnimeTitleDTO.ts
create mode 100644 app/api/generated/types/PageComplaintDto.ts
create mode 100644 app/api/generated/types/Pageable.ts
create mode 100644 app/api/generated/types/PageableObject.ts
create mode 100644 app/api/generated/types/SortObject.ts
create mode 100644 app/api/generated/types/StudioDTO.ts
create mode 100644 app/api/generated/types/UpdateAnimeGroupRequest.ts
create mode 100644 app/api/generated/types/UpdateAnimeRequest.ts
create mode 100644 app/api/generated/types/UpdateAnimeTitleRequest.ts
create mode 100644 app/api/generated/types/UpdateCommentRequest.ts
create mode 100644 app/api/generated/types/UpdateEpisodeRequest.ts
create mode 100644 app/api/generated/types/animeControllerController/CreateAnime.ts
create mode 100644 app/api/generated/types/animeControllerController/DeleteById.ts
create mode 100644 app/api/generated/types/animeControllerController/FindById.ts
create mode 100644 app/api/generated/types/animeControllerController/FindSimilar.ts
create mode 100644 app/api/generated/types/animeControllerController/GetAllGenres.ts
create mode 100644 app/api/generated/types/animeControllerController/GetAllMpaaRatings.ts
create mode 100644 app/api/generated/types/animeControllerController/GetAllStatuses.ts
create mode 100644 app/api/generated/types/animeControllerController/GetAllTypes.ts
create mode 100644 app/api/generated/types/animeControllerController/GetPage.ts
create mode 100644 app/api/generated/types/animeControllerController/IncreasePopularity.ts
create mode 100644 app/api/generated/types/animeControllerController/UpdateById.ts
create mode 100644 app/api/generated/types/commentsControllerController/CreateComment.ts
create mode 100644 app/api/generated/types/commentsControllerController/DeleteComment.ts
create mode 100644 app/api/generated/types/commentsControllerController/GetCommentsById.ts
create mode 100644 app/api/generated/types/commentsControllerController/GetCommentsByUser.ts
create mode 100644 app/api/generated/types/commentsControllerController/UpdateComment.ts
create mode 100644 app/api/generated/types/complaintControllerController/CreateComplaint.ts
create mode 100644 app/api/generated/types/complaintControllerController/GetComplaintById.ts
create mode 100644 app/api/generated/types/complaintControllerController/GetComplaints.ts
create mode 100644 app/api/generated/types/complaintControllerController/UpdateComplaintStatus.ts
create mode 100644 app/api/generated/types/dubControllerController/AddDubToEpisode.ts
create mode 100644 app/api/generated/types/dubControllerController/CreateDub.ts
create mode 100644 app/api/generated/types/dubControllerController/DeleteDub.ts
create mode 100644 app/api/generated/types/dubControllerController/GetDubById.ts
create mode 100644 app/api/generated/types/dubControllerController/GetDubsByEpisode.ts
create mode 100644 app/api/generated/types/dubControllerController/RemoveDubFromEpisode.ts
create mode 100644 app/api/generated/types/dubControllerController/UpdateDubName.ts
create mode 100644 app/api/generated/types/episodesControllerController/AddView.ts
create mode 100644 app/api/generated/types/episodesControllerController/CreateEpisode.ts
create mode 100644 app/api/generated/types/episodesControllerController/DeleteEpisode.ts
create mode 100644 app/api/generated/types/episodesControllerController/GetAdminEpisodeById.ts
create mode 100644 app/api/generated/types/episodesControllerController/GetEpisodeById.ts
create mode 100644 app/api/generated/types/episodesControllerController/GetEpisodesByAnimeId.ts
create mode 100644 app/api/generated/types/episodesControllerController/UpdateEpisode.ts
create mode 100644 app/api/generated/types/episodesControllerController/UpdateEpisodeOrder.ts
create mode 100644 app/api/generated/types/groupControllerController/AddAnimeIdsToGroup.ts
create mode 100644 app/api/generated/types/groupControllerController/Create1.ts
create mode 100644 app/api/generated/types/groupControllerController/DeleteAnimeIdsFromGroup.ts
create mode 100644 app/api/generated/types/groupControllerController/DeleteById2.ts
create mode 100644 app/api/generated/types/groupControllerController/GetByAnimeId.ts
create mode 100644 app/api/generated/types/groupControllerController/GetById1.ts
create mode 100644 app/api/generated/types/groupControllerController/UpdateById1.ts
create mode 100644 app/api/generated/types/index.ts
create mode 100644 app/api/generated/types/titleControllerController/Create.ts
create mode 100644 app/api/generated/types/titleControllerController/CreateAll.ts
create mode 100644 app/api/generated/types/titleControllerController/DeleteAllByAnimeId.ts
create mode 100644 app/api/generated/types/titleControllerController/DeleteAllById.ts
create mode 100644 app/api/generated/types/titleControllerController/DeleteById1.ts
create mode 100644 app/api/generated/types/titleControllerController/GetAllByAnimeId.ts
create mode 100644 app/api/generated/types/titleControllerController/GetById.ts
create mode 100644 app/api/generated/types/titleControllerController/GetPage1.ts
create mode 100644 app/api/generated/types/titleControllerController/UpdateAllById.ts
create mode 100644 app/api/generated/types/titleControllerController/UpdateById2.ts
create mode 100644 app/api/helpers/createAxiosInstance.ts
create mode 100644 app/api/helpers/index.ts
create mode 100644 app/api/helpers/routesMapping.ts
create mode 100644 app/api/instances/clientInstance.ts
create mode 100644 app/api/instances/index.ts
create mode 100644 app/api/types/index.ts
create mode 100644 app/api/types/routes.ts
create mode 100644 app/libs/tanstackQuery.ts
create mode 100644 app/ui/tanstack/tanstack-provider.tsx
create mode 100644 kubb.config.ts
diff --git a/api-docs.json b/api-docs.json
new file mode 100644
index 00000000..216e1a0b
--- /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 00000000..6df6bc36
--- /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 00000000..67bad595
--- /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 00000000..702f13a1
--- /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 00000000..747ce660
--- /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 00000000..4b6fd951
--- /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 00000000..bb2a6a0c
--- /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 00000000..9462c51f
--- /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 00000000..b636a25d
--- /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 00000000..2daa7e09
--- /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 00000000..fb0dca30
--- /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 00000000..029a6b9a
--- /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 00000000..f08acdbf
--- /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 00000000..f2f05c6a
--- /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 00000000..f6f2a6fd
--- /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 00000000..8ac676c1
--- /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 00000000..88c7ab97
--- /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 00000000..e8c57508
--- /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 00000000..ed9c09d1
--- /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 00000000..4931edf0
--- /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 00000000..dd0905dd
--- /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 00000000..11cd7ddd
--- /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 00000000..5c403c6a
--- /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 00000000..7821cdad
--- /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 00000000..5914c4a4
--- /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 00000000..4c4b42f7
--- /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 00000000..a5defaf6
--- /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 00000000..9e12ab96
--- /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 00000000..7bcbc71e
--- /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 00000000..42e003c8
--- /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 00000000..adb28f5d
--- /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 00000000..331937ea
--- /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 00000000..3597e428
--- /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 00000000..312512a5
--- /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 00000000..901adcf3
--- /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 00000000..17b17f75
--- /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 00000000..28bda517
--- /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 00000000..549837d9
--- /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 00000000..5aaf8a06
--- /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 00000000..6a4c2b0d
--- /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 00000000..b95ca654
--- /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 00000000..947777c2
--- /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 00000000..28f75ee1
--- /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 00000000..1b4f851c
--- /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 00000000..0f86cee3
--- /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 00000000..332fd669
--- /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 00000000..a18ba8c2
--- /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 00000000..25825fd6
--- /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 00000000..43859ac1
--- /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 00000000..093f4d49
--- /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 00000000..0acc97cf
--- /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 00000000..8f4e2b5b
--- /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 00000000..e73d21f5
--- /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 00000000..bae77f08
--- /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 00000000..1b84f075
--- /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 00000000..ac60ffe1
--- /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 00000000..dc701cd6
--- /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 00000000..0b985b99
--- /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 00000000..c97ea0d5
--- /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 00000000..e9488aef
--- /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 00000000..92ea4e8d
--- /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 00000000..9ae3b4e3
--- /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 00000000..0a6be4fb
--- /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 00000000..29e404f5
--- /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 00000000..73e378bd
--- /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 00000000..3a822a2e
--- /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 00000000..e2c85a1d
--- /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 00000000..00317a0b
--- /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 00000000..b6dabba7
--- /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 00000000..d6d99391
--- /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 00000000..8949c1e3
--- /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 00000000..42bb6659
--- /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 00000000..08d17052
--- /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 00000000..1964e6d8
--- /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 00000000..c3fcce7a
--- /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 00000000..3bc5fab0
--- /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 00000000..80e66693
--- /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 00000000..316dc519
--- /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 00000000..f23fabc1
--- /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 00000000..d7291739
--- /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 00000000..e888eb4e
--- /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 00000000..528ed0bf
--- /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 00000000..175b1468
--- /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 00000000..d5d9a42e
--- /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 00000000..1a4973cf
--- /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 00000000..9f4ce501
--- /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 00000000..789f4d52
--- /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 00000000..d46865ab
--- /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 00000000..6f888f73
--- /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