# Safe PostgreSQL Setup (Shared Server)

Dokumen ini memastikan backend POS tidak mengganggu project lain dalam server PostgreSQL yang sama.

## 1) Buat role dan database khusus POS

> Jalankan sebagai admin PostgreSQL. Perintah ini tidak mengubah database project lain.

```sql
DO $$
BEGIN
   IF NOT EXISTS (SELECT 1 FROM pg_roles WHERE rolname = 'bazzar_user') THEN
      CREATE ROLE bazzar_user LOGIN PASSWORD 'replace_me';
   END IF;
END $$;
```

```sql
SELECT 'CREATE DATABASE bazzar_db OWNER bazzar_user'
WHERE NOT EXISTS (SELECT FROM pg_database WHERE datname = 'bazzar_db')\gexec
```

## 2) Buat schema khusus POS

```sql
\c bazzar_db
CREATE SCHEMA IF NOT EXISTS bazzar_pos AUTHORIZATION bazzar_user;
ALTER ROLE bazzar_user IN DATABASE bazzar_db SET search_path = bazzar_pos, public;
```

## 3) Hak akses minimal

```sql
GRANT CONNECT ON DATABASE bazzar_db TO bazzar_user;
GRANT USAGE, CREATE ON SCHEMA bazzar_pos TO bazzar_user;
```

## 4) Jalankan migration POS

```bash
export MIGRATE_DATABASE_URL='postgres://bazzar_user:***@127.0.0.1:5432/bazzar_db?sslmode=disable'
make migrate-up
```

`make migrate-up` sudah memakai guard script `scripts/migrate_safe.sh` untuk mencegah salah target database.

## 5) Catatan keamanan

- Jangan pakai superuser dari aplikasi.
- Jangan jalankan migration destructive (`DROP`) di production.
- Semua object POS disimpan di schema `bazzar_pos`.

