# インフラ構成図

## 全体構成図

```mermaid
flowchart TB
    subgraph Users["ユーザー"]
        AndroidUser["Android ユーザー"]
        iOSUser["iOS ユーザー"]
    end

    subgraph MobileApp["InvenTree Mobile App"]
        direction TB
        FlutterApp["Flutter Application<br/>v0.22.2+111"]
        LocalDB["ローカルDB<br/>(sembast NoSQL)"]
        Cache["画像キャッシュ<br/>(CacheManager)"]
        FlutterApp --> LocalDB
        FlutterApp --> Cache
    end

    subgraph ExternalServices["外部サービス"]
        InvenTreeServer["InvenTree Server<br/>(User-managed)"]
        Sentry["Sentry.io<br/>(Error Monitoring)"]
    end

    subgraph Distribution["アプリ配布"]
        PlayStore["Google Play Store"]
        AppStore["Apple App Store"]
    end

    AndroidUser --> MobileApp
    iOSUser --> MobileApp
    MobileApp <-->|REST API<br/>HTTPS + Token Auth| InvenTreeServer
    MobileApp -->|Error Reports<br/>HTTPS| Sentry
    PlayStore --> AndroidUser
    AppStore --> iOSUser
```

## CI/CDパイプライン構成図

```mermaid
flowchart LR
    subgraph GitHub["GitHub"]
        Repo["inventree-app<br/>Repository"]
    end

    subgraph GHActions["GitHub Actions"]
        direction TB
        CI["CI Workflow<br/>(ubuntu-latest)"]
        AndroidBuild["Android Build<br/>(macos-latest)"]
        iOSBuild["iOS Build<br/>(macos-latest)"]
    end

    subgraph Tests["テスト・解析"]
        StaticAnalysis["静的解析<br/>(flutter analyze)"]
        UnitTests["ユニットテスト<br/>(flutter test)"]
        Coveralls["Coveralls<br/>(コードカバレッジ)"]
    end

    subgraph BuildArtifacts["ビルド成果物"]
        APK["Android APK<br/>(debug/release)"]
        IPA["iOS IPA<br/>(release)"]
    end

    Repo -->|push/PR| CI
    Repo -->|push/PR| AndroidBuild
    Repo -->|push/PR| iOSBuild
    CI --> StaticAnalysis
    CI --> UnitTests
    UnitTests --> Coveralls
    AndroidBuild --> APK
    iOSBuild --> IPA
```

## アプリケーション通信フロー

```mermaid
sequenceDiagram
    participant App as Mobile App
    participant LocalDB as Local DB (sembast)
    participant Server as InvenTree Server
    participant Sentry as Sentry.io

    Note over App,Server: 初回接続フロー
    App->>LocalDB: ユーザープロファイル取得
    LocalDB-->>App: プロファイル情報
    App->>Server: GET /api/ (サーバー確認)
    Server-->>App: サーバー情報 (version, apiVersion)
    App->>Server: GET /user/token/ (トークン取得)
    Server-->>App: 認証トークン
    App->>LocalDB: トークン保存
    App->>Server: GET /user/me/ (ユーザー認証確認)
    Server-->>App: ユーザー情報
    App->>Server: GET /user/roles/ (権限取得)
    Server-->>App: ロール・権限情報

    Note over App,Sentry: エラー発生時
    App->>App: エラー検出
    App->>Sentry: エラーレポート送信
    Sentry-->>App: 送信確認
```

## データストレージ構成

```mermaid
flowchart TB
    subgraph LocalStorage["ローカルストレージ"]
        direction TB
        SembastDB["sembast NoSQL DB<br/>(InvenTreeSettings.db)"]

        subgraph Stores["データストア"]
            ProfileStore["profiles<br/>(ユーザープロファイル)"]
            SettingsStore["settings<br/>(アプリ設定)"]
        end

        subgraph CacheStorage["キャッシュ"]
            ImageCache["画像キャッシュ<br/>(inventree_network_image)"]
            TempDir["一時ディレクトリ<br/>(ダウンロードファイル)"]
        end

        SembastDB --> Stores
    end

    subgraph AppData["アプリデータ"]
        UserProfile["UserProfile<br/>- name<br/>- server<br/>- token"]
        Settings["Settings<br/>- UI設定<br/>- バーコード設定<br/>- 通知設定"]
    end

    ProfileStore --> UserProfile
    SettingsStore --> Settings
```

## ビルド環境構成

```mermaid
flowchart TB
    subgraph BuildEnv["ビルド環境"]
        direction TB

        subgraph FVM["Flutter Version Management"]
            FlutterSDK["Flutter SDK 3.32.4"]
            DartSDK["Dart SDK ^3.8.1"]
        end

        subgraph Android["Android ビルド"]
            Gradle["Gradle 8.7"]
            JDK["JDK 17"]
            AndroidSDK["Android SDK 35"]
        end

        subgraph iOS["iOS ビルド"]
            Xcode["Xcode"]
            CocoaPods["CocoaPods"]
        end
    end

    subgraph Dependencies["主要依存関係"]
        HTTP["http 1.4.0"]
        SentrySDK["sentry_flutter 8.14.2"]
        Scanner["mobile_scanner 7.0.1"]
        Sembast["sembast 3.6.0"]
    end

    FlutterSDK --> Dependencies
    FlutterSDK --> Android
    FlutterSDK --> iOS
```

## セキュリティ構成

```mermaid
flowchart TB
    subgraph Security["セキュリティ構成"]
        direction TB

        subgraph Auth["認証"]
            TokenAuth["トークン認証<br/>(Authorization: Token xxx)"]
            BasicAuth["Basic認証<br/>(初回ログインのみ)"]
        end

        subgraph Transport["通信セキュリティ"]
            HTTPS["HTTPS通信"]
            StrictHTTPS["厳格HTTPS設定<br/>(INV_STRICT_HTTPS)"]
            CertValidation["証明書検証<br/>(自己署名許可オプション)"]
        end

        subgraph Storage["ストレージセキュリティ"]
            LocalToken["トークン<br/>(ローカル保存)"]
            GitIgnore["機密ファイル除外<br/>(.gitignore)"]
        end
    end

    Auth --> Transport
    Transport --> Storage
```
