Skip to content

Commit 66a21e6

Browse files
committed
New model for ModerationLog
1 parent 36c8bce commit 66a21e6

File tree

3 files changed

+35
-0
lines changed

3 files changed

+35
-0
lines changed

h/models/__init__.py

+1
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
from h.models.group_scope import GroupScope
3535
from h.models.job import Job
3636
from h.models.mention import Mention
37+
from h.models.moderation_log import ModerationLog
3738
from h.models.notification import Notification
3839
from h.models.organization import Organization
3940
from h.models.setting import Setting

h/models/annotation.py

+8
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import datetime
22
from enum import Enum
3+
from typing import TYPE_CHECKING
34
from uuid import UUID
45

56
import sqlalchemy as sa
@@ -13,6 +14,9 @@
1314
from h.util import markdown_render, uri
1415
from h.util.user import split_user
1516

17+
if TYPE_CHECKING:
18+
from h.models.moderation_log import ModerationLog
19+
1620

1721
class ModerationStatus(Enum):
1822
APPROVED = "APPROVED"
@@ -160,6 +164,10 @@ class Annotation(Base):
160164
None means the annotation is either "approved" before this column was added or it's a private annotation.
161165
"""
162166

167+
moderation_log: Mapped[list["ModerationLog"]] = relationship(
168+
"ModerationLog", back_populates="annotation"
169+
)
170+
163171
@property
164172
def uuid(self):
165173
"""

h/models/moderation_log.py

+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
from sqlalchemy import ForeignKey
2+
from sqlalchemy.orm import (
3+
Mapped,
4+
MappedAsDataclass,
5+
mapped_column,
6+
relationship,
7+
)
8+
9+
from h.db import Base, types
10+
from h.db.mixins_dataclasses import AutoincrementingIntegerID, CreatedMixin
11+
from h.models.annotation import ModerationStatus
12+
13+
14+
class ModerationLog(Base, AutoincrementingIntegerID, CreatedMixin, MappedAsDataclass):
15+
__tablename__ = "moderation_log"
16+
17+
moderator_id: Mapped[int] = mapped_column(ForeignKey("user.id", ondelete="CASCADE"))
18+
moderator = relationship("User")
19+
20+
annotation_id: Mapped[types.URLSafeUUID] = mapped_column(
21+
ForeignKey("annotation.id", ondelete="CASCADE"), index=True
22+
)
23+
annotation = relationship("Annotation")
24+
25+
old_moderation_status: Mapped[ModerationStatus | None] = mapped_column()
26+
new_moderation_status: Mapped[ModerationStatus] = mapped_column()

0 commit comments

Comments
 (0)