Commit Graph

2 Commits

Author SHA1 Message Date
Ponshu Developer ac2a54d07a feat: AI使用回数トラッキング + クォータ上限時ドラフト保存
- ApiUsageService: SharedPreferences で Gemini 日次使用回数を追跡
  - UTC 08:00(=日本時間 17:00)でリセット
  - 上限 20回/日(プロジェクトあたりの無料枠)
- DraftReason enum: offline / quotaLimit / congestion を区別
- camera_analysis_mixin: 解析前にクォータを事前チェック
  - 上限到達時は Draft 保存してカメラを閉じる(写真は失われない)
  - 429 エラー時も同様に Draft 保存(従来はエラー表示のみで写真消失)
  - API 呼び出し成功時(キャッシュ除く)にカウントアップ
- pending_analysis_screen: ドラフト理由を各アイテムに表示
  - クォータ: リセット時刻つきの警告(オレンジ)
  - 混雑 / オフライン: 理由別メッセージ
- ActivityStats: AI 使用状況 bento カードを追加
  - 今日のAI解析 X / 20回 + プログレスバー
  - 残り5回以下でオレンジ、上限到達で赤

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-16 17:58:00 +09:00
Ponshu Developer aa933cf1e3 refactor: P2/P3-Step1 — camera_screen Mixin分離 + license storeURL修正
P2:
- license_screen.dart: storeUrl を store.posimai.soar-enrich.com に統一(TODO解消)

P3 Step1:
- camera_analysis_mixin.dart 新規作成: analyzeImages() + _performSakenowaMatching()
  を CameraAnalysisMixin<T extends ConsumerStatefulWidget> on ConsumerState<T> に切り出し
- camera_screen.dart: 1031行 → 718行(-313行)
  不要なimport 10個削除、Mixin適用、フィールド/メソッド移動

Note: Dart ライブラリプライベート制約のため Mixin の公開 API は
capturedImages / quotaLockoutTime / analyzeImages(アンダースコアなし)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-16 13:20:53 +09:00