Files
gw/backend/seed.py
T
ponzischeme89 6d44e05de4 v1
2026-04-18 07:23:55 +12:00

97 lines
3.7 KiB
Python

"""
Seed script — creates default admin user, sample page, sample blog post,
and site settings. Run once after running Alembic migrations.
Usage:
python seed.py
"""
import asyncio
import sys
import os
sys.path.insert(0, os.path.dirname(os.path.abspath(__file__)))
from sqlalchemy import select
from app.database import AsyncSessionLocal, engine
from app.models.base import Base
from app.models.user import User
from app.models.page import Page
from app.models.post import BlogPost
from app.models.settings import SiteSettings
from app.auth.password import hash_password
async def seed():
async with AsyncSessionLocal() as session:
# ── Admin user ────────────────────────────────────────────────────────
existing_user = await session.execute(
select(User).where(User.email == "admin@example.com")
)
if existing_user.scalars().first() is None:
user = User(
email="admin@example.com",
hashed_password=hash_password("changeme123"),
is_active=True,
)
session.add(user)
print("Created admin user: admin@example.com / changeme123")
else:
print("Admin user already exists, skipping.")
# ── Sample Page ───────────────────────────────────────────────────────
existing_page = await session.execute(
select(Page).where(Page.slug == "home")
)
if existing_page.scalars().first() is None:
page = Page(
title="Home",
slug="home",
published=True,
body="<h1>Welcome</h1><p>This is the home page.</p>",
)
session.add(page)
print("Created sample page: Home")
else:
print("Home page already exists, skipping.")
# ── Sample BlogPost ───────────────────────────────────────────────────
existing_post = await session.execute(
select(BlogPost).where(BlogPost.slug == "hello-world")
)
if existing_post.scalars().first() is None:
post = BlogPost(
title="Hello World",
slug="hello-world",
published=True,
author="Admin",
excerpt="Our first post",
body="<p>Welcome to our blog.</p>",
tags=["news", "welcome"],
)
session.add(post)
print("Created sample blog post: Hello World")
else:
print("Hello World post already exists, skipping.")
# ── SiteSettings ──────────────────────────────────────────────────────
existing_settings = await session.execute(select(SiteSettings).limit(1))
if existing_settings.scalars().first() is None:
site_settings = SiteSettings(
site_name="Goodwalk",
tagline="Dog walking in Auckland",
logo_url="",
footer_text="© 2025 Goodwalk",
social_links={"facebook": "", "instagram": ""},
)
session.add(site_settings)
print("Created site settings.")
else:
print("Site settings already exist, skipping.")
await session.commit()
print("\nSeed complete.")
if __name__ == "__main__":
asyncio.run(seed())