Add streaming flow diagrams, update existing flows with streaming references
Ultraworked with [Sisyphus](https://github.com/code-yeongyu/claude-agent) Co-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>
This commit is contained in:
@@ -0,0 +1,102 @@
|
||||
@startuml MonitorAlbumStream - Already Owned Scenarios
|
||||
skinparam sequenceMessageAlign center
|
||||
skinparam responseMessageBelowArrow true
|
||||
title MonitorAlbumStream: Already Owned Handling
|
||||
|
||||
actor Client
|
||||
participant "monitorWorkflow" as Workflow
|
||||
database "PostgreSQL" as DB
|
||||
participant "IndexerService" as Indexer
|
||||
|
||||
== Scenario A: Automatic Mode - Early Return ==
|
||||
|
||||
Client -> Workflow: StartMonitorRequest(mode=AUTOMATIC)
|
||||
|
||||
Workflow ->> Client: StatusUpdate(FETCHING_METADATA)
|
||||
note right #lightblue: "Fetching album metadata..."
|
||||
Workflow ->> Client: StatusUpdate(FETCHING_METADATA)
|
||||
note right #lightblue: "Got: Artist - Title"\nData: StreamAlbumInfo
|
||||
Workflow ->> Client: StatusUpdate(CHECKING_OWNED)
|
||||
|
||||
Workflow -> DB: downloads.HasAlbumInQuality()
|
||||
DB --> Workflow: true
|
||||
|
||||
Workflow ->> Client: StatusUpdate(COMPLETE)
|
||||
note right #lightgreen: "Already owned"
|
||||
|
||||
Workflow ->> Client: MonitorAlbumResponse
|
||||
note right: album: monitored\ndownload: existing info\nrelease: nil (no search)
|
||||
|
||||
note over Client, Workflow #lightblue
|
||||
**Automatic Mode**: Skips search entirely.
|
||||
Returns immediately with existing download info.
|
||||
end note
|
||||
|
||||
== Scenario B: Manual Mode - User Confirms Continue ==
|
||||
|
||||
Client -> Workflow: StartMonitorRequest(mode=MANUAL)
|
||||
|
||||
Workflow ->> Client: StatusUpdate(FETCHING_METADATA)
|
||||
Workflow ->> Client: StatusUpdate(FETCHING_METADATA)
|
||||
Workflow ->> Client: StatusUpdate(CHECKING_OWNED)
|
||||
|
||||
Workflow -> DB: downloads.HasAlbumInQuality()
|
||||
DB --> Workflow: true
|
||||
|
||||
Workflow ->> Client: PromptForDecision
|
||||
note right #orange: type: CONFIRM\nmessage: "Album already owned. Download anyway?"\ndefault: false
|
||||
|
||||
Client -> Workflow: UserDecision(confirm=true)
|
||||
note right #lightgreen: User chooses\nto continue
|
||||
|
||||
Workflow ->> Client: StatusUpdate(SEARCHING_INDEXER)
|
||||
note right: Proceeds with normal flow...
|
||||
|
||||
Workflow -> Indexer: Search()
|
||||
note right: ... continues to completion
|
||||
|
||||
== Scenario C: Manual Mode - User Skips ==
|
||||
|
||||
Client -> Workflow: StartMonitorRequest(mode=MANUAL)
|
||||
|
||||
Workflow ->> Client: StatusUpdate(FETCHING_METADATA)
|
||||
Workflow ->> Client: StatusUpdate(FETCHING_METADATA)
|
||||
Workflow ->> Client: StatusUpdate(CHECKING_OWNED)
|
||||
|
||||
Workflow -> DB: downloads.HasAlbumInQuality()
|
||||
DB --> Workflow: true
|
||||
|
||||
Workflow ->> Client: PromptForDecision
|
||||
note right #orange: type: CONFIRM\nmessage: "Album already owned. Download anyway?"
|
||||
|
||||
Client -> Workflow: UserDecision(confirm=false)
|
||||
note right #lightyellow: User chooses\nto skip
|
||||
|
||||
Workflow ->> Client: StatusUpdate(COMPLETE)
|
||||
note right: "Skipped - already owned"
|
||||
|
||||
Workflow ->> Client: MonitorAlbumResponse
|
||||
note right: album: monitored\ndownload: existing info\nrelease: nil
|
||||
|
||||
== Scenario D: Manual Mode - Timeout ==
|
||||
|
||||
Client -> Workflow: StartMonitorRequest(mode=MANUAL)
|
||||
|
||||
Workflow ->> Client: StatusUpdate(FETCHING_METADATA)
|
||||
Workflow ->> Client: StatusUpdate(FETCHING_METADATA)
|
||||
Workflow ->> Client: StatusUpdate(CHECKING_OWNED)
|
||||
Workflow ->> Client: PromptForDecision
|
||||
|
||||
note over Client, Workflow #lightyellow
|
||||
Client does not respond within timeout (max: 300s)
|
||||
end note
|
||||
|
||||
Workflow -> Workflow: Use default decision
|
||||
note right: default: false\n(skip download)
|
||||
|
||||
Workflow ->> Client: StatusUpdate(COMPLETE)
|
||||
note right: "Skipped - already owned"
|
||||
|
||||
Workflow ->> Client: MonitorAlbumResponse
|
||||
|
||||
@enduml
|
||||
Reference in New Issue
Block a user