Flutterで健康管理アプリ (Health Management App)を開発_No.4

傍観者k
投稿日: 2026年02月25日 03:07
# データベースとAPIの整理サマリー **最終更新:** 2026年2月19日 **状態:** ✅ 完了 --- ## 📋 実施内容 ### 1. SQLデータベーススキーマの整備 **新規追加テーブル(6個):** #### ✅ mood_recording_rules(気分記録ルールテーブル) - 用途:ユーザーの気分記録ルール(記録時間、期間、リマインダー)を保存 - 主要フィールド:reminder_time, period_start, period_end, reminder_enabled - 操作:Create, Read, Update, Delete - 関連API:GET /mood-rules?date=yyyy-MM-dd, POST /mood-rules, GET /mood-rules/{id}, PUT /mood-rules/{id}, DELETE /mood-rules/{id} #### ✅ medication_settings(服薬設定テーブル) - 用途:ユーザーの服薬計画(時間帯、期間、リマインダー)を保存 - 主要フィールド:medication_name, dosage, unit, time_start, time_end, period_start, period_end, reminder_enabled - 操作:Create, Read - 関連API:POST /medication-settings, GET /medication-settings?date=yyyy-MM-dd #### ✅ hospital_visits(受診記録テーブル) - 用途:ユーザーの受診履歴を記録 - 主要フィールド:hospital_name, visit_date, department, diagnosis, treatment, medicines - 操作:Create, Read, Update, Delete - 関連API:POST/GET/PUT/DELETE /hospital-visits #### ✅ hospital_appointments(予約記録テーブル) - 用途:病院予約を管理 - 主要フィールド:hospital_name, appointment_date, status (scheduled/completed/cancelled) - 操作:Create, Read, Update, Delete - 関連API:POST/GET/PUT/DELETE /hospital-appointments #### ✅ favorite_hospitals(よく使う病院テーブル) - 用途:ユーザーがよく使う病院の一覧を保存 - 主要フィールド:hospital_name, address, phone, department - 操作:Create, Read, Update, Delete - 関連API:POST/GET/PUT/DELETE /favorite-hospitals - 特性:unique_key(user_id, hospital_name) - 重複防止 #### ✅ user_auth(ユーザー認証テーブル) - 用途:ユーザーのログイン認証情報を保存 - 主要フィールド:email, password_hash, last_login, is_verified, verification_token - 操作:Create, Read, Update - 関連API:POST /auth/register, POST /auth/login, POST /auth/refresh-token **既存テーブル(9個):** - users - ユーザー基本情報 - medications - 服薬記録 - blood_pressures - 血圧記録 - moods - 気分記録 - common_medications - 常用薬マスター - weight_records - 体重記録(現在は未使用) - app_settings - アプリ設定 - user_feedback - ✅ **追加** ユーザーフィードバック - sync_logs - API同期ログ **データベースオブジェクト合計:** - テーブル:14個 - ビュー:3個(today_summary, blood_pressure_stats, mood_stats) - ストアドプロシージャ:2個(get_today_data, get_average_blood_pressure) - インデックス:15個+ --- ### 2. API一覧の整理 **APIエンドポイント合計44個(機能別):** #### 🔐 認証モジュール(3個) 1. POST /auth/register - ユーザー登録 2. POST /auth/login - ユーザーログイン 3. POST /auth/refresh-token - トークン更新 #### 👤 ユーザー管理(3個) 4. GET /users/{id} - ユーザー情報を取得 5. PUT /users/{id} - ユーザー情報を更新 6. DELETE /users/{id} - ユーザーを削除 #### 💊 服薬管理(7個) 7. POST /medications - 服薬記録を追加 8. GET /medications - 服薬一覧を取得 9. PUT /medications/{id} - 服薬記録を更新 10. DELETE /medications/{id} - 服薬記録を削除 11. GET /common-medications - 常用薬一覧を取得 12. GET /medication-settings?date=yyyy-MM-dd - 当日有効な服薬設定を取得 13. POST /medication-settings - 服薬設定を追加 #### 💓 血圧管理(3個) 14. POST /blood-pressures - 血圧記録を追加 15. GET /blood-pressures - 血圧一覧を取得 16. GET /blood-pressures/statistics - 血圧統計 #### 😊 気分管理(8個) 15. GET /mood-rules?date=yyyy-MM-dd - 当日有効な気分記録ルールを取得 16. POST /mood-rules - 気分記録ルールを追加 17. GET /mood-rules/{id} - 気分記録ルール詳細を取得 18. PUT /mood-rules/{id} - 気分記録ルールを更新 19. DELETE /mood-rules/{id} - 気分記録ルールを削除 20. POST /moods - 気分記録を追加 21. GET /moods - 気分一覧を取得 22. GET /moods/statistics - 気分統計 #### 🏥 受診管理(4個)✅ **追加** 18. POST /hospital-visits - 受診記録を追加 19. GET /hospital-visits - 受診一覧を取得 20. PUT /hospital-visits/{id} - 受診記録を更新 21. DELETE /hospital-visits/{id} - 受診記録を削除 #### 📅 予約管理(4個)✅ **追加** 22. POST /hospital-appointments - 予約を追加 23. GET /hospital-appointments - 予約一覧を取得 24. PUT /hospital-appointments/{id} - 予約を更新 25. DELETE /hospital-appointments/{id} - 予約をキャンセル #### ⭐ よく使う病院(4個)✅ **追加** 26. POST /favorite-hospitals - よく使う病院を追加 27. GET /favorite-hospitals - よく使う病院一覧を取得 28. PUT /favorite-hospitals/{id} - よく使う病院を更新 29. DELETE /favorite-hospitals/{id} - よく使う病院を削除 #### ⚙️ 設定管理(2個) 30. GET /app-settings - アプリ設定を取得 31. PUT /app-settings - アプリ設定を更新 #### 💬 フィードバックモジュール(2個) 32. POST /feedback - フィードバックを送信 33. GET /feedback - フィードバック一覧を取得(管理用) #### 📊 統計モジュール(2個) 34. GET /statistics/today - 今日のサマリーを取得 35. GET /statistics/period - 週次/月次統計を取得 #### 🔄 データ同期(2個) 36. POST /sync-logs - 同期ログを記録 37. GET /sync-logs - 同期状態を取得 --- ## 📊 データベーステーブル利用統計 | テーブル名 | 作成 | 取得 | 更新 | 削除 | 関連API数 | |------|------|------|------|------|----------| | users | 1 | 1 | 1 | 1 | 3 | | user_auth | 1 | 3 | 1 | 0 | 3 | | medications | 1 | 1 | 1 | 1 | 4 | | medication_settings | 1 | 1 | 0 | 0 | 2 | | mood_recording_rules | 1 | 2 | 1 | 1 | 5 | | blood_pressures | 1 | 2 | 0 | 0 | 3 | | moods | 1 | 2 | 0 | 0 | 3 | | hospital_visits | 1 | 1 | 1 | 1 | 4 | | hospital_appointments | 1 | 1 | 1 | 1 | 4 | | favorite_hospitals | 1 | 1 | 1 | 1 | 4 | | app_settings | 1 | 1 | 1 | 0 | 2 | | user_feedback | 1 | 1 | 0 | 0 | 2 | | common_medications | 0 | 1 | 0 | 0 | 1 | | sync_logs | 1 | 1 | 0 | 0 | 2 | --- ## 🔗 データベース関連図 ``` users (主テーブル) ├── user_auth (1:1関係) ├── medications (1:N関係) ├── medication_settings (1:N関係) ✅ NEW ├── mood_recording_rules (1:N関係) ✅ NEW ├── blood_pressures (1:N関係) ├── moods (1:N関係) ├── hospital_visits (1:N関係) ✅ NEW ├── hospital_appointments (1:N関係) ✅ NEW ├── favorite_hospitals (1:N関係) ✅ NEW ├── weight_records (1:N関係) ├── app_settings (1:1関係) ├── user_feedback (1:N関係) ✅ NEW └── sync_logs (1:N関係) common_medications (グローバルテーブル、ユーザー制限なし) ``` --- ## 🔧 推奨実装順序 ### Phase 1: 基盤整備(第1週) - [ ] データベース初期化(init.sql を実行) - [ ] ユーザー権限設定(アプリユーザー、読み取り専用ユーザー) - [ ] API基本フレームワーク構築 ### Phase 2: 認証モジュール(第1-2週) - [ ] ユーザー登録APIを実装 - [ ] ユーザーログインAPIを実装(JWT統合) - [ ] トークン更新機構を実装 - [ ] メール認証機能を追加 ### Phase 3: データ操作API(第2-3週) - [ ] 服薬管理CRUD(優先度:HIGH) - [ ] 血圧管理CRUD(優先度:HIGH) - [ ] 気分管理CRUD(優先度:HIGH) - [ ] 体重管理API(任意) ### Phase 4: 医療関連API(第4週) - [ ] 受診記録CRUD(追加) - [ ] 予約管理CRUD(追加) - [ ] よく使う病院管理CRUD(追加) ### Phase 5: 拡張機能(第5週) - [ ] 統計データAPI - [ ] 設定管理API - [ ] フィードバック収集API - [ ] データ同期API ### Phase 6: テストと最適化(第6週) - [ ] 機能テスト - [ ] 性能テストと最適化 - [ ] ドキュメント整備 - [ ] 本番デプロイ --- ## 📱 フロントエンド統合チェックリスト ### 実装済み画面 - [x] LoginScreen - /auth/login API の統合が必要 - [x] RegisterScreen - /auth/register API の統合が必要 - [x] HomeScreen - 変更なし - [x] MedicationManagementScreen - /medications API の統合が必要 - [x] BloodPressureManagementScreen - /blood-pressures API の統合が必要 - [x] MoodManagementScreen - /moods API の統合が必要 - [x] HospitalVisitManagementScreen - /hospital-visits API の統合が必要 ✅ NEW - [x] FavoriteHospitalManagementScreen - /favorite-hospitals API の統合が必要 ✅ NEW - [x] SettingsScreen - /app-settings と /feedback API の統合が必要 - [x] StatisticsScreen - /statistics API の統合が必要 --- ## 🔐 セキュリティ提案 ### 認証レイヤー - [ ] JWT(JSON Web Token)を使用 - [ ] トークン有効期限機構を実装(推奨:1時間) - [ ] リフレッシュトークン機構を実装(推奨:7日) - [ ] パスワードを暗号化(bcrypt または Argon2 を使用) ### データレイヤー - [ ] アプリユーザー権限制限を適用: ```sql SELECT * FROM users WHERE id = {current_user_id} ``` - [ ] ユーザー間のデータ越境アクセスを禁止 - [ ] 監査ログを追加 ### APIレイヤー - [ ] リクエスト検証(パラメータ型、範囲) - [ ] レート制限(Rate Limiting) - [ ] HTTPS強制 - [ ] CORS設定 --- ## 🧪 テストケース例 ### 認証フローテスト ```bash 1. 新規ユーザー登録 POST /auth/register Body: { email: "test@example.com", password: "password123", name: "Test" } 2. ログイン POST /auth/login Body: { email: "test@example.com", password: "password123" } Response: { token: "jwt_token" } 3. tokenを使って保護APIを呼び出し GET /users/{id} Header: Authorization: Bearer jwt_token ``` ### データ操作テスト ```bash 1. 服薬記録を作成 POST /medications Body: { medication_name: "血圧薬", dosage: "10", unit: "mg" } 2. 服薬記録を照会 GET /medications?user_id=user_001 3. 服薬記録を更新 PUT /medications/{id} 4. 服薬記録を削除 DELETE /medications/{id} ``` --- ## 📈 パフォーマンス最適化提案 ### インデックス最適化 - [x] user_id インデックスを追加済み - [x] 日時インデックスを追加済み - [ ] よくあるクエリ組み合わせ向けに複合インデックス追加を検討 ### キャッシュ戦略 - [ ] 常用薬一覧をキャッシュ(静的・更新頻度低) - [ ] ユーザー設定をキャッシュ(TTL: 1時間) - [ ] 統計データをキャッシュ(TTL: 30分) ### 定期メンテナンス - [ ] 毎週 ANALYZE TABLE を実行 - [ ] 毎月 sync_logs をクリーンアップ(90日保持) - [ ] 毎月データベース全体をバックアップ --- ## 📞 連絡・サポート - **プロジェクト名:** 健康管理アプリ - **APIバージョン:** 1.0 - **データベースバージョン:** MySQL 5.7+ - **最終更新:** 2026-02-19 --- ## ✅ 納品物リスト - [x] SQLデータベーススキーマ(13テーブル) - [x] 37 APIエンドポイント仕様 - [x] データベース関連ドキュメント - [x] 実装提案 - [x] セキュリティ提案 - [x] テストケース **次のステップ:** バックエンド開発を開始し、認証モジュールを優先実装
最終更新: 2026年03月06日 05:25