Set up pnpm workspaces with three packages: a shared Zod-schema package, a Hono-based API exported as a library, and a Vite/React/ Tailwind frontend that mounts the API via Cloudflare Pages Functions. Storage is abstracted behind an S3-compatible provider so the project can migrate from R2 to a self-hosted MinIO without code changes. https://claude.ai/code/session_01TPBqgcSJMppgrpiq7fLywL
45 lines
1.3 KiB
SQL
45 lines
1.3 KiB
SQL
CREATE TABLE event_config (
|
|
id INTEGER PRIMARY KEY DEFAULT 1,
|
|
couple_names TEXT NOT NULL,
|
|
event_date TEXT,
|
|
cover_key TEXT,
|
|
gallery_visibility TEXT NOT NULL DEFAULT 'public',
|
|
moderation TEXT NOT NULL DEFAULT 'post',
|
|
max_file_mb INTEGER NOT NULL DEFAULT 500,
|
|
allow_video INTEGER NOT NULL DEFAULT 1,
|
|
max_video_seconds INTEGER NOT NULL DEFAULT 300,
|
|
welcome_message TEXT,
|
|
updated_at INTEGER NOT NULL DEFAULT (unixepoch() * 1000)
|
|
);
|
|
|
|
INSERT INTO event_config (id, couple_names, max_file_mb, max_video_seconds, allow_video, moderation, gallery_visibility)
|
|
VALUES (1, 'Stefanie & Leandro', 500, 300, 1, 'post', 'public');
|
|
|
|
CREATE TABLE uploads (
|
|
id TEXT PRIMARY KEY,
|
|
storage_key TEXT NOT NULL,
|
|
thumbnail_key TEXT,
|
|
mime_type TEXT NOT NULL,
|
|
size_bytes INTEGER NOT NULL,
|
|
duration_seconds INTEGER,
|
|
author_name TEXT,
|
|
message TEXT,
|
|
status TEXT NOT NULL DEFAULT 'approved',
|
|
source TEXT NOT NULL DEFAULT 'guest',
|
|
ip_hash TEXT,
|
|
provider_upload_id TEXT,
|
|
created_at INTEGER NOT NULL DEFAULT (unixepoch() * 1000),
|
|
approved_at INTEGER
|
|
);
|
|
|
|
CREATE INDEX idx_uploads_status_created ON uploads (status, created_at DESC);
|
|
CREATE INDEX idx_uploads_source ON uploads (source);
|
|
|
|
CREATE TABLE audit_log (
|
|
id TEXT PRIMARY KEY,
|
|
action TEXT NOT NULL,
|
|
actor TEXT,
|
|
payload TEXT,
|
|
created_at INTEGER NOT NULL DEFAULT (unixepoch() * 1000)
|
|
);
|