Database dan storage
Backend Go memakai PostgreSQL untuk data memo dan MinIO/S3 atau direktori lokal untuk lampiran. OCR memakai PostgreSQL terpisah untuk hasil ekstraksi dan Redis sebagai antrean/cache.
Migrasi backend Go
File migrasi SQL berada di apps/api/internal/db/migrations/. Compose Go tidak menerapkannya otomatis. Jalankan target berikut dari direktori backend Go:
| Perintah | Dampak |
|---|---|
make db-apply-migrations | Menjalankan semua .up.sql pada database saat ini; gunakan sekali pada database baru |
make db-reset | Menghapus dan membuat ulang database |
make db-migrate | Reset database, lalu menjalankan seluruh .up.sql |
make db-restore CONFIRM=1 | Reset database, lalu memuat backup |
make db-verify-schema | Reset database dua kali; membandingkan migrasi awal dengan backup dan berakhir pada hasil restore |
db-reset, db-migrate, db-restore, dan db-verify-schema menghapus data database target. Jalankan hanya pada database pengembangan yang boleh diganti. db-verify-schema membandingkan hanya 000001_init_schema.up.sql dengan backup, bukan seluruh migrasi tambahan.
db-apply-migrations tidak melacak migrasi yang sudah diterapkan. Beberapa SQL tidak idempotent. Pada database hasil restore atau database yang sudah berjalan, periksa skema dan pilih hanya file migrasi yang memang tertunda. Loop target Makefile juga tidak menghentikan keseluruhan proses ketika satu file gagal.
Backup contoh tersedia di ../../Bucket/DB/memoDB-24-05-2026_17_00_01.psql. Target Makefile dapat diberi parameter DB_CONTAINER, DB_NAME, DB_USER, atau BACKUP_FILE.
Penyimpanan file
Backend Go membaca STORAGE_DRIVER. Mode local memakai STORAGE_LOCAL_ROOT; mode s3 memakai bucket, region, kredensial, endpoint, dan opsi path style dalam STORAGE_S3_*. Compose Go memilih mode S3 dengan MinIO pada port host 9000 dan console 9001.
Service createbuckets dalam Compose Go membuat bucket memos dan mengaktifkan download anonim untuk pengembangan. Konfigurasi storage produksi perlu disesuaikan dengan kontrol akses yang diinginkan.
Lampiran memo lama dengan url berformat <UUID>_<tahun> dibaca dari key
memos/<filename> pada bucket aktif. Pertahankan token DB dan nama file ketika
mengimpor isi storage/app/public/memos/ dari Lumen. Upload baru pada S3 memakai
key memos/<company_no>/<uuid>_<filename>.
Backend membangun URL untuk OCR dari lokasi lampiran. Jalur S3 dalam Compose menggunakan endpoint internal MinIO agar container OCR dapat mengakses file. Jalur storage lokal masih perlu dicocokkan dengan route file publik sebelum OCR dipakai penuh; lihat status implementasi.
Database OCR
Compose OCR menjalankan alembic upgrade head sebelum API mulai. Untuk Python lokal:
cd '../../../Workshop/ocr_service'
.venv/bin/alembic upgrade head
File .env.example OCR mengasumsikan PostgreSQL di port 5432 dan Redis di port 6379. Jika menggunakan Compose OCR lalu mengaksesnya dari host, gunakan port 5434 dan 6381. Redis yang tidak terjangkau memicu fallback ke memori proses pada job store.