Skip to content

メモ(仕様)

藻 edited this page Feb 10, 2020 · 2 revisions

ノートへの手書きのメモを転記したものです。


メタデータバンドル

YAML ファイル1個で記述される。
フォルダ1つあたり、0〜1個、配置される。

descendants

記述できる内容

  • タグ(tags)
  • モード(override, merge)
[動画,]
descendants:
  mode: override # それまでの tags を上書き
  tags: [動画]

まず⋯⋯YAML の表現へ⋯⋯。
そして⋯⋯抽象的な表現へ⋯⋯。(動的なバリデーション。)


desc:
  mode: override

受けついだ属性を消す。
tags: [] (デフォルト値)

  • mode: override を指定して、ある属性に値が指定されなかったときは、その属性の所定のデフォルト値が設定される。
desc:
  mode: merge

変化しない。


interface MetadataBundle {
    descendants: AttachedMetadata;
    directory: AttachedMetadata;
    items: Map<String, AttachedMetadata>;
}

interface AttachedMetadata {
    /**
     * 省略されたら merge なので、Optional である必要はない。
     */
    mode: Mode;

    /**
     * mode: override 時: 設定しないことで、デフォルト値
     * merge 時: 設定しないことで、親の値を引きつぐ
     */
    tags: Option<List<String>>;
}

YamlDesr

case class MetadataBundle(
    mode: Mode,
    tags: Option[Seq[String]],
)
desr
    object(
        "mode" -> option(string())
            .then {
                case Some(value) ->
                    Mode.parse(...).orThrow(...)

インデクシング

  1. マニフェスト解決
  2. リポジトリ設定取得
  3. リポジトリ更新

インデックス
属性

  • アイテム
    リポジトリID パス 名前(?)

Components (MongoDB)
  id
  name "S01_C02.psd"
  parent_id: (UUID)
  repository_id: "mock-matex"
  path: "doga/S01/../C02.psd"
  blob_id: "〜". (UUID)
  _constructor: LeafElement

CompositeElement のとき、 blob_id なし。
それ以外は変わらない。

items: [
  {
    "file": {
      "id": ...,
      "parentId": ...,
      "name": ...,
      "path": ...,
    },
    thumbnail: {
      "id": ...,
      "width": ...,
      "height": ...,
    },
  },
  ...
]

  • コンポーネントの特性に応じて、それが持つ属性集合が定まる。

Thumbnail 特性 ←現在は対応しない

Repository:
  children: Component[]

テーブル

components (elements)

案1: 複合主キー

  • repository_id
  • path: /foo/bar/baz.jpg
  • kind: "leaf" | "composite" ⋯ file | directory

ルートディレクトリをディレクトリとして表現しない。

◆ ep01    ⋯⋯①
└📂 動画 ⋯⋯②
 └📄 1.wav ⋯⋯③


② path: /動画 parent_id: null
③ path: /動画/1.wav parent_id: /動画