Database cleanup, better UUID passing and construction (User model).

This commit is contained in:
2026-01-27 01:25:52 +00:00
parent 4ddaa9fdf4
commit 0f29544bdb
5 changed files with 68 additions and 56 deletions
+26 -13
View File
@@ -2,6 +2,7 @@ from datetime import datetime
from uuid import UUID
import msgspec
import uuid7
class Permission(msgspec.Struct, omit_defaults=True):
@@ -25,14 +26,34 @@ class Org(msgspec.Struct):
roles: list[Role] = [] # roles belonging to this org
class User(msgspec.Struct):
uuid: UUID
class User(msgspec.Struct, dict=True):
display_name: str
role_uuid: UUID
created_at: datetime | None = None
role: UUID
created_at: datetime
last_seen: datetime | None = None
visits: int = 0
def __post_init__(self):
self.uuid: UUID | None = None # Convenience field, not serialized
@classmethod
def create(
cls,
display_name: str,
role: UUID,
created_at: datetime | None = None,
) -> "User":
"""Create a new User with auto-generated uuid7."""
from datetime import timezone
user = cls(
display_name=display_name,
role=role,
created_at=created_at or datetime.now(timezone.utc),
)
user.uuid = uuid7.create(user.created_at)
return user
class Credential(msgspec.Struct):
uuid: UUID
@@ -103,14 +124,6 @@ class _RoleData(msgspec.Struct):
permissions: dict[UUID, bool] = {} # permission_uuid -> True
class _UserData(msgspec.Struct):
display_name: str
role: UUID
created_at: datetime
last_seen: datetime | None
visits: int
class _CredentialData(msgspec.Struct):
credential_id: bytes
user: UUID
@@ -141,7 +154,7 @@ class _DatabaseData(msgspec.Struct, omit_defaults=True):
permissions: dict[UUID, _PermissionData]
orgs: dict[UUID, _OrgData]
roles: dict[UUID, _RoleData]
users: dict[UUID, _UserData]
users: dict[UUID, User]
credentials: dict[UUID, _CredentialData]
sessions: dict[str, _SessionData]
reset_tokens: dict[bytes, _ResetTokenData]