mirror of https://github.com/zulip/zulip.git
63 lines
1.9 KiB
Python
63 lines
1.9 KiB
Python
|
from typing import Any
|
||
|
|
||
|
from django.db import transaction
|
||
|
from django.utils.timezone import now as timezone_now
|
||
|
from django.utils.translation import gettext as _
|
||
|
|
||
|
from zerver.lib.exceptions import ResourceNotFoundError
|
||
|
from zerver.models import RealmAuditLog, SavedSnippet, UserProfile
|
||
|
from zerver.models.realm_audit_logs import AuditLogEventType
|
||
|
from zerver.tornado.django_api import send_event_on_commit
|
||
|
|
||
|
|
||
|
@transaction.atomic(durable=True)
|
||
|
def do_create_saved_snippet(
|
||
|
title: str,
|
||
|
content: str,
|
||
|
user_profile: UserProfile,
|
||
|
) -> SavedSnippet:
|
||
|
saved_snippet = SavedSnippet.objects.create(
|
||
|
realm=user_profile.realm,
|
||
|
user_profile=user_profile,
|
||
|
title=title,
|
||
|
content=content,
|
||
|
)
|
||
|
|
||
|
RealmAuditLog.objects.create(
|
||
|
realm=user_profile.realm,
|
||
|
acting_user=user_profile,
|
||
|
modified_user=user_profile,
|
||
|
event_type=AuditLogEventType.SAVED_SNIPPET_CREATED,
|
||
|
event_time=timezone_now(),
|
||
|
extra_data={"saved_snippet_id": saved_snippet.id},
|
||
|
)
|
||
|
|
||
|
event = {
|
||
|
"type": "saved_snippets",
|
||
|
"op": "add",
|
||
|
"saved_snippet": saved_snippet.to_api_dict(),
|
||
|
}
|
||
|
send_event_on_commit(user_profile.realm, event, [user_profile.id])
|
||
|
|
||
|
return saved_snippet
|
||
|
|
||
|
|
||
|
def do_get_saved_snippets(user_profile: UserProfile) -> list[dict[str, Any]]:
|
||
|
saved_snippets = SavedSnippet.objects.filter(user_profile=user_profile)
|
||
|
|
||
|
return [saved_snippet.to_api_dict() for saved_snippet in saved_snippets]
|
||
|
|
||
|
|
||
|
def do_delete_saved_snippet(
|
||
|
saved_snippet_id: int,
|
||
|
user_profile: UserProfile,
|
||
|
) -> None:
|
||
|
try:
|
||
|
saved_snippet = SavedSnippet.objects.get(id=saved_snippet_id, user_profile=user_profile)
|
||
|
except SavedSnippet.DoesNotExist:
|
||
|
raise ResourceNotFoundError(_("Saved snippet does not exist."))
|
||
|
saved_snippet.delete()
|
||
|
|
||
|
event = {"type": "saved_snippets", "op": "remove", "saved_snippet_id": saved_snippet_id}
|
||
|
send_event_on_commit(user_profile.realm, event, [user_profile.id])
|