"""Modlog database models.""" from datetime import datetime, timezone from typing import List import nanoid from bson import ObjectId from umongo import Document, EmbeddedDocument, fields from jarvis_core.db import JARVIS_INST 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) @JARVIS_INST.register class Action(EmbeddedDocument): """Modlog embedded action document.""" action_type: str = fields.StringField(required=True) parent: ObjectId = fields.ObjectIdField(required=True) orphaned: bool = fields.BoolField(default=False) @JARVIS_INST.register class Note(EmbeddedDocument): """Modlog embedded note document.""" admin: int = fields.IntegerField(required=True) content: str = fields.StrField(required=True) created_at: datetime = fields.DateTimeField(default=get_now) @JARVIS_INST.register class Modlog(Document): """Modlog database object.""" user: int = fields.IntegerField(required=True) nanoid: str = fields.StringField(default=get_id) guild: int = fields.IntegerField(required=True) admin: int = fields.IntegerField(required=True) actions: List[Action] = fields.ListField(fields.EmbeddedField(Action), factory=list) open: bool = fields.BoolField(default=True) created_at: datetime = fields.DateTimeField(default=get_now) notes: List[Note] = fields.ListField(fields.EmbeddedField(Note), factory=list)