diff --git a/docs/Design/class_diagram_cpp.puml b/docs/Design/class_diagram_cpp.puml new file mode 100644 index 00000000..b61ddf3f --- /dev/null +++ b/docs/Design/class_diagram_cpp.puml @@ -0,0 +1,143 @@ +@startuml ScorePersistencyKvsDesign + +' Define color schemes matching original design +skinparam class { + BackgroundColor<> LightYellow + BorderColor<> DarkGoldenRod + BackgroundColor<> LightBlue + BorderColor<> DodgerBlue + BackgroundColor<> LightPink + BorderColor<> IndianRed +} + +class KvsBuilder <> { + - instance_id: InstanceId + - need_defaults : KvsDefaults + - need_kvs : KvsLoad + - backend: IStorageBackend + - {static} Kvs_pool : std::unordered_map > + __ + + KvsBuilder(instance_id:InstanceId) + + NeedDefaultsFlag(flag:bool) : KvsBuilder& + + NeedKvsFlag(flag:bool) : KvsBuilder& + + Backend(backend:IStorageBackend) : KvsBuilder& + + Build() : std::shared_ptr +} + + + +interface IStorageBackend <> { + + LoadKvs(instance_id:InstanceId, snapshot_id:SnapshotId):IKvs + + LoadDefault(instance_id:InstanceId):IKvs + + Flush(instance_id:InstanceId, kvs:unordered_map):ResultBlank + + SnapshotCount(instance_id:InstanceId):Result + + SnapshotRestore(instance_id:InstanceId, snapshot_id:SnapshotId):Kvs + + SnapshotMaxCount():Result +} + +interface IKvs <> { + + Reset():ResultBlank + + ResetKey(key:string):ResultBlank + + GetAllKeys():Result> + + KeyExists(key:string):Result + + GetValue(key:string):Result + + GetDefaultValue(key:string):Result + + IsDefaultValue(key:string):Result + + SetValue(key:string, value:KvsValue):ResultBlank + + RemoveKey(key:string):ResultBlank + + Flush():ResultBlank + + SnapshotCount():Result + + SnapshotMaxCount():Result + + SnapshotRestore(snapshot_id:SnapshotId):ResultBlank + + GetHashFilename(snapshot_id:SnapshotId):Result +} + + +IStorageBackend -[hidden]right- IKvs +IStorageBackend_Mock -[hidden]right- JsonBackend +JsonBackend -[hidden]right- IKvs_mock +IKvs_mock -[hidden]right- Kvs + + +class IStorageBackend_Mock <> { + + LoadKvs(instance_id:InstanceId, snapshot_id:SnapshotId):IKvs + + LoadDefault(instance_id:InstanceId):IKvs + + Flush(instance_id:InstanceId, kvs:unordered_map):ResultBlank + + SnapshotCount(instance_id:InstanceId):Result + + SnapshotRestore(instance_id:InstanceId, snapshot_id:SnapshotId):Kvs + + SnapshotMaxCount():Result +} + +class JsonBackend <> { + - Instance_id: InstanceId + - filename_prefix : score::filesystem::path + - filesystem : score::filesystem + - parser : unique_ptr parser + - writer : unique_ptr writer + - directory : string + - max_snapshot_count : size_t + __ + + JsonBackend(instance_id:InstanceId, filename_prefix:score::filesystem::path, filesystem:score::filesystem, directory:string, max_snapshot_count:size_t) + + LoadKvs(instance_id:InstanceId, snapshot_id:SnapshotId):IKvs + + LoadDefault(instance_id:InstanceId):IKvs + + Flush(instance_id:InstanceId, kvs:unordered_map):ResultBlank + + SnapshotCount(instance_id:InstanceId):Result + + SnapshotRestore(instance_id:InstanceId, snapshot_id:SnapshotId):Kvs + + GetHashFilename(snapshot_id:SnapshotId):Result + + Dir(dir_path:string):ResultBlank + + SnapshotMaxCount():Result + +} + +class IKvs_mock <> { + + Reset():ResultBlank + + ResetKey(key:string):ResultBlank + + GetAllKeys():Result> + + KeyExists(key:string):Result + + GetValue(key:string):Result + + GetDefaultValue(key:string):Result + + IsDefaultValue(key:string):Result + + SetValue(key:string, value:KvsValue):ResultBlank + + RemoveKey(key:string):ResultBlank + + Flush():ResultBlank + + SnapshotCount():Result + + SnapshotMaxCount():Result + + SnapshotRestore(snapshot_id:SnapshotId):ResultBlank + + GetHashFilename(snapshot_id:SnapshotId):Result +} + +class Kvs <> { + + kvs : unordered_map + + default_kvs : unordered_map + + logger : unique_ptr logger + + Storage_backend : IStorageBackend + __ + + Reset():ResultBlank + + ResetKey(key:string):Result + + GetAllKeys():Result> + + KeyExists(key:string):Result + + GetValue(key:string):Result + + GetDefaultValue(key:string):Result + + IsDefaultValue(key:string):Result + + SetValue(key:string, value:KvsValue):ResultBlank + + RemoveKey(key:string):ResultBlank + + Flush():ResultBlank + + SnapshotCount():Result + + SnapshotMaxCount():Result + + SnapshotRestore(snapshot_id:SnapshotId):ResultBlank + + GetHashFilename(snapshot_id:SnapshotId):Result +} + +' Relationships +IStorageBackend_Mock -up-|> IStorageBackend : implements +JsonBackend -up-|> IStorageBackend : implements +IKvs_mock -up-|> IKvs : implements +Kvs -up-|> IKvs : implements + +' Dependencies +KvsBuilder ..> IStorageBackend : uses +KvsBuilder ..> IKvs : uses +IStorageBackend *-- IKvs : Composes + + +@enduml