from datetime import datetime from typing import Literal from pydantic import BaseModel, EmailStr, Field TenantRole = Literal["owner", "admin", "member", "viewer"] class WorkspaceCreate(BaseModel): organization_name: str = Field(min_length=2, max_length=160) workspace_name: str = Field(min_length=2, max_length=160) class WorkspaceResponse(BaseModel): id: int organization_id: int organization_name: str name: str slug: str role: TenantRole created_at: datetime class MemberResponse(BaseModel): user_id: int email: EmailStr full_name: str username: str role: TenantRole joined_at: datetime class InvitationCreate(BaseModel): email: EmailStr role: Literal["admin", "member", "viewer"] = "member" class InvitationResponse(BaseModel): id: int workspace_id: int email: EmailStr role: TenantRole expires_at: datetime accepted: bool token: str | None = None invite_url: str | None = None class AuditEventResponse(BaseModel): id: int action: str target: str actor_id: int created_at: datetime class RoleUpdate(BaseModel): role: Literal["admin", "member", "viewer"]