Admin mode. Data driven content sections. Bugfixes.
This commit is contained in:
+23
-1
@@ -7,7 +7,8 @@ from sqlalchemy import func, select
|
||||
from app.config import settings
|
||||
from app.database import async_session, engine
|
||||
from app.models import Base, Program
|
||||
from app.api import programs, events, tiers
|
||||
from app.user_models import User
|
||||
from app.api import programs, events, tiers, auth
|
||||
|
||||
|
||||
@asynccontextmanager
|
||||
@@ -25,6 +26,26 @@ async def lifespan(app: FastAPI):
|
||||
from seed import seed as run_seed
|
||||
await run_seed()
|
||||
|
||||
# Bootstrap admin user if configured
|
||||
if settings.ADMIN_USERNAME and settings.ADMIN_PASSWORD:
|
||||
async with async_session() as session:
|
||||
result = await session.execute(
|
||||
select(User).where(
|
||||
User.email == f"{settings.ADMIN_USERNAME}@local",
|
||||
User.auth_provider == "local",
|
||||
)
|
||||
)
|
||||
if result.scalar_one_or_none() is None:
|
||||
admin_user = User(
|
||||
email=f"{settings.ADMIN_USERNAME}@local",
|
||||
display_name=settings.ADMIN_USERNAME,
|
||||
auth_provider="local",
|
||||
is_admin=True,
|
||||
)
|
||||
session.add(admin_user)
|
||||
await session.commit()
|
||||
print(f" → Bootstrap admin created: {settings.ADMIN_USERNAME}")
|
||||
|
||||
yield
|
||||
|
||||
|
||||
@@ -44,6 +65,7 @@ app.add_middleware(
|
||||
)
|
||||
|
||||
# Register routers
|
||||
app.include_router(auth.router, prefix="/api/auth", tags=["auth"])
|
||||
app.include_router(programs.router, prefix="/api/programs", tags=["programs"])
|
||||
app.include_router(events.router, prefix="/api/events", tags=["events"])
|
||||
app.include_router(tiers.router, prefix="/api/tiers", tags=["tiers"])
|
||||
|
||||
Reference in New Issue
Block a user