Иди на текст

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

  1. Snapshot podaci u OrderItemproductName i pricePaid se čuvaju u trenutku porudžbine; kasnije izmene cene/imenа ne menjaju istorijske porudžbine.
  2. Soft delete — proizvodi se arhiviraju (isArchived = true), nikada fizički ne brišu.
  3. Geofencing keš — zone se keširaju u memoriji sa double-checked locking i invalidacijom kroz CDI event (ZoneChangedEvent); provere lokacije ne diraju bazu.
  4. Ray-casting algoritam — provera da li je tačka unutar poligona zone dostave.
  5. 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)

cd ordify-menu-service
./mvnw compile quarkus:dev

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):

cd ordify-menu-service
./mvnw test
  • 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.