138 lines
2.5 KiB
Text
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
|