Phase 1 (Foundation): - Project restructure (presenton-main → backend/ + frontend/) - Database schema (8 new models, Alembic config, seed script) - Auth (Azure AD SSO + dev bypass, JWT sessions, AuthMiddleware) - RBAC (access_service, rbac_middleware, admin routers) - Audit logging (fire-and-forget, AuditMiddleware, admin router) - i18n (react-i18next with 5 namespace files) Phase 2 (Admin Panel & Client Management): - Admin panel shell (sidebar layout, role guard, 12 pages) - Redux admin slice with 18 async thunks - User management (role changes, deactivation) - Client management (CRUD, brand config, team management) - Brand config editor (colors, fonts, logos, voice rules) - Master deck upload & parser (PPTX → HTML → React pipeline) - Audit log viewer with filters and CSV/JSON export Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
35 lines
1,004 B
Python
35 lines
1,004 B
Python
"""Seed the database with the default Oliver Team."""
|
|
import asyncio
|
|
import uuid
|
|
from datetime import datetime, timezone
|
|
|
|
from sqlmodel import select
|
|
from services.database import async_session_maker
|
|
from models.sql.team import TeamModel
|
|
|
|
|
|
async def seed():
|
|
async with async_session_maker() as session:
|
|
result = await session.execute(
|
|
select(TeamModel).where(TeamModel.is_default == True) # noqa: E712
|
|
)
|
|
existing = result.scalar_one_or_none()
|
|
|
|
if existing:
|
|
print(f"Oliver Team already exists (id: {existing.id}), skipping seed.")
|
|
return
|
|
|
|
oliver_team = TeamModel(
|
|
id=uuid.uuid4(),
|
|
name="Oliver Team",
|
|
client_id=None,
|
|
is_default=True,
|
|
created_at=datetime.now(timezone.utc),
|
|
)
|
|
session.add(oliver_team)
|
|
await session.commit()
|
|
print(f"Created Oliver Team with id: {oliver_team.id}")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
asyncio.run(seed())
|