63 lines
2.5 KiB
Python
63 lines
2.5 KiB
Python
# /opt/docker/dev/service_finder/backend/app/scripts/seed_validation_rules.py
|
|
"""
|
|
Seed script for gamification.validation_rules table.
|
|
|
|
Inserts the base validation rules required by the P0 Architecture:
|
|
|
|
BOT_BASE_SCORE = 20 # Default trust score for robot-discovered entries
|
|
FIRST_ENTRY_SCORE = 40 # Score awarded for the first user entry
|
|
USER_CONFIRM_BASE = 20 # Base score per user confirmation vote
|
|
AUTO_APPROVE_THRESHOLD = 80 # Minimum validation_level to auto-promote
|
|
|
|
Usage:
|
|
docker exec -it sf_api python -m app.scripts.seed_validation_rules
|
|
"""
|
|
import asyncio
|
|
import logging
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
sys.path.insert(0, str(Path(__file__).parent.parent.parent))
|
|
|
|
from app.database import AsyncSessionLocal
|
|
from app.models.gamification.validation_rule import ValidationRule
|
|
from sqlalchemy import select
|
|
|
|
logging.basicConfig(level=logging.INFO, format='%(asctime)s [%(levelname)s] %(name)s: %(message)s')
|
|
logger = logging.getLogger("SeedValidationRules")
|
|
|
|
BASE_RULES = [
|
|
{"rule_key": "BOT_BASE_SCORE", "rule_value": 20, "description": "Default trust score for robot-discovered service entries"},
|
|
{"rule_key": "FIRST_ENTRY_SCORE", "rule_value": 40, "description": "Score awarded for the first user-submitted service entry"},
|
|
{"rule_key": "USER_CONFIRM_BASE", "rule_value": 20, "description": "Base score per user confirmation vote (level multiplier added)"},
|
|
{"rule_key": "AUTO_APPROVE_THRESHOLD", "rule_value": 80, "description": "Minimum validation_level required for auto-promotion to provider"},
|
|
]
|
|
|
|
|
|
async def seed():
|
|
async with AsyncSessionLocal() as db:
|
|
for rule_data in BASE_RULES:
|
|
# Check if rule already exists
|
|
stmt = select(ValidationRule).where(ValidationRule.rule_key == rule_data["rule_key"])
|
|
result = await db.execute(stmt)
|
|
existing = result.scalar_one_or_none()
|
|
|
|
if existing:
|
|
logger.info(f"Rule '{rule_data['rule_key']}' already exists (value={existing.rule_value}), skipping.")
|
|
continue
|
|
|
|
rule = ValidationRule(
|
|
rule_key=rule_data["rule_key"],
|
|
rule_value=rule_data["rule_value"],
|
|
description=rule_data["description"],
|
|
)
|
|
db.add(rule)
|
|
logger.info(f"Created rule '{rule_data['rule_key']}' = {rule_data['rule_value']}")
|
|
|
|
await db.commit()
|
|
logger.info("✅ Validation rules seeded successfully.")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
asyncio.run(seed())
|