anilistarr/anilistarr.puml
2023-08-24 22:39:25 +02:00

138 lines
2.5 KiB
Text

@startuml components
package entities {
struct Media {
SourceID string
TargetID string
}
struct CustomEntry {
TvdbID uint64
}
struct CustomList <<alias>> {
[]CustomEntry
}
}
package usecases {
interface "Mapper" as IMapper {
+MapIDs([]string) []string
+MapID(string) string
+Refresh()
}
interface Tracker {
+GetUserID(name string) string
+GetMediaList(userId string) []Media
}
class MediaLister {
+Generate(name string) CustomList
+GetUserID(name string) string
}
}
package adapters {
package mapper <<Frame>> {
interface Provider {
Fetch()
}
interface Metadata {
GetSourceID() string
GetTargetID() string
}
interface Store {
GetMedia(Context, string) (Media, error)
GetMediaBulk(Context, []string) ([]Media, error)
PutMedia(Context, media Media) error
PutMediaBulk(Context, medias []Media) error
}
class JSONLocalProvider
class JSONProvider
class Mapper
}
package cache <<Frame>> {
interface Cache {
GetString(ctx, key) string
SetString(ctx, key, value)
}
class CachedTracker
}
}
package drivers {
package providers <<Frame>> {
struct AnilistFribbsMetadata
entity AnilistFribbsProvider
}
package stores <<Frame>> {
class Sql
}
package caches <<Frame>> {
class Redis
class Bolt
}
package trackers <<Frame>> {
class Anilist
}
}
package cmd {
package api {
class RestAPI <<net.http>>
entity "main" as apiMain
RestAPI o-- apiMain
}
package cli {
entity "main" as cliMain
}
}
'' visual hack to force both outer-level packages on the same rank
drivers -[hidden] cmd
'' entities
CustomEntry --* CustomList
'' use-cases
Media <-- MediaLister
CustomList <-- MediaLister
MediaLister o--> IMapper
MediaLister o--> Tracker
'' adapters/mapper
IMapper <|-[dashed]- Mapper
Provider -> Metadata
Mapper o--> Provider
Mapper o--> Store
Provider <|-[dashed]- JSONLocalProvider
Provider <|-[dashed]- JSONProvider
'' adapters/cache
Tracker <|-[dashed]- CachedTracker
CachedTracker o--> Cache
CachedTracker o--> Tracker
'' drivers/providers
AnilistFribbsMetadata -* AnilistFribbsProvider
JSONProvider <|-- AnilistFribbsProvider
Metadata <|-[dashed]- AnilistFribbsMetadata
'' drivers/stores
Store <|-[dashed]- Sql
'' drivers/caches
Cache <|-[dashed]- Bolt
Cache <|-[dashed]- Redis
'' drivers/trackers
Tracker <|-[dashed]- Anilist
'' cmd
MediaLister <--o RestAPI
@enduml