Architecture

graph TD title[Assets Hierarchy] %% Top level assets[assets] %% Asset Classes ac1["asset_class • id: [hash1] • name: [name1]"] ac2["asset_class • id: [hash2] • name: [name2]"] ac3["asset_class... • id: ... • name: ..."] %% Assets level 1 a1["asset • id: ... • class_id: [hash3] • class_name: [name3] • top_hash: [hash4] • seq_id: ... • version: 0.0.1"] a2["asset • id: ... • class_id: [hash3] • class_name: [name3] • top_hash: [hash5] • seq_id: ... • version: 0.0.1"] a3["asset • id: ... • class_id: [hash3] • class_name: [name3] • top_hash: [hash6] • seq_id: ... • version: 0.0.1"] a4["asset • id: ... • class_id: ... • class_name: ... • top_hash: ... • seq_id: ... • version: ..."] %% Assets level 2 a5["asset • class_id: [hash3] • class_name: [name3] • top_hash: [hash4] • seq_id: ... • version: 0.0.2 • parent_version: 0.0.1"] a6["asset • class_id: [hash3] • class_name: [name3] • top_hash: [hash4] • seq_id: ... • version: 0.0.3 • parent_version: 0.0.2"] a7["asset • class_id: [hash3] • class_name: [name3] • top_hash: [hash4] • seq_id: ... • version: 0.0.5 • parent_version: 0.0.3"] a8["asset • class_id: [hash3] • class_name: [name3] • top_hash: [hash4] • seq_id: ... • version: 0.1.2 • parent_version: 0.0.2"] a9["asset • class_id: [hash3] • class_name: [name3] • top_hash: [hash4] • seq_id: ... • version: 0.8.7 • parent_version: 0.0.1"] %% Objects o1["object • asset_id: [hash7] • content_id: [hash8] • path: test_data/file1 • size: 12MB • date: 2021-10-29 • created_by: user1"] o2["object • asset_id: [hash7] • content_id: [hash9] • path: test_data/file2 • size: 12MB • date: 2021-10-29 • created_by: user1"] o3["object • asset_id: [hash7] • content_id: [hash8] • path: test_data/file3 • size: 12MB • date: 2021-10-29 • created_by: user1"] o4["object • asset_id: [hash7] • content_id: [hash9] • path: test_data/file4 • size: 12MB • date: 2021-11-29 • created_by: user1"] o5["object • asset_id: [hash7] • content_id: [hash9] • path: test_data/file5 • size: 12MB • date: 2021-11-30 • created_by: user1"] o6["object • asset_id: [hash7] • content_id: [hash10] • path: test_data/file6 • size: 12MB • date: 2021-10-24 • created_by: user1"] o7["object • asset_id: [hash7] • content_id: [hash10] • path: test_data/file7 • size: 12MB • date: 2021-10-29 • created_by: user1"] %% Contents c1["content • class_id: [hash8] • hash: [hash11] • size: 12MB • type: text/plain • src: [optional/null]"] c2["content • class_id: [hash8] • hash: [hash12] • size: 12MB • type: text/plain • src: [optional/null]"] c3["content • class_id: [hash8] • hash: [hash13] • size: 12MB • type: image/jpeg • src: [optional/null]"] c4["content • class_id: [hash8] • hash: [hash14] • size: 12MB • type: image/jpeg • src: [optional/null]"] c5["content • class_id: [hash8] • hash: [hash15] • size: 12MB • type: image/jpeg • src: [optional/null]"] c6["content • class_id: [hash8] • hash: [hash16] • size: 12MB • type: text/plain • src: [optional/null]"] %% Asset class storage acs1["asset_class_storage • id: [hash1] • name: [name1]"] acs2["asset_class_storage • id: [hash2] • name: [name2]"] acs3["asset_class_storage... • id: ... • name: ..."] %% Bottom level services gs[gs:Bucket] bq[gs:BigQuery] gcr[gcr:Registry] http["http, https, ftps"] sql["sql, postgres, mongodb etc"] %% Process labels process1["asset init <class_name>"] process2["asset add <file | dir>"] process3["asset upload"] process4["asset download"] %% Connections title --- assets assets --> ac1 assets --> ac2 assets --> ac3 ac1 --> a1 ac1 --> a2 ac2 --> a3 ac3 --> a4 process1 -.-> a1 a1 --> a5 a5 --> a6 a6 --> a7 a5 --> a8 a1 --> a9 process2 -.-> a5 a5 --- o1 a6 --- o2 a7 --- o3 a8 --- o4 a9 --- o5 a8 --- o6 a9 --- o7 o1 --- c1 o2 --- c2 o3 --- c3 o4 --- c4 o5 --- c5 o6 --- c6 o7 --- c6 c1 --> acs1 c2 --> acs1 c3 --> acs1 c4 --> acs1 c5 --> acs1 c6 --> acs1 process3 -.-> acs1 process4 -.-> acs1 acs1 --> gs acs2 --> gs acs3 --> gs gs --- bq gs --- gcr gs --- http gs --- sql