feat: auto-create organization when user registers
This commit is contained in:
parent
9f73a48e56
commit
4e44c8f7be
|
|
@ -6,11 +6,20 @@ from sqlalchemy import select
|
||||||
from app.core.database import get_db
|
from app.core.database import get_db
|
||||||
from app.core.security import verify_password, get_password_hash, create_access_token, create_refresh_token, decode_token
|
from app.core.security import verify_password, get_password_hash, create_access_token, create_refresh_token, decode_token
|
||||||
from app.models.user import User
|
from app.models.user import User
|
||||||
|
from app.models.organization import Organization, OrganizationMember, MemberRole
|
||||||
from app.schemas.user import UserCreate, UserRead, Token
|
from app.schemas.user import UserCreate, UserRead, Token
|
||||||
from app.services.audit import AuditService
|
from app.services.audit import AuditService
|
||||||
|
import re
|
||||||
|
|
||||||
router = APIRouter()
|
router = APIRouter()
|
||||||
|
|
||||||
|
def slugify(text: str) -> str:
|
||||||
|
"""Convert text to URL-friendly slug."""
|
||||||
|
text = text.lower()
|
||||||
|
text = re.sub(r'[^\w\s-]', '', text)
|
||||||
|
text = re.sub(r'[-\s]+', '-', text)
|
||||||
|
return text.strip('-')
|
||||||
|
|
||||||
@router.post("/register", response_model=Token)
|
@router.post("/register", response_model=Token)
|
||||||
async def register(
|
async def register(
|
||||||
user_in: UserCreate,
|
user_in: UserCreate,
|
||||||
|
|
@ -35,6 +44,26 @@ async def register(
|
||||||
db.add(user)
|
db.add(user)
|
||||||
await db.flush()
|
await db.flush()
|
||||||
|
|
||||||
|
# Create default organization for user
|
||||||
|
org_name = user_in.full_name or user_in.email.split('@')[0]
|
||||||
|
org_slug = slugify(org_name) + f"-{user.id}"
|
||||||
|
|
||||||
|
organization = Organization(
|
||||||
|
name=f"{org_name}'s Organization",
|
||||||
|
slug=org_slug
|
||||||
|
)
|
||||||
|
db.add(organization)
|
||||||
|
await db.flush()
|
||||||
|
|
||||||
|
# Add user as organization owner
|
||||||
|
membership = OrganizationMember(
|
||||||
|
organization_id=organization.id,
|
||||||
|
user_id=user.id,
|
||||||
|
role=MemberRole.OWNER
|
||||||
|
)
|
||||||
|
db.add(membership)
|
||||||
|
await db.flush()
|
||||||
|
|
||||||
# Audit log
|
# Audit log
|
||||||
await AuditService.log(
|
await AuditService.log(
|
||||||
db,
|
db,
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue