@startuml
!include color.inc

プレゼンテーション ----> アプリ
アプリ ----> ドメイン
ドメイン ----> インフラ

package 認証 <<Folder>> {
 package プレゼンテーション {
   package フォームリクエスト {
    class ユーザ登録フォームリクエスト
   }
  package コントローラ {
    package パスワードリセット {
     class リンク表示コントローラ
     class リセット用メール送信コントローラ
     class フォーム表示コントローラ
     class パスワードリセットコントローラ
    }
   class SNSログインコントローラ
   class 会員ユーザ紐付けコントローラ
   class ログインフォーム表示コントローラ
   class 入力してログインコントローラ
   class ユーザ登録フォーム表示コントローラ
   class ユーザ登録コントローラ
   class ログアウトコントローラ
  }
 }
 package アプリ {
  namespace ユースケース {
    namespace パスワードリセット {
     class リンク表示
     class リセット用メール送信
     class フォーム表示
     class パスワードリセット
    }
   class SNSログイン
   class 会員ユーザ紐付け
   class ログインフォーム表示
   class 入力してログイン
   class ユーザ登録フォーム表示
   class ユーザ登録
   class ログアウト
  }
 }
 package ドメイン {
  package モデル {
   class ユーザ
   class ユーザID
   class SNSアカウント
   class ユーザファクトリ
   interface ドライバインターフェース
   interface ログインユーザインターフェース
   interface ユーザリポジトリインターフェース
   interface 登録済みユーザクエリサービスインターフェース
   class 未登録ユーザ仕様
   class SNSアカウント紐付け済み仕様
  }
 }
 package インフラ {
  package レスポンスデータ {
   class ユーザIDレスポンスデータ
   class ユーザレスポンスデータ
  }
  package ドライバ {
   package 追加SNS {
    class Amazonサービスプロバイダ
    class Amazonプロバイダ
   }
   class SNSドライバ
  }
  package エロクアント {
   class ユーザエロクアント
   class SNSアカウントエロクアント
  }
  package リポジトリ {
   class ユーザリポジトリ
   class 登録済みユーザクエリサービス
  }
 }
}
@enduml