MCPcopy
hub / github.com/dataelement/Clawith / create_company

Function create_company

backend/app/api/admin.py:141–178  ·  view source on GitHub ↗

Create a new company and generate an admin invitation code (max_uses=1).

(
    data: CompanyCreateRequest,
    current_user: User = Depends(require_role("platform_admin")),
    db: AsyncSession = Depends(get_db),
)

Source from the content-addressed store, hash-verified

139
140@router.post("/companies", response_model=CompanyCreateResponse, status_code=201)
141async def create_company(
142 data: CompanyCreateRequest,
143 current_user: User = Depends(require_role("platform_admin")),
144 db: AsyncSession = Depends(get_db),
145):
146 """Create a new company and generate an admin invitation code (max_uses=1)."""
147 import re
148
149 slug = re.sub(r"[^a-z0-9]+", "-", data.name.lower().strip()).strip("-")[:40]
150 if not slug:
151 slug = "company"
152 slug = f"{slug}-{secrets.token_hex(3)}"
153
154 tenant = Tenant(name=data.name, slug=slug, im_provider="web_only")
155 db.add(tenant)
156 await db.flush()
157
158 # Generate admin invitation code (single-use)
159 code_str = secrets.token_urlsafe(12)[:16].upper()
160 invite = InvitationCode(
161 code=code_str,
162 tenant_id=tenant.id,
163 max_uses=1,
164 created_by=current_user.id,
165 )
166 db.add(invite)
167 await db.flush()
168
169 return CompanyCreateResponse(
170 company=CompanyStats(
171 id=tenant.id,
172 name=tenant.name,
173 slug=tenant.slug,
174 is_active=tenant.is_active,
175 created_at=tenant.created_at,
176 ),
177 admin_invitation_code=code_str,
178 )
179
180
181@router.put("/companies/{company_id}/toggle")

Callers

nothing calls this directly

Calls 7

require_roleFunction · 0.90
TenantClass · 0.90
InvitationCodeClass · 0.90
CompanyStatsClass · 0.85
addMethod · 0.45
flushMethod · 0.45

Tested by

no test coverage detected