feat(S5): pet rule CRUD query functions
This commit is contained in:
@@ -546,3 +546,52 @@ def update_package_status(engine: Engine, package_id: int, status: str, **kwargs
|
||||
with engine.begin() as conn:
|
||||
conn.execute(package_events.update().where(package_events.c.id == package_id)
|
||||
.values(status=status, **kwargs))
|
||||
|
||||
|
||||
# --- Pet Rules ---
|
||||
|
||||
def insert_pet_rule(engine, pet_id, name, conditions, action, action_message, cooldown_minutes, priority) -> int:
|
||||
from vigilar.storage.schema import pet_rules
|
||||
with engine.begin() as conn:
|
||||
result = conn.execute(pet_rules.insert().values(
|
||||
pet_id=pet_id, name=name, enabled=1, conditions=conditions, action=action,
|
||||
action_message=action_message, cooldown_minutes=cooldown_minutes,
|
||||
priority=priority, created_at=time.time()))
|
||||
return result.inserted_primary_key[0]
|
||||
|
||||
|
||||
def get_pet_rules(engine, pet_id) -> list[dict]:
|
||||
from vigilar.storage.schema import pet_rules
|
||||
with engine.connect() as conn:
|
||||
return [dict(r) for r in conn.execute(
|
||||
select(pet_rules).where(pet_rules.c.pet_id == pet_id)
|
||||
.order_by(pet_rules.c.priority, pet_rules.c.id)).mappings().all()]
|
||||
|
||||
|
||||
def get_all_enabled_rules(engine) -> list[dict]:
|
||||
from vigilar.storage.schema import pet_rules
|
||||
with engine.connect() as conn:
|
||||
return [dict(r) for r in conn.execute(
|
||||
select(pet_rules).where(pet_rules.c.enabled == 1)
|
||||
.order_by(pet_rules.c.priority, pet_rules.c.id)).mappings().all()]
|
||||
|
||||
|
||||
def update_pet_rule(engine, rule_id, **updates) -> None:
|
||||
from vigilar.storage.schema import pet_rules
|
||||
with engine.begin() as conn:
|
||||
conn.execute(pet_rules.update().where(pet_rules.c.id == rule_id).values(**updates))
|
||||
|
||||
|
||||
def delete_pet_rule(engine, rule_id) -> None:
|
||||
from vigilar.storage.schema import pet_rules
|
||||
with engine.begin() as conn:
|
||||
conn.execute(pet_rules.delete().where(pet_rules.c.id == rule_id))
|
||||
|
||||
|
||||
def count_pet_rules(engine, pet_id) -> int:
|
||||
from sqlalchemy import func
|
||||
from vigilar.storage.schema import pet_rules
|
||||
with engine.connect() as conn:
|
||||
return conn.execute(
|
||||
select(func.count()).select_from(pet_rules).where(pet_rules.c.pet_id == pet_id)
|
||||
).scalar() or 0
|
||||
|
||||
Reference in New Issue
Block a user