API integracija, podaci i realtime¶
Frontend ima dva API sloja: novi meter API za aktivni smart-meter domen i stariji/mock API za legacy delove aplikacije.
Novi meter API¶
Glavni fajl:
src/lib/api/meter-client.ts
Ovo je glavni klijent za smart meter backend. Izvozi:
API_BASE_URL,- tipove za meter domen,
- helper-e
recordId,asItems,clearMeterApiCache, meterApiobjekat sa metodama.
Karakteristike:
- centralizovan
fetch, - automatski
Authorization: Bearer <token>, - JSON body handling,
- FormData upload bez ručnog
Content-Type, - CSV response handling,
- GET cache za određene customer endpoint-e,
- cache invalidation posle non-GET zahteva,
- normalizacija list response-a kroz
asItems, - tolerancija na
id,_idi domenske ID ključeve krozrecordId.
Najvažnije grupe metoda¶
Dashboard:
getFleetDashboard,getElectricalAverages,getOfflineMeters,getFaultedMeters,getTamperAlarms.
Customers/users:
listCustomers,getCustomer,createCustomer,patchCustomer,listUtilityUsers,createUtilityUser.
Service/delivery/contract:
listServicePoints,listContracts,listPointsOfDelivery.
Meters/devices:
listMeters,getMeter,getMeterLatest,assignMeterToPoint,createDeviceCommand,clearTamperLatch,createMeterClaimCode,updateDeviceConfig.
Events:
listEvents,getEvent,acknowledgeEvent,resolveEvent,ignoreEvent,- delete helpers.
Field:
listServiceTickets,createServiceTicket,patchServiceTicket,listWorkOrders,createWorkOrder,patchWorkOrder.
Tariffs:
listTariffPlans,getTariffPlan,createTariffPlan,patchTariffPlan.
Billing:
listBillingSchedules,materializeSchedule,listBillingPeriods,generateBills,regenerateBills,listBills,getBill.
Customer portal:
getProfile,getMyContracts,getMyMeters,getMyUsageSummary,exportMyUsageSummary,getMyBills,getMyAlerts.
Technician:
getTechnicianWorkOrders,patchTechnicianWorkOrder,addTechnicianWorkOrderNote,addTechnicianWorkOrderAttachment,getTodayRoute.
Media:
getMedia,getMediaFileUrl.
Stariji/mock API¶
Fajl:
src/lib/api/client.ts
Ovaj klijent sadrži:
- mock login korisnike,
- mock dashboard/container/device/crew/route data,
- starije container endpoint-e,
createOperationsStream,- media helper-e.
Koristi se za starije komponente i legacy delove. Ne treba ga proširivati za nove smart-meter funkcionalnosti ako već postoji odgovarajući meter backend endpoint.
Endpoint katalog¶
Detaljan katalog endpoint-a je u:
docs/frontend_api_endpoints.md
Za tačne sheme uvek proveriti backend OpenAPI:
http://127.0.0.1:8080/docs
http://127.0.0.1:8080/openapi.json
List response normalizacija¶
Backend može vratiti:
- niz objekata,
{ items: [...] },{ results: [...] }.
Koristi se:
asItems(response)
Za ID:
recordId(record)
recordId proverava id, _id, meter_id, contract_id, point_of_delivery_id, pod_id, device_id, customer_account_id, tariff_plan_id, billing_schedule_id, billing_period_id, bill_id, event_id, ticket_id, work_order_id.
Cache¶
meter-client.ts ima in-memory request cache za GET endpoint-e koji se pozivaju kroz cachedApi.
Primeri TTL-a:
- profile i contracts: 5 minuta,
- my meters: 2 minuta,
- latest meter: 15 sekundi,
- usage summary: 60 sekundi,
- hourly telemetry: 60 sekundi,
- daily telemetry: 5 minuta,
- raw telemetry: bez cache-a.
Svaki non-GET zahtev čisti meter API cache.
Polling¶
Hook:
src/hooks/use-polling.ts
Koristi se za periodično osvežavanje. Dashboard layout ga koristi za broj otvorenih događaja na 30 sekundi.
Realtime¶
Stariji klijent ima createOperationsStream za SSE:
/realtime/operations
Podržani event listener-i:
crew.location.updated,alarm.created,alarm.updated.
Ovo trenutno pripada starijem operations/container sloju. Za nove realtime meter događaje treba definisati novu integraciju u meter-client.ts ili jasno migrirati postojeću.