-- moments role and database bootstrap.
-- Run as a postgres superuser against the cluster's `postgres` database.
-- Idempotent — safe to re-run on every deploy.
--
-- Two run modes — pick whichever fits your operator path:
--
-- (a) mTLS as the network superuser `grenade` (already mapped via pg_ident
--     on magrathea + frankie). The host cert is picked up from the standard
--     /etc/pki/tls paths via the PG* env vars:
--
--       PGSSLMODE=verify-full \
--       PGSSLCERT=/etc/pki/tls/misc/$(hostname -f).pem \
--       PGSSLKEY=/etc/pki/tls/private/$(hostname -f).pem \
--       PGSSLROOTCERT=/etc/pki/ca-trust/source/anchors/root-internal.pem \
--       psql -h magrathea.kosherinata.internal -U grenade -d postgres \
--            -f asset/sql/bootstrap.sql
--
-- (b) ssh to the db host and run as the local `postgres` peer:
--
--       ssh magrathea.kosherinata.internal \
--           sudo --user postgres psql -d postgres -f - \
--         < asset/sql/bootstrap.sql
--
-- After this completes, run asset/sql/bootstrap-moments.sql against the
-- newly created `moments` database to apply the in-database grants.

DO $$
BEGIN
  IF NOT EXISTS (SELECT FROM pg_roles WHERE rolname = 'moments_rw') THEN
    CREATE ROLE moments_rw LOGIN;
  END IF;
  IF NOT EXISTS (SELECT FROM pg_roles WHERE rolname = 'moments_ro') THEN
    CREATE ROLE moments_ro LOGIN;
  END IF;
END
$$;

SELECT 'CREATE DATABASE moments OWNER moments_rw'
WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = 'moments')
\gexec

GRANT CONNECT ON DATABASE moments TO moments_ro, moments_rw;
