gimntut / databoom-talking

Территория обсуждений потенциальных возможностей databoom

Home Page:https://github.com/gimntut/databoom-talking/issues

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

О метаданных

gimntut opened this issue · comments

Изучая allobjects, я порадовался, что объект может находиться в нескольких коллекциях. Это невероятно крутая возможность, которая позволяет найти счёт-фактуру 2015 года и в коллекции "Счета-фактуры" и в "Документы 2015".
Но меня расстроило то, что метаданные вдруг оказались внутри объекта. Это очень плохо, что такие данные передаются на клиент. Но ещё хуже, что у меня нет ни какой возможности использовать метаданные в работе, т.к. таковыми они не являются.

Рассмотрим такой allobjects:

{
  "d": {
    "results": [{
      "id": "2e0402-6e51-4d16-be61-3975e07b39",
      "a": "2",
      "collections": [{
        "id": "table1"
      }]
    }, {
      "id": "table1"
    }]
  }
}

В реальности это должно было выглядеть так (сравнение):

{
  "d": {
    "results": [{
      "id": "2e0402-6e51-4d16-be61-3975e07b39",
      "a": "2",
      "meta": {
        "type": "record",
        "collections": [{
          "id": "table1"
        }]
      },
    }, {
      "id": "table1",
      "meta": {
        "type": "collection",
        "flags": []
      }
    }]
  }
}

Типы могут быть следующими: record (запись), collection (коллекция), user collection (пользовательская коллекция), system collection (системная коллекция), scalar (объект)
ссылка по теме
Scalar - это такие вещи, как пользователь ($user), правила ($rules) и опции ($options)

Флаги, это дополнительные возможности, которые доступны для коллекции:

  • timestamp - временная метка
  • revision - ведение ревизий записей
  • и т.д.

Как это работает (сравнение):

{
  "d": {
    "results": [{
      "id": "2e0402-6e51-4d16-be61-3975e07b39",
      "a": "2",
      "meta": {
        "type": "record",
        "collections": [{
          "id": "table1"
        }],
        "timestamp": "1436601928",
        "revision": "762190",
        "isLastRevision": true
      },
    }, {
      "id": "2e0402-6e51-4d16-be61-3975e07b39",
      "a": "1",
      "meta": {
        "type": "record",
        "collections": [{
          "id": "table1"
        }],
        "timestamp": "1434009921",
        "revision": "190762",
        "IsLastRevision": true
      },
    }, {
      "id": "table1",
      "meta": {
        "type": "collection",
        "flags": ["timestamp", "revision"]
      }
    }]
  }
}

Метаданные не должны передаваться на клиент, если это не указано явно в запросе. И обязательно должен быть выбор, какие метаданные передавать, а какие нет:
.../collections/table1/?flags=timestamp,revision