diff --git a/tests/unit/test_package_schema.py b/tests/unit/test_package_schema.py new file mode 100644 index 0000000..87badc5 --- /dev/null +++ b/tests/unit/test_package_schema.py @@ -0,0 +1,21 @@ +from vigilar.constants import EventType +from vigilar.storage.schema import package_events + + +def test_package_delivered_event_type(): + assert EventType.PACKAGE_DELIVERED == "PACKAGE_DELIVERED" + + +def test_package_reminder_event_type(): + assert EventType.PACKAGE_REMINDER == "PACKAGE_REMINDER" + + +def test_package_collected_event_type(): + assert EventType.PACKAGE_COLLECTED == "PACKAGE_COLLECTED" + + +def test_package_events_table_columns(): + col_names = [c.name for c in package_events.columns] + assert "camera_id" in col_names + assert "detected_at" in col_names + assert "status" in col_names diff --git a/vigilar/constants.py b/vigilar/constants.py index b328992..530a5f8 100644 --- a/vigilar/constants.py +++ b/vigilar/constants.py @@ -45,6 +45,9 @@ class EventType(StrEnum): WILDLIFE_PREDATOR = "WILDLIFE_PREDATOR" WILDLIFE_NUISANCE = "WILDLIFE_NUISANCE" WILDLIFE_PASSIVE = "WILDLIFE_PASSIVE" + PACKAGE_DELIVERED = "PACKAGE_DELIVERED" + PACKAGE_REMINDER = "PACKAGE_REMINDER" + PACKAGE_COLLECTED = "PACKAGE_COLLECTED" # --- Sensor Types --- @@ -180,6 +183,18 @@ class Topics: def camera_wildlife_detected(camera_id: str) -> str: return f"vigilar/camera/{camera_id}/wildlife/detected" + @staticmethod + def camera_package_delivered(camera_id: str) -> str: + return f"vigilar/camera/{camera_id}/package/delivered" + + @staticmethod + def camera_package_reminder(camera_id: str) -> str: + return f"vigilar/camera/{camera_id}/package/reminder" + + @staticmethod + def camera_package_collected(camera_id: str) -> str: + return f"vigilar/camera/{camera_id}/package/collected" + @staticmethod def pet_location(pet_name: str) -> str: return f"vigilar/pets/{pet_name}/location" diff --git a/vigilar/storage/schema.py b/vigilar/storage/schema.py index d083ba1..cd69034 100644 --- a/vigilar/storage/schema.py +++ b/vigilar/storage/schema.py @@ -172,6 +172,20 @@ wildlife_sightings = Table( Index("idx_wildlife_ts", wildlife_sightings.c.ts.desc()) Index("idx_wildlife_threat", wildlife_sightings.c.threat_level, wildlife_sightings.c.ts.desc()) +package_events = Table( + "package_events", + metadata, + Column("id", Integer, primary_key=True, autoincrement=True), + Column("camera_id", String, nullable=False), + Column("detected_at", Float, nullable=False), + Column("reminded_at", Float), + Column("collected_at", Float), + Column("status", String, nullable=False), + Column("crop_path", String), + Column("event_id", Integer), +) +Index("idx_package_camera_status", package_events.c.camera_id, package_events.c.status) + pet_training_images = Table( "pet_training_images", metadata,