74 lines
2.4 KiB
PL/PgSQL
74 lines
2.4 KiB
PL/PgSQL
create table if not exists public.wg_gallery_photos (
|
|
id uuid primary key default gen_random_uuid(),
|
|
unsplash_id text not null unique,
|
|
slug text,
|
|
description text,
|
|
alt_description text,
|
|
width integer,
|
|
height integer,
|
|
color text,
|
|
blur_hash text,
|
|
likes integer,
|
|
photo_created_at timestamptz,
|
|
photo_updated_at timestamptz,
|
|
urls jsonb not null default '{}'::jsonb,
|
|
links jsonb not null default '{}'::jsonb,
|
|
user_info jsonb not null default '{}'::jsonb,
|
|
raw jsonb not null,
|
|
source text not null default 'unsplash-wallpapers',
|
|
created_at timestamptz not null default now(),
|
|
updated_at timestamptz not null default now()
|
|
);
|
|
|
|
create table if not exists public.wg_gallery_sync_state (
|
|
source text primary key,
|
|
next_page integer not null default 1,
|
|
per_page integer not null default 20,
|
|
last_synced_at timestamptz,
|
|
last_inserted_count integer not null default 0,
|
|
last_seen_count integer not null default 0,
|
|
last_error text,
|
|
updated_at timestamptz not null default now()
|
|
);
|
|
|
|
create index if not exists wg_gallery_photos_source_created_at_idx
|
|
on public.wg_gallery_photos (source, created_at desc);
|
|
|
|
create index if not exists wg_gallery_photos_photo_created_at_idx
|
|
on public.wg_gallery_photos (photo_created_at desc);
|
|
|
|
alter table public.wg_gallery_photos enable row level security;
|
|
alter table public.wg_gallery_sync_state enable row level security;
|
|
|
|
drop policy if exists "Public can read gallery photos" on public.wg_gallery_photos;
|
|
create policy "Public can read gallery photos"
|
|
on public.wg_gallery_photos
|
|
for select
|
|
to anon, authenticated
|
|
using (true);
|
|
|
|
drop trigger if exists set_wg_gallery_photos_updated_at on public.wg_gallery_photos;
|
|
drop trigger if exists set_wg_gallery_sync_state_updated_at on public.wg_gallery_sync_state;
|
|
drop function if exists public.set_wg_updated_at();
|
|
|
|
create function public.set_wg_updated_at()
|
|
returns trigger
|
|
language plpgsql
|
|
set search_path = public
|
|
as $$
|
|
begin
|
|
new.updated_at = now();
|
|
return new;
|
|
end;
|
|
$$;
|
|
|
|
create trigger set_wg_gallery_photos_updated_at
|
|
before update on public.wg_gallery_photos
|
|
for each row
|
|
execute function public.set_wg_updated_at();
|
|
|
|
create trigger set_wg_gallery_sync_state_updated_at
|
|
before update on public.wg_gallery_sync_state
|
|
for each row
|
|
execute function public.set_wg_updated_at();
|