@startuml
'https://plantuml.com/class-diagram

actor ユーザー
control コントローラー

ユーザー -> コントローラ: ログイン画面リクエスト
コントローラ -> ユーザー: ログイン画面レスポンス
ユーザー -> コントローラ: Auth
コントローラ -> DB: Auth
コントローラ <- DB: ユーザー情報
ユーザー <- コントローラ: ユーザー画面レスポンス
ユーザー -> コントローラ: 同期設定リクエスト
コントローラ -> DB: 同期設定処理
コントローラ <- DB: 更新完了レスポンス
ユーザー <- コントローラ: 同期完了レスポンス
ユーザー -> コントローラ: 通知設定リクエスト
コントローラ -> DB: 通知設定処理
コントローラ <- DB: 更新完了レスポンス
ユーザー <- コントローラ: 通知完了レスポンス
ユーザー -> コントローラ: 手動同期リクエスト
コントローラ->Job: 実行
Job->DB: Auth取得
Job<-DB: 取得完了レスポンス
Job->DB: 同期設定取得
Job<-DB: 取得完了レスポンス
Job->DB: 通知設定取得
Job<-DB: 取得完了レスポンス
loop [for every task]
    Job->DB: タスク同期状態取得
    Job<-DB: 取得完了レスポンス
    Job->TodoAppAPI: タスク状態取得リクエスト
    Job<-TodoAppAPI: 取得完了レスポンス
    Job->DB: タスク状態更新リクエスト
    Job<-DB: 更新完了レスポンス
    |||
    Job->DB: タスク全情報取得
    Job<-DB: 取得完了レスポンス
    Job->Job: 分析処理
end
Job->Job: 通知内容生成
Job->TodoAppAPI: タスク状態更新リクエスト
Job<-TodoAppAPI: 更新完了レスポンス
Job->ThirdPartyAPI: 通知リクエスト
Job<-ThirdPartyAPI: 通知完了レスポンス
コントローラ<-Job: 実行完了レスポンス
@enduml
