Skip to content

Commit

Permalink
API & Client - create a notification on comment/workout (un-)suspension
Browse files Browse the repository at this point in the history
and user warning
  • Loading branch information
SamR1 committed Jul 24, 2024
1 parent 2484ae8 commit 23b5375
Show file tree
Hide file tree
Showing 10 changed files with 532 additions and 20 deletions.
29 changes: 27 additions & 2 deletions fittrackee/administration/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@
from sqlalchemy.orm.session import Session

from fittrackee import BaseModel, db
from fittrackee.users.models import User
from fittrackee.users.models import Notification, User
from fittrackee.utils import encode_uuid

from .exceptions import (
Expand Down Expand Up @@ -311,8 +311,33 @@ def serialize(self, current_user: User) -> Dict:
return appeal


@listens_for(AdminAction, 'after_insert')
def on_admin_insert(
mapper: Mapper, connection: Connection, new_action: AdminAction
) -> None:
@listens_for(db.Session, 'after_flush', once=True)
def receive_after_flush(session: Session, context: Connection) -> None:
from fittrackee.administration.models import (
COMMENT_ACTION_TYPES,
WORKOUT_ACTION_TYPES,
)

if (
new_action.action_type
in COMMENT_ACTION_TYPES + WORKOUT_ACTION_TYPES + ["user_warning"]
):
notification = Notification(
from_user_id=new_action.admin_user_id,
to_user_id=new_action.user_id,
created_at=new_action.created_at,
event_type=new_action.action_type,
event_object_id=new_action.id,
)
session.add(notification)


@listens_for(AdminActionAppeal, 'after_insert')
def on_report_insert(
def on_admin_action_appeal_insert(
mapper: Mapper, connection: Connection, new_appeal: AdminActionAppeal
) -> None:
@listens_for(db.Session, 'after_flush', once=True)
Expand Down
23 changes: 22 additions & 1 deletion fittrackee/tests/mixins.py
Original file line number Diff line number Diff line change
Expand Up @@ -402,16 +402,37 @@ def create_admin_action(
self,
admin_user: User,
user: User,
*,
action_type: Optional[str] = None,
report_id: Optional[int] = None,
comment_id: Optional[int] = None,
workout_id: Optional[int] = None,
) -> AdminAction:
if action_type in REPORT_ACTION_TYPES and not report_id:
report_id = self.create_report(admin_user, user).id
admin_action = AdminAction(
admin_user_id=admin_user.id,
action_type=action_type if action_type else "user_suspension",
comment_id=(
comment_id
if (
comment_id
and action_type
and action_type.startswith("comment_")
)
else None
),
report_id=report_id,
user_id=user.id,
workout_id=(
workout_id
if (
workout_id
and action_type
and action_type.startswith("workout_")
)
else None
),
)
db.session.add(admin_action)
db.session.commit()
Expand All @@ -426,7 +447,7 @@ def create_user_suspension_action(
if not report_id:
report_id = self.create_user_report(admin, user).id
admin_action = self.create_admin_action(
admin, user, "user_suspension", report_id
admin, user, action_type="user_suspension", report_id=report_id
)
user.suspended_at = datetime.utcnow()
db.session.commit()
Expand Down
5 changes: 4 additions & 1 deletion fittrackee/tests/reports/test_reports_api.py
Original file line number Diff line number Diff line change
Expand Up @@ -2038,7 +2038,10 @@ def test_it_returns_400_when_when_user_already_warned(
app, user_1_admin.email
)
self.create_admin_action(
user_1_admin, user_2, "user_warning", report.id
user_1_admin,
user_2,
action_type="user_warning",
report_id=report.id,
)
db.session.commit()

Expand Down
Loading

0 comments on commit 23b5375

Please sign in to comment.