51 lines
1.5 KiB
Python
51 lines
1.5 KiB
Python
"""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
|
|
|
|
|
|
def get_now() -> datetime:
|
|
"""Get proper timestamp."""
|
|
return datetime.now(tz=timezone.utc)
|
|
|
|
|
|
def get_id() -> str:
|
|
"""Get nanoid."""
|
|
return nanoid.generate(size=16)
|
|
|
|
|
|
@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)
|