"""Modlog database models.""" from datetime import datetime, timezone from typing import List from bson import ObjectId from umongo import Document, EmbeddedDocument, fields from jarvis_core.db import JARVIS_INST from jarvis_core.db.utils import get_id, get_now @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.AwareDateTimeField(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.AwareDateTimeField(default=get_now) notes: List[Note] = fields.ListField(fields.EmbeddedField(Note), factory=list)