@startuml

usecase 既存イベントからイベント作成画面を開く

actor フロントユーザ

boundary イベント管理view
boundary イベントダッシュボードview
boundary イベントを複製して作成view

package "route: イベント複製画面生成処理" {
    control Action
    package "Service: イベント管理" {
        boundary イベントEntity取得
        package "イベント読み出しリポジトリ" {
            control イベント集約ルート作成
        }
    }
    entity イベント集約ルート

    package "Service: フロントユーザ管理" {
        boundary ログインユーザEntity取得
        package "フロントユーザEntity取得リポジトリ" {
            control フロントユーザ集約ルート作成
        }
    }
    entity フロントユーザ集約ルート
    
    package "Responder: イベント複製画面レスポンス生成" {
        boundary コンストラクタ
        boundary viewデータ生成
        control データ返却

        package "イベントEntity" {
            entity イベント集約ルート
            control イベント親カテゴリ取得
            control イベント子カテゴリ取得
            control イベントチケットリスト取得
        }
        package "フロントユーザEntity" {
            entity フロントユーザ集約ルート
            control 主催者リスト取得
        }

    }
}

フロントユーザ --> イベント管理view : ボタン押下
フロントユーザ --> イベントダッシュボードview : ボタン押下
イベント管理view --> Action : 呼び出し
イベントダッシュボードview --> Action : 呼び出し

Action -l-> イベントEntity取得 : 複製元イベントデータの読み出し
イベントEntity取得 --> イベント集約ルート作成
イベント集約ルート作成 --> イベント集約ルート : 生成

Action --> ログインユーザEntity取得 : ログインユーザデータの読み出し
ログインユーザEntity取得 --> フロントユーザ集約ルート作成
フロントユーザ集約ルート作成 --> フロントユーザ集約ルート : 生成

''Action --> viewデータ生成 : イベント複製画面レスポンス生成
''viewデータ生成 --> イベントを複製して作成view

Action --> コンストラクタ : Entity注入
イベントEntity *--> イベント集約ルート
フロントユーザEntity *--> フロントユーザ集約ルート
Action --> viewデータ生成 : 呼び出し
viewデータ生成 --> イベント親カテゴリ取得
viewデータ生成 --> イベント子カテゴリ取得
viewデータ生成 --> イベントチケットリスト取得
viewデータ生成 --> 主催者リスト取得
viewデータ生成 -r-> データ返却
データ返却 --> イベントを複製して作成view

@enduml