Ordify¶
Platforma za online poručivanje hrane — namenjena restoranima, picerijama i sličnim objektima. Prodaje se on-premise: svaki klijent dobija svoju instancu sistema na cloud serveru.
📦 Šta Ordify pruža¶
- Digitalni meni — upravljanje kategorijama, jelima, sastojcima, cenama i dostupnošću artikala
- Online poručivanje — kupci poručuju preko web sajta ili mobilne aplikacije
- Zone dostave (geofencing) — definisanje zona u kojima je dostava moguća i automatska provera lokacije kupca
- Obaveštenja u realnom vremenu — kuhinja dobija obaveštenje o novoj porudžbini u milisekundi (WebSocket/SSE)
- Plaćanje — online plaćanje ili plaćanje na licu mesta (u zavisnosti od paketa)
🏗️ Arhitektura¶
Ordify je mikroservisna arhitektura bazirana na Quarkus (Java 21) sa PostgreSQL bazama i REST komunikacijom.
┌─────────────────────────────────────────────────────────────────┐
│ Kupac / Admin / Kuhinja │
│ (web sajt, mobilna aplikacija, ekrani) │
└──────────────────────────────┬──────────────────────────────────┘
│ HTTPS
┌──────────────────────────────▼──────────────────────────────────┐
│ ordify-order-service │
│ Centralni biznis servis (port 5007) │
│ korpa, porudžbine, pravila dostave, geofencing │
└───────┬──────────────────┬──────────────────┬───────────────────┘
│ REST │ REST │ (planirano)
┌───────▼──────┐ ┌────────▼────────┐ ┌──────▼──────────────┐
│ menu-service │ │ geofencing-svc │ │ notification-svc │
│ (port 5006) │ │ (port 8083) │ │ (WebSocket/SSE) │
│ meni i jela │ │ zone dostave │ │ kuhinja, real-time │
└───────┬──────┘ └────────┬────────┘ └─────────────────────┘
│ │
┌────▼────┐ ┌────▼────┐
│ DB │ │ DB │
└─────────┘ └─────────┘
Repozitorijumi¶
| Repo | Port | Status | Opis |
|---|---|---|---|
| ordify-menu-service | 5006 | ✅ Aktivan | Upravljanje menijem (proizvodi, kategorije, cene, dostupnost) |
| ordify-order-service | 5007 | ✅ Aktivan | Korpa, porudžbine, pravila dostave, geofencing provera |
| ordify-geofencing-service | 8083 | ✅ Aktivan | Zone dostave, keširana provera lokacije |
| ordify-notification-service | — | ⚠️ U planu | WebSocket/SSE obaveštenja (nova porudžbina → kuhinja) |
| ordify-infrastructure | — | ⚠️ U pripremi | Docker Compose, Keycloak, Prometheus, Grafana |
🛠️ Tehnološki stack¶
| Komponenta | Izbor |
|---|---|
| Framework | Quarkus 3.36.x (Supersonic Subatomic Java) |
| Jezik | Java 21 (Maven) |
| Baza | PostgreSQL (per servis) |
| ORM | Hibernate ORM sa Panache |
| REST | Quarkus REST (Jackson) |
| Klijent | MicroProfile REST Client |
| Autentikacija | Keycloak (u planu) |
| Monitoring | Prometheus + Grafana (u planu) |
📡 Komunikacija između servisa¶
| Izvor | Ka | Kako | Svrha |
|---|---|---|---|
| order-service | menu-service | REST POST /api/products/batch |
Povlačenje podataka o proizvodima iz korpe |
| geofencing-svc | — | REST GET /api/internal/zones/check |
Provera lokacije (interno za ostale servise) |
| order-service | notification-svc | (planirano) | Signal za novo obaveštenje kuhinji |
🔑 Ključni obrasci i odluke¶
- Snapshot podaci u OrderItem —
productNameipricePaidse čuvaju u trenutku porudžbine; kasnije izmene cene/imenа ne menjaju istorijske porudžbine. - Soft delete — proizvodi se arhiviraju (
isArchived = true), nikada fizički ne brišu. - Geofencing keš — zone se keširaju u memoriji sa double-checked locking i invalidacijom kroz CDI event (
ZoneChangedEvent); provere lokacije ne diraju bazu. - Ray-casting algoritam — provera da li je tačka unutar poligona zone dostave.
- Jedna baza po servisu — servisi ne dele baze; integritet se održava na aplikativnom nivou.
🚀 Pokretanje¶
U pripremi
Docker Compose i kompletno okruženje se pripremaju u ordify-infrastructure (u toku).
Razvoj (pojedinačni servis)¶
Servis se pokreće na portu definisanom u application.properties (npr. 5006, 5007, 8083).
Napomene za razvoj:
- Baza se automatski kreira sa drop-and-create (samo za DEV)
- Order-service očekuje menu-service na http://localhost:5006
- Geofencing servis samostalno radi provere zona preko svog REST API-ja
🧪 Testiranje¶
Servisi sadrže integracione testove (QuarkusTest + REST Assured):
menu-service— 15 test slučajeva (CRUD, soft delete, batch, validacija)geofencing-service— testovi ray-casting algoritma i sortiranja zona
📄 Licenca¶
Vlasnički softver — sva prava zadržana. Copyright © Marinković & Co.