メール処理履歴画面にフィードバック機能を追加
- 全メール(重要・通常問わず)に対してフィードバックボタンを追加 - PATCH /api/mail/emails/<pk>/feedback/ エンドポイントを追加(JWT認証) - フィードバックモーダル: 重要/普通/今後通知しない/常に通知 の4択 - never_notify/always_notify 選択時はアドレス/ドメインの適用範囲を選択可能 - gmail_service アカウントのフィルタオプションを追加 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -12,6 +12,8 @@ urlpatterns = [
|
||||
|
||||
# メール記録(POST: APIキー認証)&履歴取得(GET: JWT認証)
|
||||
path('emails/', views.MailEmailView.as_view(), name='mail-emails'),
|
||||
# 履歴画面からのフィードバック更新(JWT認証)
|
||||
path('emails/<int:pk>/feedback/', views.MailEmailFeedbackView.as_view(), name='mail-email-feedback'),
|
||||
|
||||
# ダッシュボード用統計(JWT認証)
|
||||
path('stats/', views.MailStatsView.as_view(), name='mail-stats'),
|
||||
|
||||
@@ -230,6 +230,47 @@ class FeedbackView(APIView):
|
||||
return Response({'status': 'ok'})
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# 履歴画面からのフィードバック更新(JWT認証)
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
class MailEmailFeedbackView(APIView):
|
||||
"""
|
||||
PATCH /api/mail/emails/<pk>/feedback/ 履歴画面から直接フィードバックを更新(JWT認証)
|
||||
"""
|
||||
permission_classes = [IsAuthenticated]
|
||||
|
||||
def patch(self, request, pk):
|
||||
mail_email = get_object_or_404(MailEmail, pk=pk)
|
||||
|
||||
feedback = request.data.get('feedback')
|
||||
valid_feedbacks = ['important', 'not_important', 'never_notify', 'always_notify']
|
||||
if feedback not in valid_feedbacks:
|
||||
return Response(
|
||||
{'error': f'feedback は {valid_feedbacks} のいずれかを指定してください'},
|
||||
status=status.HTTP_400_BAD_REQUEST
|
||||
)
|
||||
|
||||
mail_email.feedback = feedback
|
||||
mail_email.feedback_at = timezone.now()
|
||||
mail_email.save(update_fields=['feedback', 'feedback_at'])
|
||||
|
||||
if feedback in ('never_notify', 'always_notify'):
|
||||
scope = request.data.get('scope')
|
||||
if scope == 'address':
|
||||
MailSender.objects.update_or_create(
|
||||
email=mail_email.sender_email,
|
||||
defaults={'domain': None, 'rule': feedback}
|
||||
)
|
||||
elif scope == 'domain':
|
||||
MailSender.objects.update_or_create(
|
||||
domain=mail_email.sender_domain,
|
||||
defaults={'email': None, 'rule': feedback}
|
||||
)
|
||||
|
||||
return Response({'status': 'ok', 'feedback': feedback})
|
||||
|
||||
|
||||
# ---------------------------------------------------------------------------
|
||||
# ルール管理(JWT認証)
|
||||
# ---------------------------------------------------------------------------
|
||||
|
||||
Reference in New Issue
Block a user