feat(file-summary): 实现对话附件上传接口
This commit is contained in:
58
review_agent/file_summary/views.py
Normal file
58
review_agent/file_summary/views.py
Normal file
@@ -0,0 +1,58 @@
|
||||
from django.contrib.auth.decorators import login_required
|
||||
from django.http import Http404, JsonResponse
|
||||
from django.views.decorators.http import require_http_methods
|
||||
|
||||
from review_agent.models import Conversation, FileAttachment
|
||||
|
||||
from .storage import save_uploaded_attachment, serialize_attachment
|
||||
|
||||
|
||||
def _conversation_for_user(user, conversation_id: int) -> Conversation:
|
||||
conversation = Conversation.objects.filter(pk=conversation_id, user=user).first()
|
||||
if not conversation:
|
||||
raise Http404("对话不存在。")
|
||||
return conversation
|
||||
|
||||
|
||||
@require_http_methods(["POST", "GET"])
|
||||
@login_required
|
||||
def attachments(request, conversation_id: int):
|
||||
conversation = _conversation_for_user(request.user, conversation_id)
|
||||
|
||||
if request.method == "POST":
|
||||
files = request.FILES.getlist("files")
|
||||
if not files:
|
||||
return JsonResponse({"error": "请选择至少一个文件。"}, status=400)
|
||||
saved = [
|
||||
save_uploaded_attachment(
|
||||
conversation=conversation,
|
||||
user=request.user,
|
||||
uploaded_file=uploaded_file,
|
||||
)
|
||||
for uploaded_file in files
|
||||
]
|
||||
return JsonResponse({"attachments": [serialize_attachment(item) for item in saved]})
|
||||
|
||||
queryset = FileAttachment.objects.filter(conversation=conversation).order_by(
|
||||
"original_name",
|
||||
"-version_no",
|
||||
)
|
||||
return JsonResponse({"attachments": [serialize_attachment(item) for item in queryset]})
|
||||
|
||||
|
||||
@require_http_methods(["DELETE"])
|
||||
@login_required
|
||||
def attachment_detail(request, conversation_id: int, attachment_id: int):
|
||||
conversation = _conversation_for_user(request.user, conversation_id)
|
||||
attachment = FileAttachment.objects.filter(
|
||||
pk=attachment_id,
|
||||
conversation=conversation,
|
||||
user=request.user,
|
||||
).first()
|
||||
if not attachment:
|
||||
raise Http404("附件不存在。")
|
||||
|
||||
attachment.upload_status = FileAttachment.UploadStatus.DELETED
|
||||
attachment.is_active = False
|
||||
attachment.save(update_fields=["upload_status", "is_active"])
|
||||
return JsonResponse({"ok": True, "attachment": serialize_attachment(attachment)})
|
||||
Reference in New Issue
Block a user