- TypeScript 56.8%
- Go 41.9%
- CSS 0.7%
- Dockerfile 0.3%
- Nix 0.2%
The correspondent endpoints read and wrote the legacy `correspondents` table while `post_document` resolves `correspondentId` as a party id. Both tables have their own autoincrement, so once a party existed that was not a correspondent the ids drifted and external clients — which take an id from the correspondent list and post it back — attached documents to whoever else held that number. Serve the list, create, update and delete from `parties` so the id a client reads is the id the archive resolves. Creating through the legacy endpoint now reuses the existing party instead of failing on UNIQUE(type, name), and linking a document to an id that is not a party reports it plainly rather than surfacing a bare foreign key error. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> |
||
|---|---|---|
| apps/web | ||
| cmd/archive-server | ||
| docs | ||
| internal | ||
| .dockerignore | ||
| .env.example | ||
| .env.production.example | ||
| .gitignore | ||
| check.go | ||
| docker-compose.yml | ||
| Dockerfile | ||
| flake.lock | ||
| flake.nix | ||
| go.mod | ||
| go.sum | ||
| Makefile | ||
| README.md | ||
Arsip Dokumen Internal
Aplikasi internal untuk arsip dokumen sekolah dengan metadata Jenis Arsip, Koleksi, Pihak Terkait, status klasifikasi, OCR searchable PDF, pencarian full text (SQLite FTS5), dan Casdoor SSO.
Panduan model klasifikasi dan penggunaan metadata tersedia di
docs/archive-metadata.md.
Panduan upload dan pembatasan akses siswa untuk SIA tersedia di
docs/sia-integration.md.
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
/apike backend Go, sedangkan buildapps/web/distdiserve langsung oleh backend Go
Local Development
NixOS / Nix development shell
Repository menyediakan flake.nix dan flake.lock untuk menyiapkan Go, Node.js,
serta seluruh tool OCR tanpa instalasi global. Pastikan Nix dengan dukungan flakes
sudah aktif, lalu dari root repository jalankan:
nix develop
Dev shell menyediakan Go, Node.js 22, npm, OCRmyPDF, Tesseract dengan data bahasa Indonesia dan Inggris, img2pdf, pdftotext, serta Python dengan pdfminer. Pastikan tool OCR tersedia dengan:
go version
node --version
ocrmypdf --version
tesseract --list-langs
pdftotext -v
Output tesseract --list-langs harus memuat ind dan eng.
Setelah masuk ke dev shell, siapkan aplikasi dan jalankan test:
cp .env.example .env
cd apps/web && npm install && cd ../..
go test ./...
cd apps/web && npm test
Pada NixOS, jalankan backend dan frontend di dua terminal yang masing-masing sudah
masuk melalui nix develop:
# Terminal 1
go run ./cmd/archive-server
# Terminal 2
cd apps/web
npm run dev
flake.lock mengunci versi nixpkgs agar seluruh pengembang memperoleh toolchain
yang sama. Perbarui lockfile secara sengaja dengan nix flake update, lalu commit
perubahannya bersama hasil pengujian.
Setup manual
-
Salin
.env.exampleke.envdan isi kredensial Casdoor serta storage. -
Install dependensi frontend:
cd apps/web && npm install -
Jalankan test:
go test ./... cd apps/web && npx vitest run -
Install browser Playwright sekali:
cd apps/web && npx playwright install chromium -
Jalankan server dan frontend:
make devAlternatif terpisah:
make dev-api make dev-web -
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(defaultdata/app.db)STORAGE_BACKENDlocalataus3LOCAL_STORAGE_ROOT(defaultdata/files)S3_BUCKET,S3_REGION,S3_ENDPOINT,S3_ACCESS_KEY_ID,S3_SECRET_ACCESS_KEYCASDOOR_ISSUER_URL,CASDOOR_CLIENT_ID,CASDOOR_CLIENT_SECRET,CASDOOR_REDIRECT_URLOCR_LANGUAGES(defaultind+eng)OCRMYPDF_BIN,TESSERACT_BIN,IMG2PDF_BIN
Struktur folder
cmd/archive-server— entrypoint Gointernal/app— wiring dependencyinternal/config— parsing envinternal/db— sqlite + migrasi + seedinternal/archive— domain arsip (repository, service, indexer, search, OCR job state)internal/masterdata— jenis arsip, koleksi, pihak terkait, dan tagsinternal/users— repo user lokal yang mirror Casdoorinternal/auth— OIDC client + sessioninternal/http— router dan handlersinternal/http/handlers— arsip, auth, master data, dashboard, admininternal/http/middleware— require auth / require admininternal/ocr— pipeline OCR dengan command runner yang bisa di-mockinternal/dashboard— ringkasan admininternal/storage— abstraksi local + S3apps/web— React/Vite SPA