Skip to content

Metadata Structure

Jakub Rodák edited this page Jun 23, 2017 · 38 revisions

CollectionMetadataFacade

{
   "name":"CollectionMetadataFacadeCollectionDropOrDecrementAttribute",
   "internal":"collection.collectionmetadatafacadecollectiondropordecrementattribute_0",
   "attributes":[
      {
         "name":"attribute1",
         "full-name":"attribute1",
         "constraints":[ "isNumber", "lessThan:3"],
         "count":2
      },
      {
         "name":"child",
         "full-name":"attribute1.child",
         "constraints":[],
         "count":1
      }
   ],
   "last":   ISODate("2017-03-24T17:04:10.989   Z"),
   "recently":[]
}

name is name of collection given by user,

internal is actual name of the collection,

attributes is an array of attribute documents,

full-name is name with all its parents,

constraints is array of strings with constraints configurations,

count is a number of documents in collection that contain the attribute,

last is the time when collection was used for the last time,

recently is an array of IDs of documents in collection, the first is the one most recently used.

ConfigurationFacade

There are three collections in the system database used by ConfigurationFacade to store configuration:

  • _config_user
  • _config_project
  • _config_organization

Each of these collections has the following structure:

{
  "name": "organizationId/projectId/userEmail",
  "configs": [
               {
                "key" : "config1",
                "value" : "value1",
                "description" : "some description...",
                "restricted" : true/false
               },
              {},{},...
}

The only difference is in the name field which is organizationId/projectId for project configuration and just organizationId for organization configuration.

DocumentMetadataFacade

    {
   	"_meta-create-date" : "date",
   	"_meta-update-date" : "date",
   	"_meta-creator-user" : "user_name",
   	"_meta-update-user" : "user_name",
   	… (rest of the document) …
   }

_meta-create-date is date of creation document,

_meta-update-date is date of last update of document,

_meta-creator-user is user who create the document,

_meta-update-user is user who perform last update on document,

ViewFacade

{
   "name":"viewCreateInitialMetadata",
   "view-id":0,
   "type":"default",
   "configuration":{

   }
}

name is name of view given by user,

view-id is unique number generated by SequenceFacade,

type is view type,

configuration is nested document with arbitrary keys and values.

VersionFacade

{
    "_id":{"_id" : "idOfDocument", "_meta-version" : 3},
   // rest of document is same as in DocumentMetadataFacade
}

LinkingFacade

Linking type collection

{
 "project": "projectId",
 "fromCollection": "collection1",
 "toCollection" : "collection2",
 "role" : "role"
}

fromCollection is name of first collection

toCollection is name of second collection

project is the name of project

role is name of role which specify link between collections

Linking instances collection

{
   "type-id": "typeId",
   "from-id" : "id1",
   "to-id" : "id2",
   "attributes" : {
         "attr1" : "value1",
         ....
    }
}

type-id is the id from linking type collection

fromId is the id of first document,

toId is the id of second document,

attributes are some custom attributes of link instance

ProjectFacade

{
   "project-id" : "projId",
   "organization-id" : "orgId",
   "project-name" : "name",
   "users" : [
      {"user" : "user1", "user-roles":["role1", "role2", "role3"]},
      {"user" : "user2", "user-roles":["role15", "role26", "role31"]},
      {"user" : "user3", "user-roles":["role2", "role3", "role4"]},
      {"user" : "user4", "user-roles":["role2", "role3", "role5"]},
   ],
   "_meta-icon": "icon",
   "_meta-color" : "color",
   "_meta-default-roles" : ["role1", "role15"]
}

project-id is unique id of the project,

organization-id is id of the organization,

project-name is unique name of the project,

users is array of users and their roles,

_meta-icon is icon of the project,

_meta-color is default color of the project,

_meta-default-roles are default role for newly created users

OrganizationFacade

{ 
   "organization-id" : "orgId", 
   "organization-name" : "name", 
   "organization-info-data" : {
      "attribute1": "value1",
      "attribute2": "value2",
      ...
   }, 
   "users" : [
      { "user" : "user1", "user-roles" : ["role1", "role2", "role3"] }, 
      { "user" : "user2", "user-roles" : ["role4", "role10", "role12"] }, 
      { "user" : "user3", "user-roles" : ["role3", "role52", "role9"] }
   ],
   "_meta-icon" : "icon", 
   "_meta-color" : "color",
   "_meta-default-roles" : ["role1", "role2"]
} 

organization-id is unique id of the organization,

organization-name is unique name of the organization,

organization-info-data is a list of additional organization pieces of information,

users is an array of users and their roles,

_meta-icon is an icon of the organization,

_meta-color is default color of the organization,

_meta-default-roles are default roles for newly created users in the organization

UserRolesFacade

{
   "organization-id" : "orgId",
   "project-id" : "projId",
   "user-role" : "role1",
   "core-roles" : ["core1", "core2", "core3"]
}

organization-id is id of the organization,

project-id is unique id of the project,

user-role is the name of the defined role,

core-roles are core roles that define user-role

SecurityFacade

Organisation roles

{
   "organization-id":"project1",
   "roles":{
      "manage":{
         "users": ["user1", "user2"],
         "groups": ["group1"]
      },
      "write":{
         "users": [],
         "groups": ["group2"]
      }
   },
}

Project roles

{
   "project-id":"project1",
   "source-type":"project",
   "roles":{
      "manage":{
         "users": ["user1", "user2"],
         "groups": ["group1"]
      },
      "write":{
         "users": [],
         "groups": ["group2"]
      }
   },
}

Collection roles

{
   "project-id":"project1",
   "source-id":"my collection",
   "source-type":"collection",
   "roles":{
      "manage":{
         "users": ["user1", "user2"],
         "groups": ["group1"]
      },
      "write":{
         "users": [],
         "groups": ["group2"]
      },
      "read":{
         "users": [],
         "groups": []
      },
      "share":{
         "users": [],
         "groups": ["group2"]
      }
   },
}

View roles

{
   "project-id":"project1",
   "source-id":"my view",
   "source-type":"view",
   "roles":{
      "manage":{
         "users": ["user1", "user2"],
         "groups": ["group1"]
      },
      "read":{
         "users": [],
         "groups": ["group2"]
      },
      "clone":{
         "users": [],
         "groups": []
      }
   },
}

source-id is name of collection, or id of view, or id of project,

source-type is collection, view or project,

project-id is id of project where the collection/view belongs.

Clone this wiki locally