"""Modlog database models.""" from datetime import datetime, timezone from functools import partial from bson import ObjectId from beanie import Document from pydantic import BaseModel, Field NANOID_ALPHA = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz" def get_now() -> datetime: """Get proper timestamp.""" return datetime.now(tz=timezone.utc) def get_id() -> str: """Get nanoid.""" return nanoid.generate(NANOID_ALPHA, 12) NanoField = partial(Field, default_factory=get_id) NowField = partial(Field, default_factory=get_now) class Action(BaseModel): """Modlog embedded action document.""" action_type: str parent: ObjectId orphaned: bool = False class Note(BaseModel): """Modlog embedded note document.""" admin: int content: str created_at: datetime = NowField() class Modlog(Document): """Modlog database object.""" user: int nanoid: str = NanoField() guild: int admin: int actions: list[Action] = Field(default_factory=list) notes: list[Note] = Field(default_factory=list) open: bool = True created_at: datetime = NowField