import type { Media, PaginatedResponse, Person, PersonPermission, } from "@/domain/types"; import apiClient from "@/services/api-client"; import { processMediaUrls } from "./media-service"; // We can import the helper // --- Types --- export type CreatePersonPayload = { name: string; }; export type UpdatePersonPayload = { name: string; }; export type SharePersonPayload = { target_user_id: string; permission: PersonPermission; }; export type UnsharePersonPayload = { target_user_id: string; }; export type MergePersonPayload = { source_person_id: string; }; export type SetPersonThumbnailPayload = { face_region_id: string; }; export type ListPeopleParams = { personId: string, page: number; limit: number; }; // --- Service Functions --- export const listPeople = async (): Promise => { const { data } = await apiClient.get("/people"); return data; }; export const getPerson = async (personId: string): Promise => { const { data } = await apiClient.get(`/people/${personId}`); return data; }; export const createPerson = async ( payload: CreatePersonPayload, ): Promise => { const { data } = await apiClient.post("/people", payload); return data; }; export const updatePerson = async ( personId: string, payload: UpdatePersonPayload, ): Promise => { const { data } = await apiClient.put(`/people/${personId}`, payload); return data; }; export const deletePerson = async (personId: string): Promise => { await apiClient.delete(`/people/${personId}`); }; export const listMediaForPerson = async ( { personId, page, limit }: ListPeopleParams ): Promise> => { const { data } = await apiClient.get(`/people/${personId}/media`, { params: { page, limit }, }); data.data = data.data.map(processMediaUrls); return data; }; export const sharePerson = async ( personId: string, payload: SharePersonPayload, ): Promise => { await apiClient.post(`/people/${personId}/share`, payload); }; export const unsharePerson = async ( personId: string, payload: UnsharePersonPayload, ): Promise => { await apiClient.delete(`/people/${personId}/share`, { data: payload }); }; export const mergePerson = async ( targetPersonId: string, payload: MergePersonPayload, ): Promise => { await apiClient.post(`/people/${targetPersonId}/merge`, payload); }; export const setPersonThumbnail = async ( personId: string, payload: SetPersonThumbnailPayload, ): Promise => { await apiClient.put(`/people/${personId}/thumbnail`, payload); }; export const clusterFaces = async (): Promise => { await apiClient.post("/people/cluster"); };