mirror of
https://github.com/jjbrunton/Sauci.git
synced 2026-11-02 02:19:43 +00:00
The sender can require photo or audio proof when sending any dare, catalogue or custom. The recipient captures and uploads the proof as a new couple-scoped 'dare_proof' media kind and attaches it on submit; the server enforces ownership, kind, couple, and MIME-type match. The proof renders inline on the dare card for the sender to review before confirming completion. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
24 lines
1.3 KiB
TypeScript
24 lines
1.3 KiB
TypeScript
import { apiClient } from "./apiClient";
|
|
import type { DareCatalog, DareItem, DareStats, SendDarePayload, SentDare } from "../features/dares/types";
|
|
|
|
const dare = (dareId: string) => `/v1/dares/${encodeURIComponent(dareId)}`;
|
|
|
|
export const daresApi = {
|
|
catalog: () => apiClient.get<DareCatalog>("/v1/dares/packs"),
|
|
packDares: (packId: string) =>
|
|
apiClient.get<{ dares: DareItem[] }>(`/v1/dares/packs/${encodeURIComponent(packId)}/dares`),
|
|
list: (filter: "active" | "history") =>
|
|
apiClient.get<{ dares: SentDare[] }>(`/v1/dares?filter=${filter}`),
|
|
stats: () => apiClient.get<DareStats>("/v1/dares/stats"),
|
|
send: (payload: SendDarePayload) => apiClient.post<{ dare: SentDare }>("/v1/dares", payload),
|
|
respond: (dareId: string, action: "accept" | "decline") =>
|
|
apiClient.post<{ dare: SentDare }>(`${dare(dareId)}/respond`, { action }),
|
|
submit: (dareId: string, proofMediaId?: string) =>
|
|
apiClient.post<{ dare: SentDare }>(
|
|
`${dare(dareId)}/submit`,
|
|
proofMediaId ? { proof_media_id: proofMediaId } : undefined,
|
|
),
|
|
complete: (dareId: string) => apiClient.post<{ dare: SentDare }>(`${dare(dareId)}/complete`),
|
|
cancel: (dareId: string) => apiClient.post<{ dare: SentDare }>(`${dare(dareId)}/cancel`),
|
|
};
|