finish branch
This commit is contained in:
parent
66bc4c5a45
commit
40ca82bb45
11 changed files with 139 additions and 128 deletions
|
|
@ -1,11 +1,11 @@
|
|||
"""Seed the database with roles, permissions, and dev users."""
|
||||
import asyncio
|
||||
import os
|
||||
from typing import List
|
||||
from sqlalchemy import select
|
||||
from sqlalchemy.ext.asyncio import AsyncSession
|
||||
|
||||
from database import engine, async_session, Base
|
||||
from models import User, Role, Permission, role_permissions, ROLE_DEFINITIONS
|
||||
from models import User, Role, Permission, role_permissions, ROLE_DEFINITIONS, ROLE_REGULAR, ROLE_ADMIN
|
||||
from auth import get_password_hash
|
||||
|
||||
DEV_USER_EMAIL = os.environ["DEV_USER_EMAIL"]
|
||||
|
|
@ -14,7 +14,7 @@ DEV_ADMIN_EMAIL = os.environ["DEV_ADMIN_EMAIL"]
|
|||
DEV_ADMIN_PASSWORD = os.environ["DEV_ADMIN_PASSWORD"]
|
||||
|
||||
|
||||
async def upsert_role(db, name: str, description: str, permissions: List[Permission]) -> Role:
|
||||
async def upsert_role(db: AsyncSession, name: str, description: str, permissions: list[Permission]) -> Role:
|
||||
"""Create or update a role with the given permissions."""
|
||||
result = await db.execute(select(Role).where(Role.name == name))
|
||||
role = result.scalar_one_or_none()
|
||||
|
|
@ -35,7 +35,7 @@ async def upsert_role(db, name: str, description: str, permissions: List[Permiss
|
|||
return role
|
||||
|
||||
|
||||
async def upsert_user(db, email: str, password: str, role_names: List[str]) -> User:
|
||||
async def upsert_user(db: AsyncSession, email: str, password: str, role_names: list[str]) -> User:
|
||||
"""Create or update a user with the given credentials and roles."""
|
||||
result = await db.execute(select(User).where(User.email == email))
|
||||
user = result.scalar_one_or_none()
|
||||
|
|
@ -45,12 +45,13 @@ async def upsert_user(db, email: str, password: str, role_names: List[str]) -> U
|
|||
for role_name in role_names:
|
||||
result = await db.execute(select(Role).where(Role.name == role_name))
|
||||
role = result.scalar_one_or_none()
|
||||
if role:
|
||||
roles.append(role)
|
||||
if not role:
|
||||
raise ValueError(f"Role '{role_name}' not found")
|
||||
roles.append(role)
|
||||
|
||||
if user:
|
||||
user.hashed_password = get_password_hash(password)
|
||||
user.roles = roles
|
||||
user.roles = roles # type: ignore[assignment]
|
||||
print(f"Updated user: {email} with roles: {role_names}")
|
||||
else:
|
||||
user = User(
|
||||
|
|
@ -64,7 +65,7 @@ async def upsert_user(db, email: str, password: str, role_names: List[str]) -> U
|
|||
return user
|
||||
|
||||
|
||||
async def seed():
|
||||
async def seed() -> None:
|
||||
async with engine.begin() as conn:
|
||||
await conn.run_sync(Base.metadata.create_all)
|
||||
|
||||
|
|
@ -80,10 +81,10 @@ async def seed():
|
|||
|
||||
print("\n=== Seeding Users ===")
|
||||
# Create regular dev user
|
||||
await upsert_user(db, DEV_USER_EMAIL, DEV_USER_PASSWORD, ["regular"])
|
||||
await upsert_user(db, DEV_USER_EMAIL, DEV_USER_PASSWORD, [ROLE_REGULAR])
|
||||
|
||||
# Create admin dev user
|
||||
await upsert_user(db, DEV_ADMIN_EMAIL, DEV_ADMIN_PASSWORD, ["admin"])
|
||||
await upsert_user(db, DEV_ADMIN_EMAIL, DEV_ADMIN_PASSWORD, [ROLE_ADMIN])
|
||||
|
||||
await db.commit()
|
||||
print("\n=== Seeding Complete ===\n")
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue