41 lines
1.4 KiB
Python
41 lines
1.4 KiB
Python
"""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)
|