Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2,719 changes: 2,719 additions & 0 deletions api-docs.json

Large diffs are not rendered by default.

27 changes: 27 additions & 0 deletions app/(main)/test/Genres/Genres.tsx
Original file line number Diff line number Diff line change
@@ -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 (
<div>
{genres.map((genre) => (
/* @ts-expect-error */
<div key={genre.id}>{genre.value}</div>
))}
</div>
);
};
1 change: 1 addition & 0 deletions app/(main)/test/Genres/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
export * from "./Genres";
35 changes: 35 additions & 0 deletions app/(main)/test/page.tsx
Original file line number Diff line number Diff line change
@@ -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 (
<HydrationBoundary state={dehydrate(queryClient)}>
<Genres />
</HydrationBoundary>
);
};

const Page: NextPage = () => {
return (
<Suspense fallback={<p>Загрузка...</p>}>
<PageSuspense />
</Suspense>
);
};

export default Page;
44 changes: 44 additions & 0 deletions app/api/client/axios.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
import { AxiosError, AxiosRequestConfig, AxiosResponse } from 'axios'

import { clientInstance } from '../instances'

export type ResponseErrorConfig<T> = AxiosError<T>

export type RequestConfig<TData = unknown> = {
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<TData = unknown> = {
data: TData
status: number
statusText: string
headers?: AxiosResponse['headers']
}

export const client = async <
TData,
TError = unknown,
TVariables = unknown,
>(
config: RequestConfig<TVariables>
): Promise<ResponseConfig<TData>> => {
const promise = clientInstance
.request<TVariables, ResponseConfig<TData>>({ ...config })
.catch((e: AxiosError<TError>) => {
throw e
})

return promise
}
2 changes: 2 additions & 0 deletions app/api/client/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
export { client as default } from './axios'
export * from './axios'
Original file line number Diff line number Diff line change
@@ -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,
}
}
Original file line number Diff line number Diff line change
@@ -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<RequestConfig<CreateAnimeMutationRequest>> & { client?: typeof fetch } = {},
) {
const { client: request = fetch, ...requestConfig } = config

const requestData = data
const res = await request<CreateAnimeMutationResponse, ResponseErrorConfig<CreateAnime400>, CreateAnimeMutationRequest>({
method: 'POST',
url: getCreateAnimeUrl().toString(),
data: requestData,
...requestConfig,
})
return res.data
}
Original file line number Diff line number Diff line change
@@ -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<RequestConfig> & { client?: typeof fetch } = {}) {
const { client: request = fetch, ...requestConfig } = config

const res = await request<DeleteByIdMutationResponse, ResponseErrorConfig<Error>, unknown>({
method: 'DELETE',
url: getDeleteByIdUrl(id).toString(),
...requestConfig,
})
return res.data
}
32 changes: 32 additions & 0 deletions app/api/generated/clients/axios/animeControllerService/findById.ts
Original file line number Diff line number Diff line change
@@ -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<RequestConfig> & { client?: typeof fetch } = {}) {
const { client: request = fetch, ...requestConfig } = config

const res = await request<FindByIdQueryResponse, ResponseErrorConfig<FindById404>, unknown>({
method: 'GET',
url: getFindByIdUrl(id).toString(),
...requestConfig,
})
return res.data
}
Original file line number Diff line number Diff line change
@@ -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<RequestConfig> & { client?: typeof fetch } = {},
) {
const { client: request = fetch, ...requestConfig } = config

const res = await request<FindSimilarQueryResponse, ResponseErrorConfig<Error>, unknown>({
method: 'GET',
url: getFindSimilarUrl(animeId).toString(),
params,
...requestConfig,
})
return res.data
}
Original file line number Diff line number Diff line change
@@ -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<RequestConfig> & { client?: typeof fetch } = {}) {
const { client: request = fetch, ...requestConfig } = config

const res = await request<GetAllGenresQueryResponse, ResponseErrorConfig<Error>, unknown>({
method: 'GET',
url: getGetAllGenresUrl().toString(),
...requestConfig,
})
return res.data
}
Original file line number Diff line number Diff line change
@@ -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<RequestConfig> & { client?: typeof fetch } = {}) {
const { client: request = fetch, ...requestConfig } = config

const res = await request<GetAllMpaaRatingsQueryResponse, ResponseErrorConfig<Error>, unknown>({
method: 'GET',
url: getGetAllMpaaRatingsUrl().toString(),
...requestConfig,
})
return res.data
}
Loading
Loading