feat(Q5): add package event types and package_events table

This commit is contained in:
Aaron D. Lee 2026-04-03 18:41:31 -04:00
parent 38ff219364
commit a5dd15d0a1
3 changed files with 50 additions and 0 deletions

View File

@ -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

View File

@ -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"

View File

@ -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,