import type { IBlog } from '@/database/blog/blog.types'; import type { ICategory, IParamsDirectus } from '@/database/baseTypes'; import { POST_STATUS } from '@/utils/constants'; import { directus } from '@/plugins/axios'; const postPreviewFields = 'slug,title,previewText,author.*,time,category.*,imagePreviewFile,imagePreview,date'; async function getPostsPreview({ start, limit, categorySlug, }: IBlog.GetPostsParams): Promise { const params: IParamsDirectus = { sort: '-date', 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, }, }, }; const { data: posts } = await directus.get( 'blog-posts', { params, }, ); return posts.data; } async function getPost({ slug, categorySlug, }: IBlog.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('blog-posts', { params, }); const [post] = posts.data; return post; } async function getCategories(): Promise { const params: IParamsDirectus = { sort: 'name', fields: '*.*', }; const { data: categories } = await directus.get( 'blog_categories', { params }, ); return categories.data; } export const BlogGateway = { getPost, getPostsPreview, getCategories, };