Data Structure

The root entity is a Site. A User can create one or more Sites (limitations my apply if your instance supports payment plans). A Site has Models. A Model has Fields.

Site, Model and Field have a Name property. It must be unique:

for Site — belonging to one User

for Model — belonging to one Site

for Field — belonging to one Model

When user creates a Site, Model or Field and sets its name, the nameId property is generated — it comes out of name by replacing special symbols. It it unique — it is ensured by adding _increment postfix if it needs. If user renames site (model, field), its nameId property stays the same.

Site's nameId is created using this pattern (an owner's email used):

ct____${filteredEmail}____${filteredName}

A function for email filtering :


  encodeURIComponent(email) 
    .replace(/[!'()*.~_-]/g, c => 
       '%' + c.charCodeAt(0).toString(16)
     ) 
    .replace(/%/g, `_`);

Content Items are stored in tables, there is one created for each Model. A table's name forms when user creates a model by this pattern:

ct____${site.nameId}____${model.nameId}

Table fields have same names as Model fields' nameIds.

If you want to delete a field, you should add disabled option to it first via the Model editing UI or via Parse-Dashboard.

You can't delete a Model while there are content items of its type. You should delete them first.

You can delete a whole Site, with its Models, Fields and Content Items.