import { z } from 'zod' import { categoryResponseSchema } from '~/apis/common/get-categories' import { tagResponseSchema } from '~/apis/common/get-tags' import { HttpServer, type THttpServer } from '~/libs/http-server' const authorSchema = z.object({ id: z.string(), name: z.string(), profile_picture: z.string(), }) export const newsResponseSchema = z.object({ id: z.string(), title: z.string(), content: z.string(), categories: z.array(categoryResponseSchema), tags: z.array(tagResponseSchema), is_premium: z.boolean(), slug: z.string(), featured_image: z.string(), author_id: z.string(), live_at: z.string(), created_at: z.string(), updated_at: z.string(), author: authorSchema, }) const dataResponseSchema = z.object({ data: z.array(newsResponseSchema), }) export type TNewsResponse = z.infer export type TAuthorResponse = z.infer type TParameters = { categories?: string[] tags?: string[] active?: boolean limit?: number page?: number } & THttpServer export const getNews = async (parameters?: TParameters) => { const { categories, tags, active, limit, page, ...restParameters } = parameters || {} try { const { data } = await HttpServer(restParameters).get(`/api/news`, { params: { ...(categories && { categories: categories.join('+') }), ...(tags && { tags: tags.join('+') }), ...(active && { active }), ...(limit && { limit }), ...(page && { page }), }, }) return dataResponseSchema.parse(data) } catch (error) { // eslint-disable-next-line unicorn/no-useless-promise-resolve-reject return Promise.reject(error) } }