import { z } from "zod" import type { DiaryEntryDto, Paginated } from "./common" import { diaryEntryDtoSchema, movieDtoSchema, paginatedSchema, reviewDtoSchema } from "./common" import { del, get, post } from "./client" export const diaryQueryParamsSchema = z.object({ limit: z.number().optional(), offset: z.number().optional(), sort_by: z.string().optional(), movie_id: z.string().uuid().optional(), }) export type DiaryQueryParams = z.infer export const diaryResponseSchema = paginatedSchema(diaryEntryDtoSchema) export type DiaryResponse = Paginated export const logReviewRequestSchema = z.object({ external_metadata_id: z.string().optional(), manual_title: z.string().optional(), manual_release_year: z.number().optional(), manual_director: z.string().optional(), rating: z.number(), comment: z.string().optional(), watched_at: z.string(), }) export type LogReviewRequest = z.infer export const feedEntryDtoSchema = z.object({ movie: movieDtoSchema, review: reviewDtoSchema, user_id: z.string().uuid(), user_email: z.string(), user_display_name: z.string(), }) export type FeedEntryDto = z.infer export const activityFeedQueryParamsSchema = z.object({ limit: z.number().optional(), offset: z.number().optional(), sort_by: z.string().optional(), }) export type ActivityFeedQueryParams = z.infer export const activityFeedResponseSchema = paginatedSchema(feedEntryDtoSchema) export type ActivityFeedResponse = Paginated export const exportQueryParamsSchema = z.object({ format: z.string().optional(), }) export type ExportQueryParams = z.infer export function getDiary(params?: DiaryQueryParams) { return get("/diary", params) } export function logReview(data: LogReviewRequest) { return post("/reviews", data) } export function deleteReview(id: string) { return del(`/reviews/${id}`) } export function getActivityFeed(params?: ActivityFeedQueryParams) { return get("/activity-feed", params) } export function exportDiary(params?: ExportQueryParams) { return get("/diary/export", params) }