概要
P2課題とインフラ強化を実施し、運用品質を本番レベルに引き上げました。
| 対応内容 | 状態 |
|---|---|
| ヘルスチェックにDB接続確認を追加 | 完了 |
| データ保持ポリシー(SQL関数) | 完了 |
| Axum 12MBボディサイズ制限 | 完了 |
1. ヘルスチェック強化
以前は静的な {"status":"ok"} を返すだけでしたが、DB接続の実際の確認を追加しました。
// Before:
{ "status": "ok", "version": "0.1.0" }
// After:
{ "status": "ok", "version": "0.1.0", "database": "connected" }
// DB接続不可の場合:
{ "status": "degraded", "version": "0.1.0", "database": "unavailable" }
SELECT 1 の軽量クエリでDB接続を検証。接続不可時は "degraded" ステータスを返し、Fly.ioのヘルスチェック監視と連携できます。
2. データ保持ポリシー
Tier別のデータ保持期間を超えた visitor_counts レコードを自動削除するSQL関数を実装しました。
| Tier | 保持期間 |
|---|---|
| Free | 7日 |
| Starter | 30日 |
| Pro | 90日 |
| Enterprise | 3,650日 (~10年) |
-- 全ストアのTierに応じて古いデータを削除
SELECT cleanup_expired_visitor_counts();
-- → 削除されたレコード数を返す
Supabase pg_cronまたはEdge Functionで日次実行を推奨。
3. ボディサイズ制限
AxumのDefaultBodyLimitを 12MB に設定。大量ペイロードによるメモリ枯渇攻撃を防止します。
リリース準備チェックリスト最終版
| 優先度 | 項目 | Sprint | 状態 |
|---|---|---|---|
| P0 | Webhook署名検証 | #12 | 完了 |
| P0 | Stripe tier判定 | #12 | 完了 |
| P1 | レート制限 | #13 | 完了 |
| P1 | 入力バリデーション | #13 | 完了 |
| P1 | CORS本番対応 | #13 | 完了 |
| P2 | ヘルスチェック強化 | #14 | 完了 |
| P2 | データ保持ポリシー | #14 | 完了 |
| P2 | ボディサイズ制限 | #14 | 完了 |
P0/P1/P2の全課題が解消。14スプリントで構築した本番グレードのAI店舗分析プラットフォームがベータ公開の準備を完了しました。