class
Github::NotificationRepository
- Github::NotificationRepository
- Reference
- Object
Defined in:
github/repository.crConstant Summary
-
COMMENT_FETCH_FAILED =
"(本文を取得できませんでした)" -
コメント取得に失敗した場合に本文へ出す表示用文言。内部エラー文字列を 通知に晒さず、詳細はログのみに残す(issue #96)。
-
MAX_PAGES =
20 -
PER_PAGE =
100
Constructors
Instance Method Summary
- #find_comment_by_url(url : String) : Comment
-
#find_notifications_unread(before : Time) : Array(Notification)
未読通知を全ページ取得する。
-
#notification_to_read(last_read_at : Time | Nil = nil)
通知を既読化する。last_read_at は排他的境界で、その時刻より前 (updated_at < last_read_at)に更新された通知だけが既読化される。 等値(updated_at == last_read_at)は未読のまま残るため、送信済み通知を 含めたい場合は境界をその updated_at より大きく取ること(issue #100 で 実 API 検証済み)。分割送信で送信済みチャンクまでを都度既読化し、 途中失敗時の重複投稿を防ぐのに使う。省略時は現在時刻までの全通知を 既読化する。
Constructor Detail
Instance Method Detail
未読通知を全ページ取得する。
/notifications はページングされ既定では 1 ページ分(最新側)しか返さない。 一部ページだけを取得した状態で last_read_at 既読化を行うと、未取得の 古い通知(=更新時刻が小さくチャンク送信対象外)まで last_read_at 以前と して既読化され、未送信のまま消えてしまう。これを防ぐため全ページを 取得してから境界を決める必要がある(issue #94 / PR #97 レビュー指摘)。
ページング中に新着通知が入るとオフセットがずれ前ページ末尾の取りこぼしが 起きるため、スナップショット時刻を上限(before)に固定してページ集合を 安定させる。上限より新しい通知は取得対象から外れるが、次回実行で取得される。 before は呼び出し側から受け取る。全件送信後の既読化境界(last_read_at)に 同じ値を使うことで、取得フィルタ(updated < before)と既読化(updated < last_read_at)が同じ排他的比較になり、「取得・送信した集合」と「既読化される 集合」を一致させられる(issue #100)。
取得しきれない場合(途中ページの一時失敗 5xx/401、またはページ数上限到達)は、 不完全な取得状態で既読化して取りこぼすのを避けるため、その実行を丸ごと スキップして次回に委ねる。
通知を既読化する。last_read_at は排他的境界で、その時刻より前 (updated_at < last_read_at)に更新された通知だけが既読化される。 等値(updated_at == last_read_at)は未読のまま残るため、送信済み通知を 含めたい場合は境界をその updated_at より大きく取ること(issue #100 で 実 API 検証済み)。分割送信で送信済みチャンクまでを都度既読化し、 途中失敗時の重複投稿を防ぐのに使う。省略時は現在時刻までの全通知を 既読化する。