Spaces:
Running
Running
File size: 3,549 Bytes
27af323 0550cee 27af323 0550cee 27af323 ef20961 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | -- ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
-- 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.
|