Иди на текст

Order servis

ordify-order-service — centralni biznis servis Ordify platforme: korpa, kreiranje porudžbina, pravila dostave (minimalni iznosi, besplatna dostava) i geofencing provera.

  • Port: 5007
  • Status: ✅ Aktivan
  • Repo: Marinkovic-Co/ordify-order-service

Funkcionalnosti

  • Kreiranje porudžbina sa geofencing proverom (da li je lokacija u zoni dostave)
  • Snapshot podaci u OrderItem (ime i cena u trenutku porudžbine)
  • Statusi porudžbina: KREIRANO → PRIHVAĆENO → U_DOSTAVI → DOSTAVLJENO / ODBIJENO
  • Integracija sa menu-service (REST batch poziv za cene)
  • CRUD zona dostave (u pripremi za uklanjanje — prelazi na geofencing-service)

Modeli

Order

Polje Tip Napomena
customerName String
deliveryAddress String Prikaz na računu
latitude / longitude Double GPS lokacija kupca
note String (500) Napomena kupca
totalPrice BigDecimal Računa se na osnovu trenutnih cena
status OrderStatus Enumeracija
createdAt LocalDateTime
items List\<OrderItem> Cascade ALL

OrderItem

Polje Tip Napomena
productId Long Link ka proizvodu
productName String Snapshot u trenutku porudžbine
pricePaid BigDecimal Snapshot cene
quantity int
order Order ManyToOne (JsonIgnore)

OrderStatus: KREIRANO → PRIHVAĆENO → U_DOSTAVI → DOSTAVLJENO; alternativno ODBIJENO.

API

Metod Putanja Opis
POST /api/orders Kreiranje porudžbine (geofencing + provera dostupnosti)
PUT /api/orders/{id}/status Promena statusa (string → enum)
GET /api/orders Sve porudžbine

Tok kreiranja porudžbine

  1. Validacija GPS koordinata (400 ako nedostaju)
  2. Geofencing provera — GeofencingService.isLocationInDeliveryZone(lat, lng)
  3. Batch poziv ka menu-service (POST /api/products/batch) za cene
  4. Provera dostupnosti svakog proizvoda (400 ako je nedostupan)
  5. Snapshot imena/cena u OrderItem, računanje totalPrice
  6. Perzistencija sa statusom KREIRANO

REST klijenti

MenuServiceClient (@RegisterRestClient(configKey = "menu-api")) → POST /api/products/batch.

GeofencingClient (@RegisterRestClient(configKey = "geofencing-api")) → GET /api/internal/zones/check?lat=&lng= → {"isInside": true/false}.

Konfiguracija u application.properties:

quarkus.rest-client.menu-api.url=http://localhost:5006
quarkus.rest-client.geofencing-api.url=http://localhost:8083

Geofencing

Geofencing logika je izdvojena u namenski ordify-geofencing-service. Order-servis je poziva preko REST-a — nema lokalne kopije.

Pokretanje

./mvnw compile quarkus:dev

Zahteva menu-service na http://localhost:5006 (podešava se u application.properties → quarkus.rest-client.menu-api.url).