#!/bin/sh
# First start of an empty database volume: one role and one database per application.
# Postgres runs this once (docker-entrypoint-initdb.d); on later starts the data already exists and it is skipped.
# The passwords come from ../../.env through docker-compose.yml.
set -e

role() {   # role <name> <password>
    psql -v ON_ERROR_STOP=1 -U "$POSTGRES_USER" -d postgres -v name="$1" -v pass="$2" <<'SQL'
SELECT format('CREATE ROLE %I LOGIN PASSWORD %L', :'name', :'pass')
 WHERE NOT EXISTS (SELECT 1 FROM pg_roles WHERE rolname = :'name') \gexec
SQL
}

database() {   # database <name> <owner>
    psql -v ON_ERROR_STOP=1 -U "$POSTGRES_USER" -d postgres -v name="$1" -v owner="$2" <<'SQL'
SELECT format('CREATE DATABASE %I OWNER %I ENCODING ''UTF8'' TEMPLATE template0', :'name', :'owner')
 WHERE NOT EXISTS (SELECT 1 FROM pg_database WHERE datname = :'name') \gexec
SQL
}

role "$MOODLE_DB_USER" "$MOODLE_DB_PASS"
database "$MOODLE_DB_NAME" "$MOODLE_DB_USER"

role "$CMS_DB_USER" "$CMS_DB_PASS"
database "$CMS_DB_NAME" "$CMS_DB_USER"

role "$WA_DB_USER" "$WA_DB_PASS"
database evolution "$WA_DB_USER"
database gateway "$WA_DB_USER"

echo "thinkera: databases $MOODLE_DB_NAME, $CMS_DB_NAME, evolution, gateway are ready"
