22 lines
1.5 KiB
Python
22 lines
1.5 KiB
Python
from django.core.exceptions import PermissionDenied
|
|
from django.db import transaction
|
|
from django.utils import timezone
|
|
from apps.core.persian_text import normalize_persian_text
|
|
from apps.tickets.policies import TicketPolicy
|
|
from .models import Message,MessageRevision
|
|
@transaction.atomic
|
|
def edit_message(message_id,user,body):
|
|
msg=Message.objects.select_for_update().select_related("ticket").get(pk=message_id)
|
|
if msg.author_id!=user.id or not TicketPolicy.can_view(user,msg.ticket): raise PermissionDenied
|
|
if not (user.account_type=="CUSTOMER" or user.has_perm("messaging.edit_own_message")): raise PermissionDenied
|
|
if msg.deleted_at: raise PermissionDenied
|
|
body=normalize_persian_text(body,multiline=True)
|
|
if not body: raise ValueError("متن پیام نمیتواند خالی باشد.")
|
|
MessageRevision.objects.create(message=msg,body=msg.body,edited_by=user); msg.body=body; msg.edited_at=timezone.now(); msg.save(update_fields=["body","edited_at","updated_at"]); return msg
|
|
@transaction.atomic
|
|
def soft_delete_message(message_id,user):
|
|
msg=Message.objects.select_for_update().select_related("ticket").get(pk=message_id)
|
|
may_delete=user.account_type=="CUSTOMER" or user.has_perm("messaging.delete_own_message")
|
|
if msg.author_id!=user.id or not may_delete or not TicketPolicy.can_view(user,msg.ticket): raise PermissionDenied
|
|
msg.deleted_at=timezone.now(); msg.deleted_by=user; msg.save(update_fields=["deleted_at","deleted_by","updated_at"]); return msg
|