import { request, type Page } from './client'; import type { Manga } from './client'; export type Author = { id: string; name: string; created_at: string; }; /** Returned by `GET /v1/authors/:id` — adds the count of attached mangas. */ export type AuthorWithCount = Author & { manga_count: number; }; export type AuthorMangasPage = { items: Manga[]; page: Page; }; export type ListAuthorsOptions = { search?: string; limit?: number; offset?: number; }; export type ListAuthorMangasOptions = { limit?: number; offset?: number; }; /** Autocomplete for author pickers. Server sorts by trigram similarity. */ export async function listAuthors(opts: ListAuthorsOptions = {}): Promise { const params = new URLSearchParams(); if (opts.search) params.set('search', opts.search); if (opts.limit != null) params.set('limit', String(opts.limit)); if (opts.offset != null) params.set('offset', String(opts.offset)); const qs = params.toString(); return request(`/v1/authors${qs ? `?${qs}` : ''}`); } export async function getAuthor(id: string): Promise { return request(`/v1/authors/${encodeURIComponent(id)}`); } export async function listAuthorMangas( id: string, opts: ListAuthorMangasOptions = {} ): Promise { const params = new URLSearchParams(); if (opts.limit != null) params.set('limit', String(opts.limit)); if (opts.offset != null) params.set('offset', String(opts.offset)); const qs = params.toString(); return request( `/v1/authors/${encodeURIComponent(id)}/mangas${qs ? `?${qs}` : ''}` ); }