Terakhir diperbarui: 2026-05-22
1. Ringkasan
warehouse-queue-app adalah aplikasi operasional warehouse untuk mengelola:
- antrian truk receiving dan delivery,
- display publik antrian truk,
- dashboard SLA dan laporan operasional,
- master data customer, gate, admin, dan karyawan,
- schedule pengiriman,
- picking progress berbasis proses dan Excel import/export,
- backup, restore, dan migrasi aplikasi antar perangkat Windows.
Project ini terdiri dari:
- backend
Node.js + Express + Prisma, - frontend
Vue 3 + Vite + TypeScript, - database
PostgreSQL, - reverse proxy dan static hosting lokal menggunakan
Nginxdi Windows.
2. Modul Utama
2.1 Antrian Truk
Modul ini dipakai untuk mencatat truk masuk dan mengawal status proses dari registrasi sampai selesai atau batal.
Fitur utama:
- registrasi antrian receiving atau delivery,
- assignment gate,
- update status operasional,
- catatan warehouse,
- audit log perubahan status,
- export Excel,
- display publik untuk monitor antrian.
2.2 Dashboard
Dashboard menampilkan ringkasan operasional dan SLA, antara lain:
- summary total antrian,
- status distribution,
- hourly trend,
- top customer,
- data over SLA,
- monthly report,
- schedule summary,
- picking progress summary.
2.3 Master Data
Master data yang dikelola:
- customer,
- gate,
- admin user,
- employee.
2.4 Schedule Pengiriman
Schedule dipakai untuk perencanaan pengiriman berdasarkan tanggal, customer, store type, dan komposisi truck type.
2.5 Picking Progress
Modul ini dipakai untuk memonitor progres picking per DO, customer, destination, picker, dan target barcode/qty.
Fitur utama:
- create/edit data picking,
- start picking,
- update picked quantity,
- finish picking,
- cancel picking,
- import/export Excel,
- print summary,
- audit log perubahan.
3. Workflow Bisnis
3.1 Workflow Antrian Truk
Status utama antrian:
MENUNGGU -> IN_WH -> PROSES -> SELESAI
Status alternatif:
MENUNGGU/IN_WH -> BATAL
Aturan bisnis penting:
- Entry baru selalu dibuat dengan status
MENUNGGU. - Warehouse memanggil driver dan mengubah status menjadi
IN_WH. - Warehouse memulai bongkar/muat dan mengubah status menjadi
PROSES. - Saat pindah ke
PROSES, Tallyman dapat dipilih. Jika diisi, employee harus ada di master karyawan dengan posisiTALLYMAN. - Entry dapat dibatalkan hanya sampai status
IN_WHdan alasan cancel wajib diisi. notesFromWhtidak bisa diubah jika status sudahSELESAIatauBATAL.- Backend menjalankan auto-complete setiap 1 jam. Data antrian berumur lebih dari 3 hari yang masih
MENUNGGU,IN_WH, atauPROSESakan otomatis ditandaiSELESAIoleh sistem.
flowchart LR A[CS/Admin input antrian] --> B[Status MENUNGGU] B --> C[Warehouse panggil driver] C --> D[Status IN_WH] D --> E[Warehouse proses bongkar atau muat] E --> F[Status PROSES] F --> G[Status SELESAI] B --> H[BATAL dengan alasan] D --> HSumber alur ini sejalan dengan diagram docs/flowchart-workflow-antrian-trucking.drawio.
3.2 Workflow Picking Progress
Status utama picking:
MENUNGGU -> ON_PROCESS -> SELESAI
Status alternatif:
MENUNGGU/ON_PROCESS -> BATAL
Aturan bisnis penting:
- Data picking baru dibuat dengan status
MENUNGGU. - Start hanya boleh dari status
MENUNGGU. - Update
pickedQtyhanya boleh saat statusON_PROCESS. - Finish hanya boleh saat status
ON_PROCESSdanpickedQtyharus sama denganpickingQty. - Cancel mewajibkan alasan.
notesFromWhtidak bisa diubah jika status sudahSELESAIatauBATAL.
flowchart LR A[Create atau import picking] --> B[Status MENUNGGU] B --> C[Start picking] C --> D[Status ON_PROCESS] D --> E[Update pickedQty] E --> F{pickedQty = pickingQty?} F -- Ya --> G[Finish] G --> H[Status SELESAI] F -- Belum --> E B --> I[BATAL dengan alasan] D --> I3.3 Workflow Schedule Pengiriman
Alur high level schedule:
- Admin atau CS membuat schedule pengiriman.
- Schedule menyimpan tanggal, customer, store type, dan item truck type.
- Data schedule dipakai untuk monitoring, export, print summary, dan dashboard bulanan.
4. Role dan Hak Akses
Role aplikasi:
ADMINWAREHOUSECS
Ringkasan akses utama:
| Area | ADMIN | WAREHOUSE | CS |
|---|---|---|---|
| Dashboard | Ya | Ya | Ya |
| Queue list dan detail | Ya | Ya | Ya |
| Queue display publik | Publik | Publik | Publik |
| Create/update/status queue | Ya | Ya | Ya |
| Edit WH notes queue | Tidak | Ya | Tidak |
| Master customer | Ya | Tidak | Tidak |
| Master gate | CRUD | Read | Read |
| Master admin | Ya | Tidak | Tidak |
| Master karyawan | Ya | Tidak | Tidak |
| Picking progress list | Ya | Ya | Ya |
| Edit header picking | Ya | Tidak | Ya |
| Update WH notes picking | Tidak | Ya | Tidak |
| Schedule create/update/delete | Ya | Read only | Ya |
Catatan implementasi:
- Route frontend mengarahkan
WAREHOUSEdanCSke/antrian-truksetelah login. - Route publik tanpa login adalah
/logindan/display/antrian-truk. - Token auth disimpan di
localStoragedan dikirim sebagaiAuthorization: Bearer <token>.
5. Tech Stack
5.1 Backend
Node.jsExpress 4Prisma ORM 6PostgreSQLjsonwebtokenbcryptjsmulterexceljsxlsx
5.2 Frontend
Vue 3Vite 7TypeScriptVue Router 4AxiosTailwind CSSRadix VueChart.jsvue-chartjs
5.3 Infrastruktur Lokal Windows
Nginx for WindowsDocker Composeuntuk PostgreSQL opsionalPowerShelluntuk script operasional
6. Arsitektur Sistem
6.1 Arsitektur Runtime
flowchart TD A[Browser Client] --> B[Nginx Windows port 82] B --> C[Frontend dist /material-dashboard-shadcn-vue/] B --> D[/api proxy/] D --> E[Express API port 3000] E --> F[Prisma Client] F --> G[PostgreSQL queue_db port 5432]6.2 URL Penting
- Frontend production lokal:
http://localhost:82/material-dashboard-shadcn-vue/ - Display publik:
http://localhost:82/material-dashboard-shadcn-vue/display/antrian-truk - Backend health check:
http://localhost:3000/health - Nginx health check:
http://localhost:82/nginx-health
6.3 Port Penting
| Komponen | Port |
|---|---|
| Backend Express | 3000 |
| Frontend dev Vite | 5000 |
| Frontend prod via Nginx | 82 |
| PostgreSQL | 5432 |
7. Struktur Repository
backend/ Backend Express + Prismamaterial-dashboard-shadcn-vue-1.0.0/ Frontend Vue + Vitedeploy/windows/ Script start/stop/backup/restore Windowsdocker/ Docker Compose PostgreSQLdocs/ Dokumentasi dan flowchartnginx-1.28.2/ Bundled Nginx referenceREADME.md Ringkasan script operasional WindowsFolder penting:
backend/src/app.js: mount route dan middleware.backend/src/server.js: entrypoint backend dan auto-complete job.backend/src/routes/: definisi endpoint per domain.backend/src/services/: business logic dan query database.backend/prisma/schema.prisma: schema relasional utama.backend/prisma/migrations/: histori perubahan schema.backend/prisma/seed.js: seed admin default.material-dashboard-shadcn-vue-1.0.0/src/router/index.ts: route frontend dan guard role.material-dashboard-shadcn-vue-1.0.0/src/services/api.ts: axios client dengan auth interceptor.material-dashboard-shadcn-vue-1.0.0/vite.config.ts: base path, dev server, dan proxy/api.deploy/windows/start-local-server.ps1: start backend dan Nginx.deploy/windows/backup-db.ps1: backup database.deploy/windows/restore-db.ps1: restore database.
8. Database Relasional
8.1 Database Default
Contoh konfigurasi dari backend/.env.example:
DATABASE_URL=postgresql://sankyu:sankyu39@localhost:5432/queue_dbPORT=3000NODE_ENV=developmentJWT_SECRET=change_this_secretJWT_EXPIRES_IN=12h8.2 Enum Penting
QueueStatus:MENUNGGU,IN_WH,PROSES,SELESAI,BATALQueueCategory:RECEIVING,DELIVERYAdminRole:ADMIN,WAREHOUSE,CSWarehouseGate:WH1,WH2,DGStoreType:STORE_IN,STORE_OUTEmployeePosition:FOREMAN,TALLYMAN,OPR_FORKLIFTPickingStatus:MENUNGGU,ON_PROCESS,SELESAI,BATALTruckType:CDD,CDE,FUSO,WB,FT20,FT40,OTHER
8.3 Entitas Inti
| Tabel/Model | Fungsi |
|---|---|
QueueEntry | header antrian truk |
QueueLog | audit log perubahan antrian |
Customer | master customer |
Employee | master karyawan/picker/tallyman |
AdminUser | user login dan role |
Gate | master gate warehouse |
ShipmentSchedule | header schedule pengiriman |
ShipmentScheduleItem | detail truck type per schedule |
PickingProgress | header progres picking |
PickingProgressLog | audit log progres picking |
8.4 Relasi Database
erDiagram Customer ||--o{ QueueEntry : has Gate ||--o{ QueueEntry : assigned_to Employee ||--o{ QueueEntry : tallyman QueueEntry ||--o{ QueueLog : logs AdminUser ||--o{ QueueLog : acts
Customer ||--o{ ShipmentSchedule : has AdminUser ||--o{ ShipmentSchedule : creates ShipmentSchedule ||--o{ ShipmentScheduleItem : contains
Customer ||--o{ PickingProgress : has Employee ||--o{ PickingProgress : picks AdminUser ||--o{ PickingProgress : creates AdminUser ||--o{ PickingProgress : updates PickingProgress ||--o{ PickingProgressLog : logs AdminUser ||--o{ PickingProgressLog : acts8.5 Detail Model Operasional
QueueEntry
Kolom penting:
customerIdgateIdpickerEmployeeIdcategorydriverNametruckNumbercontainerNumbertransporterregisterTimeinWhTimestartTimefinishTimeslaWaitingMinutesslaInWhProcessMinutesstatusnotesnotesFromWh
QueueLog
Menyimpan histori status/action antrian, termasuk perubahan otomatis oleh sistem.
ShipmentSchedule dan ShipmentScheduleItem
Model ini membentuk relasi header-detail schedule:
ShipmentSchedulemenyimpan tanggal, customer, store type, pembuat.ShipmentScheduleItemmenyimpan truck type, truck type other, dan qty.
PickingProgress
Kolom penting:
datecustomerIddoNumberdestinationvolumeCbmplTimeReleasepickingQtypickedQtyslaPerBarcodeMinutesstartTimefinishTimestatusnotesFromWhpickerEmployeeId
9. API Overview
Semua endpoint dipasang di prefix /api, kecuali /health.
9.1 Auth
POST /api/auth/loginGET /api/auth/mePOST /api/auth/logout
9.2 Queue
GET /api/queue/displayPOST /api/queueGET /api/queueGET /api/queue/exportGET /api/queue/:idPATCH /api/queue/:idPATCH /api/queue/:id/wh-notesPATCH /api/queue/:id/statusPATCH /api/queue/:id/set-in-wh
9.3 Customers
GET /api/customersPOST /api/customersGET /api/customers/templatePOST /api/customers/importGET /api/customers/exportPATCH /api/customers/:idPUT /api/customers/:idDELETE /api/customers/:id
9.4 Gates
GET /api/gatesGET /api/master-gatesPOST /api/gatesPATCH /api/gates/:idPUT /api/gates/:idDELETE /api/gates/:idGET /api/gates/templatePOST /api/gates/importGET /api/gates/export
9.5 Employees
GET /api/employeesPOST /api/employeesGET /api/employees/templatePOST /api/employees/importGET /api/employees/exportPATCH /api/employees/:idPUT /api/employees/:idDELETE /api/employees/:id
9.6 Admin Users
GET /api/admin-usersPOST /api/admin-usersPATCH /api/admin-users/:idDELETE /api/admin-users/:id
9.7 Dashboard
GET /api/dashboard/summaryGET /api/dashboard/schedule-summaryGET /api/dashboard/progress-summaryGET /api/dashboard/picking-progress-summaryGET /api/dashboard/hourlyGET /api/dashboard/statusGET /api/dashboard/top-customersGET /api/dashboard/over-slaGET /api/dashboard/monthly-schedule-truck-summaryGET /api/dashboard/monthly-report
9.8 Schedules
POST /api/schedulesGET /api/schedulesGET /api/schedules/exportGET /api/schedules/print-summaryGET /api/schedules/:idPUT /api/schedules/:idDELETE /api/schedules/:id
9.9 Picking Progress
POST /api/picking-progressGET /api/picking-progressGET /api/picking-progress/templateGET /api/picking-progress/print-summaryPOST /api/picking-progress/importGET /api/picking-progress/exportGET /api/picking-progress/:idPATCH /api/picking-progress/:idPATCH /api/picking-progress/:id/startPATCH /api/picking-progress/:id/picked-qtyPATCH /api/picking-progress/:id/wh-notesPATCH /api/picking-progress/:id/finishPATCH /api/picking-progress/:id/cancel
10. Frontend Overview
10.1 Base Path dan Routing
Frontend dibuild dengan base path:
/material-dashboard-shadcn-vue/
Implikasinya:
- produksi harus diakses melalui prefix path tersebut,
- router menggunakan
createWebHistory('/material-dashboard-shadcn-vue/'), - Vite juga dibuild dengan
base: "/material-dashboard-shadcn-vue/".
10.2 Route Penting
/login/display/antrian-truk/dashboard/master-customer/master-gate/master-admin/master-karyawan/antrian-truk/antrian-truk/mobile/picking-progress/schedule-pengiriman
10.3 Integrasi API
Frontend menggunakan axios client dengan:
baseURL: "/api"- auto-attach bearer token dari
localStorage - auto logout redirect ke
/loginsaat menerima401
11. Cara Development
11.1 Prasyarat
Node.jsLTSnpmPostgreSQLlokal atauDocker- opsional
Nginxjika ingin meniru mode production lokal
11.2 Setup Database dengan Docker
cd dockerdocker compose up -dDatabase default:
- host:
localhost - port:
5432 - db:
queue_db - user:
sankyu
11.3 Setup Backend
cd backendcopy .env.example .envnpm cinpx prisma generatenpx prisma migrate deploynpm run seedCatatan:
migrate:devtersedia untuk pengembangan schema.migrate:deploydipakai untuk sinkronisasi schema yang sudah ada.- seed default membuat user:
- username:
admin - password:
admin123
- username:
- password default harus segera diganti setelah setup awal.
11.4 Setup Frontend
cd material-dashboard-shadcn-vue-1.0.0npm ci11.5 Menjalankan Development Mode
Opsi 1, manual:
cd backendnpm run devcd material-dashboard-shadcn-vue-1.0.0npm run devOpsi 2, helper script Windows:
cd deploy\windowsstart-dev-fullstack.batPerilaku helper script:
- membuka window backend dan frontend terpisah,
- backend berjalan di port
3000, - frontend mencoba port
5000, - jika port
5000sudah dipakai, script akan mencoba5001sampai5010.
11.6 URL Development
- frontend dev:
http://localhost:5000/material-dashboard-shadcn-vue/ - backend health:
http://localhost:3000/health
11.7 Verifikasi Development
Checklist cepat:
http://localhost:3000/healthmengembalikan{"ok":true}.- Frontend bisa membuka halaman login.
- Login berhasil dengan user valid.
- Data dashboard dan antrian dapat dimuat.
12. Cara Deployment
Dokumen ini merangkum deployment lokal Windows yang memang dipakai repo saat ini.
12.1 Pola Deployment Production Lokal
Mode ini memakai:
- backend Node.js di port
3000, - frontend hasil build
dist, NginxWindows di port82,- proxy
/apikehttp://127.0.0.1:3000.
12.2 Build Frontend
cd material-dashboard-shadcn-vue-1.0.0npm cinpm run buildOutput build:
material-dashboard-shadcn-vue-1.0.0/dist
12.3 Setup Backend Production
cd backendnpm cinpx prisma generatenpx prisma migrate deployPastikan backend/.env berisi minimal:
DATABASE_URL=postgresql://USER:PASSWORD@HOST:5432/queue_dbPORT=3000NODE_ENV=productionJWT_SECRET=ganti_dengan_secret_yang_amanJWT_EXPIRES_IN=12h12.4 Start Production Lokal di Windows
cd deploy\windowsstart-local-server.batApa yang dilakukan script ini:
- memastikan file backend dan Nginx tersedia,
- mengecek apakah
dist/index.htmlsudah ada, - start backend dengan
node src/server.jsjika port3000belum aktif, - mengetes dan me-reload Nginx,
- menampilkan URL akses lokal dan jaringan.
Konfigurasi penting di script:
nginxDir = C:\nginx-1.28.2- backend port
3000 - frontend/Nginx port
82
Jika lokasi Nginx berbeda, ubah variabel nginxDir di:
deploy/windows/start-local-server.ps1deploy/windows/stop-local-server.ps1
12.5 Stop Production Lokal
cd deploy\windowsstop-local-server.batScript stop akan:
- menghentikan proses backend yang listen di port
3000, - menghentikan proses
nginx.exedari direktori Nginx yang dikonfigurasi.
12.6 Checklist Deployment
- Build frontend berhasil dan folder
distterbaru tersedia. backend/.envsudah benar untuk environment target.- Migrasi database sudah dijalankan.
http://localhost:3000/healthmerespons normal.http://localhost:82/material-dashboard-shadcn-vue/dapat dibuka.- Login, dashboard, queue, export, dan display publik sudah diuji.
13. Backup, Restore, dan Migrasi Perangkat
13.1 Backup Database
cd deploy\windowsbackup-db.batFitur script backup:
- membaca
DATABASE_URLdaribackend/.env, - mode
auto,host, ataudocker, - default container docker:
queue_system, - output default ke
deploy/windows/backups/*.backup.
Contoh:
backup-db.bat -Mode dockerbackup-db.bat D:\backup\queue_db_manual.backup13.2 Restore Database
cd deploy\windowsrestore-db.batFitur script restore:
- membaca
DATABASE_URLdaribackend/.env, - default memakai file backup terbaru jika path tidak diberikan,
- meminta konfirmasi manual
YES, - mendukung mode
auto,host, dandocker.
Contoh:
restore-db.bat -Mode dockerrestore-db.bat D:\backup\queue_db.backup13.3 Migrasi Perangkat A ke B
Panduan rinci sudah tersedia di:
docs/MIGRATION_A_TO_B.md
Ringkasan migrasi:
- Stop service di perangkat lama.
- Backup database.
- Salin source project ke perangkat baru.
- Install dependency backend dan frontend.
- Build frontend.
- Set
backend/.env. - Restore database.
- Jalankan
npx prisma migrate deploy. - Sesuaikan
nginx.confdannginxDir. - Start aplikasi dan verifikasi dari localhost serta jaringan.
14. Operasional Harian
14.1 Start Service
deploy\windows\start-local-server.bat14.2 Stop Service
deploy\windows\stop-local-server.bat14.3 Start Development
deploy\windows\start-dev-fullstack.bat14.4 Stop Development
deploy\windows\stop-dev-fullstack.bat14.5 Backup Berkala
deploy\windows\backup-db.bat15. Troubleshooting
15.1 Frontend berubah di source tapi production tidak ikut berubah
Penyebab umum:
- frontend belum dibuild ulang,
- folder
distyang aktif masih versi lama, - browser cache.
Solusi:
- jalankan
npm run builddi folder frontend, - pastikan folder
distterbaru yang dilayani Nginx, - lakukan hard refresh atau incognito.
15.2 Frontend bisa dibuka tapi API error
Penyebab umum:
- backend belum berjalan,
- backend belum ikut di-update,
- database tidak reachable,
- token login sudah tidak valid.
Solusi:
- cek
http://localhost:3000/health, - restart backend,
- cek
backend/.env, - login ulang.
15.3 404 pada path /material-dashboard-shadcn-vue/
Penyebab umum:
- base path frontend tidak cocok dengan path yang dilayani server,
- alias Nginx ke folder
distsalah, - hasil build belum tersedia.
Solusi:
- cek
material-dashboard-shadcn-vue-1.0.0/dist/index.html, - cek path alias di
nginx.conf, - pastikan akses memakai prefix
/material-dashboard-shadcn-vue/.
15.4 pg_dump atau pg_restore tidak dikenali
Solusi:
- tambahkan PostgreSQL
binkePATH, - atau gunakan mode Docker pada script backup/restore.
15.5 Port bentrok
Port yang perlu dicek:
3000untuk backend,5000-5010untuk frontend dev,82untuk Nginx,5432untuk PostgreSQL.
16. Known Notes
- Root
package.jsonbukan aplikasi utama; package utama ada dibackend/danmaterial-dashboard-shadcn-vue-1.0.0/. - Project saat ini belum menyediakan script automated test di package utama backend/frontend.
- Dokumentasi deploy frontend detail tambahan juga tersedia di
docs/deploy-production.md. - Flowchart operasional queue tersedia di
docs/flowchart-workflow-antrian-trucking.drawio.
17. Referensi Dokumen Lain
docs/context-project.mddocs/deploy-production.mddocs/MIGRATION_A_TO_B.mdREADME.md