No description
Find a file
2026-07-01 20:15:35 +07:00
apps/web Initial commit 2026-07-01 20:15:35 +07:00
cmd/archive-server Initial commit 2026-07-01 20:15:35 +07:00
docs/superpowers Initial commit 2026-07-01 20:15:35 +07:00
internal Initial commit 2026-07-01 20:15:35 +07:00
.dockerignore Initial commit 2026-07-01 20:15:35 +07:00
.env.example Initial commit 2026-07-01 20:15:35 +07:00
.env.production.example Initial commit 2026-07-01 20:15:35 +07:00
.gitignore Initial commit 2026-07-01 20:15:35 +07:00
check.go Initial commit 2026-07-01 20:15:35 +07:00
docker-compose.yml Initial commit 2026-07-01 20:15:35 +07:00
Dockerfile Initial commit 2026-07-01 20:15:35 +07:00
go.mod Initial commit 2026-07-01 20:15:35 +07:00
go.sum Initial commit 2026-07-01 20:15:35 +07:00
Makefile Initial commit 2026-07-01 20:15:35 +07:00
README.md Initial commit 2026-07-01 20:15:35 +07:00

Arsip Dokumen Internal

Aplikasi internal untuk arsip dokumen sekolah dengan klasifikasi Johnny Decimal, OCR searchable PDF, pencarian full text (SQLite FTS5), dan Casdoor SSO.

Arsitektur singkat

  • Backend Go (chi, modernc SQLite, alexedwards/scs, coreos go-oidc)
  • SQLite untuk metadata + FTS5
  • Storage abstraction: lokal atau S3
  • OCR: ocrmypdf + tesseract + img2pdf (dipanggil lewat runner yang bisa di-mock saat test)
  • Frontend React + Vite + Tailwind (tema Civic Ledger) + shadcn-style tokens
  • Auth via Casdoor OIDC, sesi disimpan di memori scs
  • Vite dev mem-proxy /api ke backend Go, sedangkan build apps/web/dist diserve langsung oleh backend Go

Local Development

  1. Salin .env.example ke .env dan isi kredensial Casdoor serta storage.

  2. Install dependensi frontend:

    cd apps/web && npm install
    
  3. Jalankan test:

    go test ./...
    cd apps/web && npx vitest run
    
  4. Install browser Playwright sekali:

    cd apps/web && npx playwright install chromium
    
  5. Jalankan server dan frontend:

    make dev
    

    Alternatif terpisah:

    make dev-api
    make dev-web
    
  6. Jalankan smoke e2e:

    cd apps/web && npx playwright test tests/e2e/archive-smoke.spec.ts
    

Build artefak

make build

Menghasilkan bin/archive-server.exe dan bundle Vite di apps/web/dist.

Environment variables utama

  • SESSION_SECRET (wajib)
  • DATABASE_PATH (default data/app.db)
  • STORAGE_BACKEND local atau s3
  • LOCAL_STORAGE_ROOT (default data/files)
  • S3_BUCKET, S3_REGION, S3_ENDPOINT, S3_ACCESS_KEY_ID, S3_SECRET_ACCESS_KEY
  • CASDOOR_ISSUER_URL, CASDOOR_CLIENT_ID, CASDOOR_CLIENT_SECRET, CASDOOR_REDIRECT_URL
  • OCR_LANGUAGES (default ind+eng)
  • OCRMYPDF_BIN, TESSERACT_BIN, IMG2PDF_BIN

Struktur folder

  • cmd/archive-server — entrypoint Go
  • internal/app — wiring dependency
  • internal/config — parsing env
  • internal/db — sqlite + migrasi + seed
  • internal/archive — domain arsip (repository, service, indexer, search, OCR job state)
  • internal/masterdata — document types, correspondents, JD classes, tags
  • internal/users — repo user lokal yang mirror Casdoor
  • internal/auth — OIDC client + session
  • internal/http — router dan handlers
  • internal/http/handlers — arsip, auth, master data, dashboard, admin
  • internal/http/middleware — require auth / require admin
  • internal/ocr — pipeline OCR dengan command runner yang bisa di-mock
  • internal/dashboard — ringkasan admin
  • internal/storage — abstraksi local + S3
  • apps/web — React/Vite SPA