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.security import verify_password, get_password_hash, create_access_token, create_refresh_token, decode_token
|
||||
from app.models.user import User
|
||||
from app.models.organization import Organization, OrganizationMember, MemberRole
|
||||
from app.schemas.user import UserCreate, UserRead, Token
|
||||
from app.services.audit import AuditService
|
||||
import re
|
||||
|
||||
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)
|
||||
async def register(
|
||||
user_in: UserCreate,
|
||||
|
|
@ -35,6 +44,26 @@ async def register(
|
|||
db.add(user)
|
||||
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
|
||||
await AuditService.log(
|
||||
db,
|
||||
|
|
|
|||
Loading…
Reference in New Issue