Finance-Assessment / seed_data.py
aayushhh-operator's picture
Upload 56 files
cf35fad verified
Raw
History Blame Contribute Delete
2.36 kB
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()