59 lines
2.0 KiB
Plaintext
59 lines
2.0 KiB
Plaintext
@startuml MonitorAlbum - Metadata Fetch Failures
|
|
skinparam sequenceMessageAlign center
|
|
skinparam responseMessageBelowArrow true
|
|
title MonitorAlbum Error: Metadata Fetch Failures
|
|
|
|
actor Client
|
|
participant "MusicAgregatorService" as Service
|
|
participant "MetadataService" as Metadata
|
|
database "metadata-agregator\n(gRPC)" as MetaGRPC
|
|
database "PostgreSQL" as DB
|
|
|
|
== Case 1: metadata-agregator unreachable ==
|
|
|
|
Client -> Service: MonitorAlbum(album_id, quality)
|
|
Service -> Metadata: GetAlbum(album_id)
|
|
Metadata -> MetaGRPC: GetAlbum(id)
|
|
MetaGRPC --> Metadata: gRPC error (Unavailable)
|
|
Metadata --> Service: error: "fetching album: ..."
|
|
Service --> Client: error (Unavailable)
|
|
note right: Full stop.\nNo DB writes occur.\nNo indexer search.
|
|
|
|
== Case 2: Album not found in metadata ==
|
|
|
|
Client -> Service: MonitorAlbum(album_id, quality)
|
|
Service -> Metadata: GetAlbum(album_id)
|
|
Metadata -> MetaGRPC: GetAlbum(id)
|
|
MetaGRPC --> Metadata: gRPC error (NotFound)
|
|
Metadata --> Service: error: "fetching album: ..."
|
|
Service --> Client: error (NotFound)
|
|
note right: Full stop.\nInvalid album_id.\nNo side effects.
|
|
|
|
== Case 3: Album found, but artist persist fails ==
|
|
|
|
Client -> Service: MonitorAlbum(album_id, quality)
|
|
Service -> Metadata: GetAlbum(album_id)
|
|
Metadata -> MetaGRPC: GetAlbum(id)
|
|
MetaGRPC --> Metadata: Album
|
|
|
|
Metadata -> DB: albums.GetByExternalID()
|
|
DB --> Metadata: not found
|
|
|
|
Metadata -> DB: artists.Create()
|
|
DB --> Metadata: error (e.g. connection lost)
|
|
note right #salmon: Artist persist fails.\nLogged as warning.\nFlow continues.
|
|
|
|
Metadata -> DB: albums.Create()
|
|
note right #salmon: artistID is empty\n→ album persist skipped\n(no artist reference)
|
|
|
|
Metadata --> Service: Album (metadata only)
|
|
|
|
Service -> DB: albums.GetByExternalID()
|
|
DB --> Service: not found (album never persisted)
|
|
note right #salmon: dbAlbum is nil.\nMonitor state not set.\nOwnership check skipped.
|
|
|
|
Service -> Service: continues to indexer search...
|
|
note right: Flow proceeds but\ndownload persistence\nwill be skipped later\n(dbAlbum == nil)
|
|
|
|
@enduml
|