FaceSWAP / supabase_schema.sql
aditya-rAj19's picture
Custom per-location result messages + unique defaults; remove em-dashes & "4K"
0550cee
Raw
History Blame Contribute Delete
3.55 kB
-- ════════════════════════════════════════════════════════════════════════════
-- DeepFace Studio β€” Supabase schema
-- Run this once in your Supabase project: SQL Editor β†’ New query β†’ paste β†’ Run
-- ════════════════════════════════════════════════════════════════════════════
-- ── 1. Locations table ──────────────────────────────────────────────────────
-- One row per (gender, location). image_path points at the file in the
-- 'location-images' Storage bucket; NULL means "no photo uploaded yet".
create table if not exists public.locations (
id uuid primary key default gen_random_uuid(),
gender text not null check (gender in ('Male', 'Female')),
name text not null,
sort_order int not null default 0,
image_path text,
message text, -- owner's custom result message (optional)
created_at timestamptz not null default now(),
updated_at timestamptz not null default now(),
unique (gender, name)
);
-- If the table already existed before `message` was added, run this once:
alter table public.locations add column if not exists message text;
create index if not exists locations_gender_order_idx
on public.locations (gender, sort_order);
-- keep updated_at fresh
create or replace function public.touch_updated_at()
returns trigger language plpgsql as $$
begin new.updated_at = now(); return new; end; $$;
drop trigger if exists locations_touch on public.locations;
create trigger locations_touch before update on public.locations
for each row execute function public.touch_updated_at();
-- ── 2. Storage bucket for the target images (public read) ────────────────────
insert into storage.buckets (id, name, public)
values ('location-images', 'location-images', true)
on conflict (id) do nothing;
-- ── 3. Row-level security ────────────────────────────────────────────────────
-- The backend uses the SERVICE_ROLE key, which bypasses RLS, so it can
-- insert/update/delete freely. We only need public READ policies so the
-- app page (and anyone) can list locations and view images.
alter table public.locations enable row level security;
drop policy if exists "locations public read" on public.locations;
create policy "locations public read"
on public.locations for select
using (true);
drop policy if exists "location images public read" on storage.objects;
create policy "location images public read"
on storage.objects for select
using (bucket_id = 'location-images');
-- ── 4. Rows are NOT seeded here ──────────────────────────────────────────────
-- Locations are created from the photos you actually uploaded, by running:
-- python scripts/seed_supabase_locations.py
-- Only folders that contain a photo become rows (resequenced 1..N per gender),
-- and the Control Panel adds/updates more later. This avoids empty placeholder
-- locations showing up on the app page.