mirror of
https://github.com/zulip/zulip.git
synced 2025-11-03 13:33:24 +00:00
This demonstrates the use of BaseModel to replace a check_dict_only validator. We also add support to referring to $defs in the OpenAPI tests. In the future, we can descend down each object instead of mapping them to dict for more accurate checks.
55 lines
1.5 KiB
Python
55 lines
1.5 KiB
Python
from typing import List
|
|
|
|
from django.http import HttpRequest, HttpResponse
|
|
from pydantic import Json
|
|
|
|
from zerver.lib.drafts import (
|
|
DraftData,
|
|
do_create_drafts,
|
|
do_delete_draft,
|
|
do_edit_draft,
|
|
draft_endpoint,
|
|
)
|
|
from zerver.lib.response import json_success
|
|
from zerver.lib.typed_endpoint import PathOnly, typed_endpoint
|
|
from zerver.models import Draft, UserProfile
|
|
|
|
|
|
@draft_endpoint
|
|
def fetch_drafts(request: HttpRequest, user_profile: UserProfile) -> HttpResponse:
|
|
user_drafts = Draft.objects.filter(user_profile=user_profile).order_by("last_edit_time")
|
|
draft_dicts = [draft.to_dict() for draft in user_drafts]
|
|
return json_success(request, data={"count": user_drafts.count(), "drafts": draft_dicts})
|
|
|
|
|
|
@draft_endpoint
|
|
@typed_endpoint
|
|
def create_drafts(
|
|
request: HttpRequest,
|
|
user_profile: UserProfile,
|
|
*,
|
|
drafts: Json[List[DraftData]],
|
|
) -> HttpResponse:
|
|
created_draft_objects = do_create_drafts(drafts, user_profile)
|
|
draft_ids = [draft_object.id for draft_object in created_draft_objects]
|
|
return json_success(request, data={"ids": draft_ids})
|
|
|
|
|
|
@draft_endpoint
|
|
@typed_endpoint
|
|
def edit_draft(
|
|
request: HttpRequest,
|
|
user_profile: UserProfile,
|
|
*,
|
|
draft_id: PathOnly[int],
|
|
draft: Json[DraftData],
|
|
) -> HttpResponse:
|
|
do_edit_draft(draft_id, draft, user_profile)
|
|
return json_success(request)
|
|
|
|
|
|
@draft_endpoint
|
|
def delete_draft(request: HttpRequest, user_profile: UserProfile, *, draft_id: int) -> HttpResponse:
|
|
do_delete_draft(draft_id, user_profile)
|
|
return json_success(request)
|