from datetime import date, timedelta from decimal import Decimal from sqlalchemy import func, select from app.database import SessionLocal from app.models.transaction import Transaction, TransactionType from app.models.user import UserRole from app.schemas.user import UserCreate from app.services.user_service import create_user, get_user_by_email def seed_users() -> None: users = [ UserCreate(email="admin@test.com", password="admin123", full_name="Admin User", role=UserRole.admin), UserCreate(email="analyst@test.com", password="analyst123", full_name="Analyst User", role=UserRole.analyst), UserCreate(email="viewer@test.com", password="viewer123", full_name="Viewer User", role=UserRole.viewer), ] transaction_templates = [ (Decimal("4500.00"), TransactionType.income, "Salary"), (Decimal("1200.00"), TransactionType.expense, "Rent"), (Decimal("300.00"), TransactionType.expense, "Food"), (Decimal("700.00"), TransactionType.income, "Freelance"), (Decimal("150.00"), TransactionType.expense, "Utilities"), ] with SessionLocal() as db: created_users = [] for payload in users: user = get_user_by_email(db, payload.email) if user is None: user = create_user(db, payload) created_users.append(user) existing_transactions = db.scalar(select(func.count()).select_from(Transaction)) or 0 if existing_transactions and existing_transactions >= 20: return start_date = date.today() - timedelta(days=180) entries = [] for index in range(20): owner = created_users[index % len(created_users)] amount, tx_type, category = transaction_templates[index % len(transaction_templates)] entries.append( Transaction( user_id=owner.id, amount=amount + Decimal(index * 10), type=tx_type, category=category, date=start_date + timedelta(days=index * 7), description=f"Seeded transaction {index + 1}", ) ) db.add_all(entries) db.commit() if __name__ == "__main__": seed_users()