refacto: use common dependency injection repository for consumer app

This commit is contained in:
Alexis Fourmaux 2026-05-10 13:26:08 +02:00
parent f127a4c34c
commit a22413bb0b
2 changed files with 26 additions and 28 deletions

View file

@ -1,31 +1,11 @@
import logging from core.logging import setup_logging
import sys from dependencies import get_conn, get_uplink_service, get_mqtt_broker
import os
from adapters.postgres import connect, PgDeviceRepository, PgReadingRepository setup_logging()
from adapters.mqtt import PahoMqttBroker
from services.uplink_service import UplinkService
MQTT_HOST = os.getenv("MQTT_HOST", "mosquitto")
MQTT_PORT = int(os.getenv("MQTT_PORT", 1883))
MQTT_TOPIC = os.getenv("MQTT_TOPIC", "application/+/device/+/event/up")
DB_URI = os.getenv("DATABASE_URL", "postgresql://simugaz:simugaz@db/simugaz")
logging.basicConfig(
level=logging.INFO,
format="%(asctime)s [%(levelname)s] %(message)s",
datefmt="%Y-%m-%dT%H:%M:%S",
stream=sys.stdout,
force=True,
)
if __name__ == "__main__": if __name__ == "__main__":
conn = connect(DB_URI) conn = get_conn()
broker = PahoMqttBroker(MQTT_HOST, MQTT_PORT, MQTT_TOPIC) broker = get_mqtt_broker()
uplink = get_uplink_service()
devices = PgDeviceRepository(conn)
readings = PgReadingRepository(conn)
uplink = UplinkService(devices, readings)
broker.start(on_uplink=uplink.handle) broker.start(on_uplink=uplink.handle)

View file

@ -1,22 +1,40 @@
import os import os
from functools import lru_cache from functools import lru_cache
from adapters.postgres import connect from adapters.postgres import connect, PgDeviceRepository, PgReadingRepository
from adapters.postgres_query import PgReadingQueryRepository from adapters.postgres_query import PgReadingQueryRepository
from adapters.mqtt import PahoMqttBroker
from services.uplink_service import UplinkService
from services.consumption_service import ConsumptionService from services.consumption_service import ConsumptionService
MQTT_HOST = os.getenv("MQTT_HOST", "mosquitto")
MQTT_PORT = int(os.getenv("MQTT_PORT", 1883))
MQTT_TOPIC = os.getenv("MQTT_TOPIC", "application/+/device/+/event/up")
DB_URI = os.getenv("DATABASE_URI", "postgresql://simugaz:simugaz@db/simugaz")
@lru_cache @lru_cache
def get_conn(): def get_conn():
return connect(os.getenv("DATABASE_URL", "postgresql://simugaz:simugaz@db/simugaz")) return connect(DB_URI)
## Repositories ## Repositories
def get_device_repo() -> PgDeviceRepository:
return PgDeviceRepository(get_conn())
def get_reading_repo() -> PgReadingRepository:
return PgReadingRepository(get_conn())
def get_query_repo() -> PgReadingQueryRepository: def get_query_repo() -> PgReadingQueryRepository:
return PgReadingQueryRepository(get_conn()) return PgReadingQueryRepository(get_conn())
## Services ## Services
def get_uplink_service() -> UplinkService:
return UplinkService(get_device_repo(), get_reading_repo())
def get_consumption_service() -> ConsumptionService: def get_consumption_service() -> ConsumptionService:
return ConsumptionService(get_query_repo()) return ConsumptionService(get_query_repo())
## Adapters ## Adapters
def get_mqtt_broker() -> PahoMqttBroker:
return PahoMqttBroker(MQTT_HOST, MQTT_PORT, MQTT_TOPIC)