Skip to content

DoomedMean/Queue

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

1 Commit
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

🏦 Banking Queue Management System

Sistem antrian digital real-time untuk layanan perbankan

.NET Vue.js TypeScript SignalR ![SQL Server](https://img.shields.io/badge/SQL_Server-EF Core-CC2927?style=for-the-badge&logo=microsoft-sql-server&logoColor=white)


πŸ“Έ Preview

πŸ–₯️ Queue Display β€” Layar Antrian Publik

Layar yang dipasang di ruang tunggu nasabah, menampilkan nomor yang sedang dilayani dan nomor yang menunggu secara real-time.

Queue Display


πŸŽ›οΈ Admin Panel β€” Panel Operator Teller

Dashboard operator untuk memanggil nasabah, mengelola antrian, dan memantau semua loket secara bersamaan.

Admin Panel


🎫 Ambil Nomor β€” Self-Service Kiosk

Halaman kios mandiri bagi nasabah untuk memilih layanan dan mengambil nomor antrian.

Take Queue


✨ Fitur Utama

Fitur Deskripsi
πŸ“‘ Real-Time Updates Semua perubahan antrian langsung tersinkron ke seluruh klien via SignalR WebSocket
πŸ”Š Voice Announcement Pengumuman suara otomatis menggunakan Web Speech API (Bahasa Indonesia) saat nomor dipanggil
🏧 Multi-Service Mendukung 7 jenis layanan perbankan dengan kode tiket unik masing-masing
πŸ–₯️ Queue Display Layar publik yang menampilkan nomor sedang dilayani dan antrian menunggu
πŸŽ›οΈ Admin Panel Operator dapat memanggil, melayani, menyelesaikan, atau melewati antrian
🎫 Self-Service Kiosk Nasabah dapat mengambil nomor antrian sendiri tanpa bantuan petugas
πŸ’Ύ State Persistence State antrian tersimpan di database β€” aman dari restart server
⚑ In-Memory Performance State di-cache di memori untuk performa broadcast real-time yang optimal

πŸ—οΈ Arsitektur Sistem

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                        CLIENTS                              β”‚
β”‚                                                             β”‚
β”‚   [Queue Display]   [Admin Panel]   [Ambil Nomor Kiosk]    β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
               β”‚  WebSocket (SignalR) + HTTP REST
               β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                     Queue.API (ASP.NET Core 10)             β”‚
β”‚                                                             β”‚
β”‚   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚   β”‚ QueueHub     β”‚   β”‚ QueueController (REST API)        β”‚ β”‚
β”‚   β”‚ (SignalR)    β”‚   β”‚ GET /api/queue/new-queue           β”‚ β”‚
β”‚   β”‚              β”‚   β”‚ GET /api/queue/get-queues          β”‚ β”‚
β”‚   β””β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”˜   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚          β”‚                          β”‚                       β”‚
β”‚          β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                       β”‚
β”‚                     β–Ό                                       β”‚
β”‚          β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                           β”‚
β”‚          β”‚  QueueStateService   β”‚  ← Singleton In-Memory   β”‚
β”‚          β”‚  (SemaphoreSlim)     β”‚    Thread-Safe State      β”‚
β”‚          β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                           β”‚
β”‚                     β”‚                                       β”‚
β”‚          β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                           β”‚
β”‚          β”‚  AppDbContext (EF)   β”‚  ← SQL Server Persistence β”‚
β”‚          β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                           β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸ› οΈ Tech Stack

Backend β€” Queue.API

Teknologi Versi Peran
ASP.NET Core .NET 10 Web framework & REST API
ASP.NET SignalR 10.0 Real-time WebSocket communication
Entity Framework Core 10.0 ORM & database migrations
SQL Server β€” Persistent storage
OpenAPI Built-in API documentation

Frontend β€” Queue.UI

Teknologi Versi Peran
Vue.js 3.5 UI Framework (Composition API)
TypeScript ~6.0 Type-safe development
Pinia 3.0 State management
Vue Router 5.0 Client-side routing
@microsoft/signalr 10.0 SignalR client connection
Vite 8.0 Build tool & dev server
Web Speech API Native Text-to-speech voice announcement

🎯 Layanan yang Didukung

Kode Layanan Contoh Tiket
A Teller A001
C Customer Service C001
K Kredit K001
I Investasi I001
P Priority Banking P001
F Trade Finance F001
S Safe Deposit Box S001

πŸš€ Cara Menjalankan

Prasyarat

1. Clone & Setup Backend

cd Queue.API

Edit appsettings.Development.json dan sesuaikan connection string:

{
  "ConnectionStrings": {
    "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=QueueDB;Trusted_Connection=True;"
  }
}

Jalankan migrasi dan start server:

dotnet ef database update
dotnet run

API akan berjalan di https://localhost:7xxx atau http://localhost:5xxx

2. Setup Frontend

cd Queue.UI
npm install
npm run dev

Frontend akan berjalan di http://localhost:5173

3. Akses Aplikasi

URL Halaman
http://localhost:5173/ Queue Display (Layar Publik)
http://localhost:5173/take Ambil Nomor (Kiosk)
http://localhost:5173/admin Admin Panel (Operator)

πŸ“‘ SignalR Hub Events

Server β†’ Client (Broadcast)

Event Payload Keterangan
QueueUpdate QueueUpdatePayload Update penuh state antrian
QueueCalled QueueCalledPayload Nomor baru dipanggil ke loket
Announcement string Pesan pengumuman teks bebas

Client β†’ Server (Invoke)

Method Parameter Keterangan
AddQueue queueNumber, serviceName Tambah nomor antrian baru
CallNext counterName, serviceName Panggil nomor berikutnya
CallSpecific queueNumber, counterName, serviceName Panggil nomor tertentu
CompleteQueue queueNumber, counterName Selesaikan pelayanan
SkipQueue queueNumber Lewati / skip nomor
SendAnnouncement message Kirim pengumuman ke semua layar

πŸ“ Struktur Proyek

Queue/
β”œβ”€β”€ Queue.API/                  # ASP.NET Core Backend
β”‚   β”œβ”€β”€ Controllers/
β”‚   β”‚   └── QueueController.cs  # REST API endpoints
β”‚   β”œβ”€β”€ Hubs/
β”‚   β”‚   └── QueueHub.cs         # SignalR real-time hub
β”‚   β”œβ”€β”€ Services/
β”‚   β”‚   β”œβ”€β”€ QueueStateService.cs    # Singleton in-memory state
β”‚   β”‚   └── QueueStateInitializer.cs # DB β†’ Memory loader on startup
β”‚   β”œβ”€β”€ Models/
β”‚   β”‚   β”œβ”€β”€ Queue.cs            # Entity model
β”‚   β”‚   └── ActivityLog.cs      # Activity log model
β”‚   β”œβ”€β”€ Data/
β”‚   β”‚   └── AppDbContext.cs     # EF Core DB context
β”‚   β”œβ”€β”€ Shared/
β”‚   β”‚   └── AppEnum.cs          # Service types, statuses, ticket prefixes
β”‚   └── Migrations/             # EF Core database migrations
β”‚
└── Queue.UI/                   # Vue 3 Frontend
    └── src/
        β”œβ”€β”€ views/
        β”‚   β”œβ”€β”€ QueueDisplay.vue    # Layar antrian publik
        β”‚   β”œβ”€β”€ TakeQueueView.vue   # Kios ambil nomor
        β”‚   └── AdminView.vue       # Panel operator
        β”œβ”€β”€ stores/
        β”‚   β”œβ”€β”€ queue.ts        # Pinia: real-time queue state
        β”‚   └── admin.ts        # Pinia: admin / counter state
        β”œβ”€β”€ services/
        β”‚   └── signalrService.ts   # SignalR connection & event handlers
        └── composables/
            └── useVoice.ts     # Web Speech API TTS composable

πŸ”„ Alur Kerja Sistem

Nasabah                  Sistem                    Operator
   β”‚                        β”‚                          β”‚
   │── Pilih Layanan ──────►│                          β”‚
   β”‚                        │── Buat Tiket (DB) ──────►│
   │◄─ Terima Nomor ────────│◄─ Broadcast QueueUpdate ─│
   β”‚                        β”‚                          β”‚
   β”‚  [Menunggu]            │◄─ CallNext() ────────────│
   β”‚                        │── QueueCalled Event ─────►│
   │◄─ πŸ”Š Suara Panggil ───│── Broadcast ke Display ──►│
   β”‚                        β”‚                          β”‚
   │── Menuju Loket ────────│                          β”‚
   β”‚                        │◄─ CompleteQueue() ───────│
   β”‚                        │── Broadcast QueueUpdate ─►│
   β”‚  [Selesai]             β”‚                          β”‚

πŸ‘¨β€πŸ’» Author

Dibangun sebagai portofolio proyek full-stack menggunakan teknologi modern untuk sistem antrian perbankan berbasis web real-time.


⭐ Jika proyek ini bermanfaat, berikan bintang!

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors