import { CaseStudiesInterface } from '@/database/case-studies/caseStudies.types'; import { ICategory, IParamsDirectus } from '@/database/baseTypes'; import { directus } from '@/plugins/axios/'; import { POST_STATUS } from '@/utils/constants'; const postPreviewFields = 'results,category.*,industry.*,slug,customer.*,title,summary,takeaways,previewText'; async function getPost({ slug, categorySlug, }: CaseStudiesInterface.GetPostsParams): Promise { const params: IParamsDirectus = { fields: '*.*.*.*', filter: { status: POST_STATUS.published, }, }; if (slug) params.filter = { ...params.filter, slug, }; if (categorySlug) params.filter = { ...params.filter, ...{ category: { slug: categorySlug, }, }, }; const { data: posts } = await directus.get( 'case-studies-posts', { params, }, ); const [post] = posts.data; return post; } async function getPostsPreview({ start, limit, categorySlug, industrySlug, fields, }: CaseStudiesInterface.GetPostsParams): Promise< CaseStudiesInterface.PostPreview[] > { const params: IParamsDirectus = { sort: '-date', fields: fields || postPreviewFields, filter: { status: POST_STATUS.published, }, }; if (start) params.offset = start; if (limit) params.limit = limit; if (categorySlug) params.filter = { ...params.filter, ...{ category: { slug: categorySlug, }, }, }; if (industrySlug) params.filter = { ...params.filter, ...{ industry: { slug: industrySlug, }, }, }; const { data: posts } = await directus.get< CaseStudiesInterface.PostPreview[] >('case-studies-posts', { params, }); return posts.data; } async function getCategories(): Promise { const params: IParamsDirectus = { fields: '*.*', }; const { data: categories } = await directus.get( 'case-studies-categories', { params }, ); return categories.data; } async function getIndustries(): Promise { const params: IParamsDirectus = { fields: '*.*', }; const { data: industries } = await directus.get( 'case-studies-industries', { params }, ); return industries.data; } async function getPostsCount({ categorySlug, industrySlug, }: CaseStudiesInterface.GetPostsParams): Promise { const params: IParamsDirectus = { meta: '*', limit: 0, filter: { status: POST_STATUS.published, }, }; if (categorySlug) params.filter = { ...params.filter, ...{ category: { slug: categorySlug, }, }, }; if (industrySlug) params.filter = { ...params.filter, ...{ industry: { slug: industrySlug, }, }, }; const { data: postsCount } = await directus.get( 'case-studies-posts', { params, }, ); return postsCount?.meta?.filter_count || 0; } export const CaseStudiesGateway = { getIndustries, getCategories, getPostsPreview, getPost, getPostsCount, };