Generic webhooks: broken, unused, and not org-scoped. Fix or remove?

オープン
#709 コメント 0 件 リアクション 0 件 担当者 0 名 GitHub で見る

メンテナーはふだん 3 日以内に返信

まだ誰も着手していません。

評価

難易度
5/5
見積もり時間
1週間以上
初心者へのやさしさ
25/100
issue の種類
リファクタリング
明瞭さ
説明が足りない
活発さ
活発
技術スタック
fastapi, postgresql, python
領域
api, backend

調査の方向性

Start by tracing webhook dispatch in src/app/services/validation.py:175, then inspect the webhook model, CRUD, schemas, /webhooks endpoint, and migrations mentioned in the issue. The issue presents two unresolved options: remove the mechanism or make it org-scoped with a public payload schema; confirm the project’s decision before changing anything. Done means implementing the selected option consistently, including the database migration.

索引モデルが issue の本文から書いたものです。

説明

Context

The generic webhook mechanism (introduced in #367) sends every validated detection to every URL in the webhooks table (src/app/services/validation.py:175). Nothing uses it today:

  • Slack notifications go through organization.slack_hook / slack_client (#478), not this table.
  • The only row we knew of in prod was a leftover Slack URL from before #478. It never worked and only produced 400 invalid_payload log noise. It has been deleted.
  • Rows can only be added through the admin /webhooks endpoint. The Python client does not expose it.

Problems if we keep it

  1. Double-encoded payload. dispatch_webhook passes model_dump_json() (a str) to httpx json=, so consumers receive a quoted JSON string instead of an object. #623 fixes this.
  2. No org scoping. Webhook has no organization_id and WebhookCRUD.fetch_all() is global, so every webhook receives every organization's detections. A partner registered here would see other orgs' data.
  3. Raw DB row as payload. We send the Detection row as-is (bucket_key, crop_bucket_key, pose_id, etc.). There is no public schema, so any change to the model silently breaks consumers.

Options

  • A. Remove it. Drop the model, endpoint, CRUD, schemas and the dispatch loop, and add a migration to drop webhooks. Close #623.
  • B. Make it usable. Merge #623, add organization_id to Webhook and filter dispatch by the sequence's org, and send a dedicated public payload schema (alert id, camera, location, azimuth, timestamps, platform URL) instead of the raw row.
主要言語
Python
スター
30
フォーク
15
平均マージ
4日 15時間
マージ済み PR(30日)
16

環境構築

はじめの一歩

  1. issue を最後まで読み、次にプロジェクトのコントリビューションガイドを読みます。
  2. 着手することを issue にコメントします — 二人が同じ作業をするのを防げます。
  3. リポジトリをフォークし、ブランチを切って変更します。
  4. issue 番号を参照したプルリクエストを送ります。

pyronear/pyro-api のほかの issue

pyronear/pyro-api の issue をすべて見る

似ている issue

Python の issue をもっと見る

新しい issue をメールで受け取る

初心者向けの GitHub issue を短くまとめたダイジェスト。