import os from functools import lru_cache from adapters.postgres import connect, PgDeviceRepository, PgReadingRepository from adapters.postgres_query import PgReadingQueryRepository from adapters.mqtt import PahoMqttBroker from services.uplink_service import UplinkService 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 def get_conn(): return connect(DB_URI) ## Repositories def get_device_repo() -> PgDeviceRepository: return PgDeviceRepository(get_conn()) def get_reading_repo() -> PgReadingRepository: return PgReadingRepository(get_conn()) def get_query_repo() -> PgReadingQueryRepository: return PgReadingQueryRepository(get_conn()) ## Services def get_uplink_service() -> UplinkService: return UplinkService(get_device_repo(), get_reading_repo()) def get_consumption_service() -> ConsumptionService: return ConsumptionService(get_query_repo()) ## Adapters def get_mqtt_broker() -> PahoMqttBroker: return PahoMqttBroker(MQTT_HOST, MQTT_PORT, MQTT_TOPIC)