import type { ICardInfo, IModelCard, IModelFilterPayload, RequestPagination, PaginatedResponse, IModelTag } from '../../types'; import type { Language } from '../../runtime'; import { ApiHelper, toHeaderLanguage } from '../../runtime'; /** Сервис для работы с API моделей */ export class ModelsApiService { static async getModelsSearch( pagination: RequestPagination, lang: Language, phrase: string, niche? = NicheHelper.getSiteDefaultNiche(), ): Promise> { return await ApiHelper.fetch( '/models/get-models-by-phrase/', { method: 'GET', headers: { 'X-Niche': niche, 'X-Language': toHeaderLanguage(lang), 'X-Cache-Time': 259200, 'Content-Type': 'application/json', 'Access-Control-Allow-Origin': '*', }, params: { ...pagination, query: phrase, }, }, useRuntimeConfig(), ); } static getModelsSearchFiltered(phrase: string) { return async ( lang: Language, pagination: RequestPagination, order: string, form: IModelFilterPayload[], niche = NicheHelper.getSiteDefaultNiche(), ): Promise> => { return await ApiHelper.fetch( '/models/get-models-by-phrase/', { method: 'GET', headers: { 'X-Niche': niche, 'X-Language': toHeaderLanguage(lang), 'X-Cache-Time': 259200, 'Content-Type': 'application/json', }, params: { ...pagination, order, query: phrase, }, }, useRuntimeConfig(), ); }; } static async getRelatedModels( model: string, limit: number, max_sampling_limit: number, lang: Language, cacheId = 'default', niche? = NicheHelper.getSiteDefaultNiche(), ): Promise> { return await ApiHelper.fetch( '/models/related', { method: 'GET', headers: { 'X-Niche': niche, 'X-Language': toHeaderLanguage(lang), 'X-Cache-Extra': cacheId, 'X-Cache-Time': 259200, 'Content-Type': 'application/json', 'Access-Control-Allow-Origin': '*', }, params: { model, limit, max_sampling_limit, }, }, useRuntimeConfig(), ); } static async getModelsByName( lang: Language, slug: string, niche? = NicheHelper.getSiteDefaultNiche(), ): Promise { return await ApiHelper.fetch( '/models/get-info-by-name/', { method: 'GET', headers: { 'X-Niche': niche, 'X-Language': toHeaderLanguage(lang), 'X-Cache-Time': 259200, 'Content-Type': 'application/json', 'Access-Control-Allow-Origin': '*', }, params: { model: slug, }, }, useRuntimeConfig(), ); } static async getListByNiche( lang: Language, pagination: RequestPagination, order: string, form: IModelFilterPayload[], niche? = NicheHelper.getSiteDefaultNiche(), ): Promise> { return await ApiHelper.fetch( '/models/list-by-niche', { method: 'POST', headers: { 'X-Niche': niche, 'X-Language': toHeaderLanguage(lang), 'X-Cache-Time': 259200, 'Content-Type': 'application/json', 'Access-Control-Allow-Origin': '*', }, params: { ...pagination, order, }, body: { filters: form } }, useRuntimeConfig(), ); } static async getListByNicheAndLetter( lang: Language, pagination: RequestPagination, order: string, form: IModelFilterPayload[], letter: string, niche? = NicheHelper.getSiteDefaultNiche(), ): Promise> { return await ApiHelper.fetch( '/models/list-by-niche', { method: 'POST', headers: { 'X-Niche': niche, 'X-Language': toHeaderLanguage(lang), 'X-Cache-Time': 259200, 'Content-Type': 'application/json', 'Access-Control-Allow-Origin': '*', }, params: { ...pagination, order, letter, }, body: { filters: form } }, useRuntimeConfig(), ); } static async getTop( limit: number, max_sampling_limit: number, lang: Language, cacheId = 'default', niche? = NicheHelper.getSiteDefaultNiche(), ): Promise> { return await ApiHelper.fetch( '/models/top', { method: 'GET', headers: { 'X-Niche': niche, 'X-Language': toHeaderLanguage(lang), 'X-Cache-Extra': cacheId, 'X-Cache-Time': 259200, 'Content-Type': 'application/json', 'Access-Control-Allow-Origin': '*', }, params: { limit, max_sampling_limit, }, }, useRuntimeConfig(), ); } static async getListByCategory( category: string, limit: number, lang: Language, niche? = NicheHelper.getSiteDefaultNiche(), ): Promise> { return await ApiHelper.fetch( `/models/list-by-category/${category}`, { method: 'GET', headers: { 'X-Niche': niche, 'X-Language': toHeaderLanguage(lang), 'X-Cache-Time': 259200, 'Content-Type': 'application/json', 'Access-Control-Allow-Origin': '*', }, params: { limit, }, }, useRuntimeConfig(), ); } static async getListByChannel( channel: string, limit: number, lang: Language, niche? = NicheHelper.getSiteDefaultNiche(), ): Promise> { return await ApiHelper.fetch( `/models/list-by-channel/${channel}`, { method: 'GET', headers: { 'X-Niche': niche, 'X-Language': toHeaderLanguage(lang), 'X-Cache-Time': 259200, 'Content-Type': 'application/json', 'Access-Control-Allow-Origin': '*', }, params: { limit, }, }, useRuntimeConfig(), ); } static async getListByTag( tag: string, limit: number, lang: Language, niche? = NicheHelper.getSiteDefaultNiche(), ): Promise> { return await ApiHelper.fetch( `/models/list-by-tag/${tag}`, { method: 'GET', headers: { 'X-Niche': niche, 'X-Language': toHeaderLanguage(lang), 'X-Cache-Time': 259200, 'Content-Type': 'application/json', 'Access-Control-Allow-Origin': '*', }, params: { limit, }, }, useRuntimeConfig(), ); } /** Сколько всего моделей в нише — для счётчиков в интерфейсе. */ static async getCount( lang: Language, niche? = NicheHelper.getSiteDefaultNiche(), ): Promise<{ total: number }> { return await ApiHelper.fetch( '/models/count', { method: 'GET', headers: { 'X-Niche': niche, 'X-Language': toHeaderLanguage(lang), 'X-Cache-Time': 3600, 'Content-Type': 'application/json', }, }, useRuntimeConfig(), ); } static async getTopChips( limit: number, max_sampling_limit: number, lang: Language, cacheId = 'default', niche? = NicheHelper.getSiteDefaultNiche(), ): Promise> { return await ApiHelper.fetch( '/models/get-top-chips', { method: 'GET', headers: { 'X-Niche': niche, 'X-Language': toHeaderLanguage(lang), 'X-Cache-Extra': cacheId, 'X-Cache-Time': 259200, 'Content-Type': 'application/json', 'Access-Control-Allow-Origin': '*', }, params: { limit, max_sampling_limit, }, }, useRuntimeConfig(), ); } }