Resource Update Samples 🔗

This document shows a set of write operations that provide concrete examples of how the Resource Processing Algorithm is applied based on the state of the Registry and the incoming request. They are meant to be read in order to avoid repeating the same commentary for each example.

Table of Contents 🔗

The Setup 🔗

Each example:

        {
          "groups": {
            "dirs": {
              "singular": "dir",
              "resources": {
                "files": {
                  "singular": "file",
                  "hasdocument": false,
                  "versionmode": "createdat"
                }
              }
            }
          }
        }

Create single Resource with empty content 🔗

Initial State:

Empty

Request:

PUT /dirs/d1/files/f1

{}

Final State:

{
  "fileid": "f1",
  "versionid": "1",
  "epoch": 1,
  "isdefault": true,
  "createdat": "now",
  "modifiedat": "now",
  "ancestor": "1",

  "meta": {
    "epoch": 1,
    "createdat": "now",
    "modifiedat": "now",
    "defaultversionid": "1",
    "defaultversionsticky": false
  },
  "versions": {
    "1": { see Resource.* attrs }
  }
}

Notes:


Create Resource via the "files" collection 🔗

Initial State:

Empty

Request:

POST /dirs/d1/files

{
  "f1": {
    "name": "my file"
  }
}

Final State:

{
  "f1": {
    "fileid": "f1",
    "versionid": "1",
    "epoch": 1,
    "name": "my file",
    "isdefault": true,
    "createdat": "now",
    "modifiedat": "now",
    "ancestor": "1",

    "meta": {
      "epoch": 1,
      "createdat": "now",
      "modifiedat": "now",
      "defaultversionid": "1",
      "defaultversionsticky": false
    },
    "versions": {
      "1": { see Resource.* attrs }
    }
  }
}

Notes:


Create Resource with Versions, no defaultversionid 🔗

Initial State:

Empty

Request:

PUT /dirs/d1/files/f1

{
  "name": "foo",
  "versions": {
    "v1": {},
    "v2": {}
  }
}

Final State:

{
  "fileid": "f1",
  "versionid": "v2",
  "epoch": 1,
  "isdefault": true,
  "createdat": "now",
  "modifiedat": "now",
  "ancestor": "v1",

  "meta": {
    "epoch": 1,
    "createdat": "now",
    "modifiedat": "now",
    "defaultversionid": "v2",
    "defaultversionsticky": false
  },
  "versions": {
    "v1": {
      "epoch": 1,
      "createdat": "now",
      "modifiedat": "now",
      "ancestor": "v1"
    },
    "v2": { see Resource.* attrs }
  }
}

Notes:


Create Resource with Versions and defaultversionid 🔗

Initial State:

Empty

Request:

PUT /dirs/d1/files/f1

{
  "name": "foo",
  "meta": {
    "defaultversionid": "v1"
  },
  "versions": {
    "v1": {
      "createdat": "2020"
    },
    "v2": {
      "createdat": "3030"
    },
    "v3": {}
  }
}

Final State:

{
  "fileid": "f1",
  "versionid": "v2",
  "epoch": 1,
  "isdefault": true,
  "createdat": "3030",
  "modifiedat": "now",
  "ancestor": "v3",

  "meta": {
    "epoch": 1,
    "createdat": "now",
    "modifiedat": "now",
    "defaultversionid": "v2",
    "defaultversionsticky": false
  },
  "versions": {
    "v1": {
      "epoch": 1,
      "createdat": "2020",
      "modifiedat": "now",
      "ancestor": "v1"
    },
    "v2": { see Resource.* attrs },
    "v3": {
      "epoch": 1,
      "createdat": "now",
      "modifiedat": "now",
      "ancestor": "v1"
    }
  }
}

Notes:


Create Resource with Versions and unique defaultversionid 🔗

Initial State:

Empty

Request:

PUT /dirs/d1/files/f1

{
  "name": "foo",
  "meta": {
    "defaultversionid": "v1"
  },
  "versions": {
    "v2": {},
    "v3": {}
  }
}

Final State:

{
  "fileid": "f1",
  "versionid": "v3",
  "epoch": 1,
  "isdefault": true,
  "createdat": "now",
  "modifiedat": "now",
  "ancestor": "v2",

  "meta": {
    "epoch": 1,
    "createdat": "now",
    "modifiedat": "now",
    "defaultversionid": "v3",
    "defaultversionsticky": false
  },
  "versions": {
    "v1": {
      "epoch": 1,
      "name": "foo",
      "createdat": "now",
      "modifiedat": "now",
      "ancestor": "v1"
    },
    "v2": {
      "epoch": 1,
      "createdat": "now",
      "modifiedat": "now",
      "ancestor": "v1"
    },
    "v3": { see Resource.* attrs },
  }
}

Notes:


Create Resource with defaultversionid 🔗

Initial State:

Empty

Request:

PUT /dirs/d1/files/f1

{
  "name": "foo",
  "meta": {
    "defaultversionid": "v1"
  }
}

Final State:

{
  "fileid": "f1",
  "versionid": "v1",
  "epoch": 1,
  "name": "foo",
  "isdefault": true,
  "createdat": "now",
  "modifiedat": "now",
  "ancestor": "v1",

  "meta": {
    "epoch": 1,
    "createdat": "now",
    "modifiedat": "now",
    "defaultversionid": "v1",
    "defaultversionsticky": false
  },
  "versions": {
    "v1": { see Resource.* attrs }
  }
}

Notes:


Create Resource with versionid and Versions 🔗

Initial State:

Empty

Request:

PUT /dirs/d1/files/f1

{
  "versionid": "v0",
  "name": "foo",
  "versions": {
    "v1": {
      "createdat": "2020"
    },
    "v2": {}
  }
}

Final State:

{
  "fileid": "f1",
  "versionid": "v2",
  "epoch": 1,
  "isdefault": true,
  "createdat": "now",
  "modifiedat": "now",
  "ancestor": "v0",

  "meta": {
    "epoch": 1,
    "createdat": "now",
    "modifiedat": "now",
    "defaultversionid": "v2",
    "defaultversionsticky": false
  },
  "versions": {
    "v0": {
      "epoch": 1,
      "name": "foo"
      "createdat": "now",
      "modifiedat": "now",
      "ancestor": "v1"
    },
    "v1": {
      "epoch": 1,
      "createdat": "2020",
      "modifiedat": "now",
      "ancestor": "v1"
    },
    "v2": { see Resource.* attrs }
  }
}

Notes:


Update Resource with new Versions and sticky default Version 🔗

Initial State:

{
  "fileid": "f1",
  "versionid": "v0",
  "epoch": 1
  "isdefault": true,
  "createdat": "2021",
  "modifiedat": "2021",
  "ancestor": "v0",

  "meta": {
    "epoch": 1,
    "createdat": "2021",
    "modifiedat": "2021",
    "defaultversionid": "v0",
    "defaultversionsticky": false
  },

  "versions": {
    "v0": { see Resource.* attrs }
  }
}

Request:

PUT /dirs/d1/files/f1

{
  "name": "foo",
  "meta": {
    "defaultversionid": "v1",
    "defaultversionsticky": true
  },
  "versions": {
    "v1": {
      "createdat": "2020"
    },
    "v2": {}
  }
}

Final State:

{
  "fileid": "f1",
  "versionid": "v1",
  "epoch": 1,
  "isdefault": true,
  "createdat": "2020",
  "modifiedat": "now",
  "ancestor": "v0",

  "meta": {
    "epoch": 2,
    "createdat": "2021",
    "modifiedat": "now",
    "defaultversionid": "v1",
    "defaultversionsticky": true
  },
  "versions": {
    "v0": {
      "epoch": 2,
      "name": "foo",
      "createdat": "2021",
      "modifiedat": "now",
      "ancestor": "v1"
    },
    "v1": { see Resource.* attrs },
    "v2": { see Resource.* attrs }
      "epoch": 1,
      "createdat": "now",
      "modifiedat": "now",
      "ancestor": "v0"
    }
  }
}

Notes:


Create Resource with Versions and sticky default Version 🔗

Initial State:

Empty

Request:

PUT /dirs/d1/files/f1

{
  "versionid": "v0",
  "name": "foo",
  "createdat": "2021",
  "meta": {
    "defaultversionid": "v1",
    "defaultversionsticky": true
  },
  "versions": {
    "v1": {
      "createdat": "2020"
    },
    "v2": {}
  }
}

Final State:

{
  "fileid": "f1",
  "versionid": "v1",
  "epoch": 1,
  "isdefault": true,
  "createdat": "2020",
  "modifiedat": "now",
  "ancestor": "v1",

  "meta": {
    "epoch": 1,
    "createdat": "now",
    "modifiedat": "now",
    "defaultversionid": "v1",
    "defaultversionsticky": true
  },
  "versions": {
    "v0": {
      "epoch": 1,
      "name": "foo",
      "createdat": "2021",
      "modifiedat": "now",
      "ancestor": "v1"
    },
    "v1": { see Resource.* attrs }
    "v2": {
      "epoch": 1,
      "createdat": "now",
      "modifiedat": "now",
      "ancestor": "v0"
    }
  }
}

Notes:


Create Resource with versionid and defaultversionid 🔗

Initial State:

Empty

Request:

PUT /dirs/d1/files/f1

{
  "versionid": "v0",
  "name": "foo",
  "meta": {
    "defaultversionid": "v1"
  },
  "versions": {
    "v1": {
      "createdat": "2020"
    },
    "v2": {}
  }
}

Final State:

{
  "fileid": "f1",
  "versionid": "v2",
  "epoch": 1,
  "isdefault": true,
  "createdat": "now",
  "modifiedat": "now",
  "ancestor": "v0",

  "meta": {
    "epoch": 1,
    "createdat": "now",
    "modifiedat": "now",
    "defaultversionid": "v2",
    "defaultversionsticky": false
  },
  "versions": {
    "v0": {
      "epoch": 1,
      "name": "foo",
      "createdat": "now",
      "modifiedat": "now",
      "ancestor": "v1"
    },
    "v1": {
      "epoch": 1,
      "createdat": "2020",
      "modifiedat": "now",
      "ancestor": "v1"
    },
    "v2": { see Resource.* attrs }
  }
}

Notes:


Create Resource with sticky defaultversionid 🔗

Initial State:

Empty

Request:

PUT /dirs/d1/files/f1

{
  "meta": {
    "defaultversionid": "v1",
    "defaultversionsticky": true
  },
  "versions": {
    "v1": {
      "createdat": "2020"
    },
    "v2": {}
  }
}

Final State:

{
  "fileid": "f1",
  "versionid": "v1",
  "epoch": 1,
  "isdefault": true,
  "createdat": "2020",
  "modifiedat": "now",
  "ancestor": "v1",

  "meta": {
    "epoch": 1,
    "createdat": "now",
    "modifiedat": "now",
    "defaultversionid": "v1",
    "defaultversionsticky": true
  },
  "versions": {
    "v1": { see Resource.* attrs },
    "v2": {
      "epoch": 1,
      "createdat": "now",
      "modifiedat": "now",
      "ancestor": "v1"
    }
  }
}

Notes:


Update Resource with non-sticky bad defaultversionid 🔗

Initial State:

{
  "fileid": "f1",
  "versionid": "v1",
  "epoch": 1,
  "isdefault": true,
  "createdat": "2025",
  "modifiedat": "2025",
  "ancestor": "v1",

  "meta": {
    "epoch": 1,
    "createdat": "2025",
    "modifiedat": "2025",
    "defaultversionid": "v1",
    "defaultversionsticky": true
  },
  "versions": {
    "v1": { see Resource.* attrs },
    "v2": {
      "createdat": "2025",
      "ancestor": "v1"
    }
  }
}

Request:

PUT /dirs/d1/files/f1

{
  "name": "foo",
  "meta": {
    "defaultversionid": "abc"
  },
  "versions": {
    "v2": {
      "createdat": "2020"
    }
  }
}

Final State:

{
  "fileid": "f1",
  "versionid": "v1",
  "epoch": 2,
  "name": "foo",
  "isdefault": true,
  "createdat": "2025",
  "modifiedat": "now",
  "ancestor": "v2",

  "meta": {
    "epoch": 2,
    "createdat": "2025",
    "modifiedat": "now",
    "defaultversionid": "v1",
    "defaultversionsticky": false
  },
  "versions": {
    "v1": { see Resource.* attrs },
    "v2": {
      "epoch": 2,
      "createdat": "2020",
      "modifiedat": "now",
      "ancestor": "v2"
    }
  }
}

Notes:


Update Resource with sticky non-specified defaultversionid 🔗

Initial State:

{
  "fileid": "f1",
  "versionid": "v2",
  "epoch": 1,
  "isdefault": true,
  "createdat": "2025",
  "modifiedat": "2025",
  "ancestor": "v1",

  "meta": {
    "epoch": 1,
    "createdat": "2025",
    "modifiedat": "2025",
    "defaultversionid": "v2",
    "defaultversionsticky": false
  },
  "versions": {
    "v1": {
      "epoch": 1,
      "createdat": "2025",
      "modifiedat": "2025",
      "ancestor": "v1"
    },
    "v2": { see Resource.* attrs }
    }
  }
}

Request:

PUT /dirs/d1/files/f1

{
  "name": "foo",
  "meta": {
    "defaultversionsticky": true
  },
  "versions": {
    "v2": {
      "createdat": "2020"
    }
  }
}

Final State:

{
  "fileid": "f1",
  "versionid": "v1",
  "epoch": 2,
  "isdefault": true,
  "createdat": "2025",
  "modifiedat": "now",
  "ancestor": "v2",

  "meta": {
    "epoch": 2,
    "createdat": "2025",
    "modifiedat": "now",
    "defaultversionid": "v1",
    "defaultversionsticky": true
  },
  "versions": {
    "v1": { see Resource.* attrs },
    "v2": {
      "epoch": 2,
      "createdat": "2020",
      "modifiedat": "now",
      "ancestor": "v2"
    }
  }
}

Notes:


Patch Resource with Versions and defaultversionsticky 🔗

Initial State:

{
  "fileid": "f1",
  "versionid": "v2",
  "epoch": 1,
  "isdefault": true,
  "createdat": "2025",
  "modifiedat": "2025",
  "ancestor": "v1",

  "meta": {
    "epoch": 1,
    "createdat": "2025",
    "modifiedat": "2025",
    "defaultversionid": "v2",
    "defaultversionsticky": false
  },
  "versions": {
    "v1": {
      "epoch": 1,
      "createdat": "2025",
      "modifiedat": "2025",
      "ancestor": "v1"
    },
    "v2": { see Resource.* attrs }
    }
  }
}

Request:

PATCH /dirs/d1/files/f1

{
  "name": "foo",
  "meta": {
    "defaultversionsticky": true
  },
  "versions": {
    "v2": {
      "createdat": "2020"
    }
  }
}

Final State:

{
  "fileid": "f1",
  "versionid": "v2",
  "epoch": 2,
  "isdefault": true,
  "createdat": "2020",
  "modifiedat": "now",
  "ancestor": "v2",

  "meta": {
    "epoch": 2,
    "createdat": "2025",
    "modifiedat": "now",
    "defaultversionid": "v2",
    "defaultversionsticky": true
  },
  "versions": {
    "v1": {
      "epoch": 2,
      "createdat": "2025",
      "modifiedat": "now",
      "ancestor": "v2"
    },
    "v2": { see Resource.* attrs }
  }
}

Notes:


Update Resource with empty content 🔗

Initial State:

{
  "fileid": "f1",
  "versionid": "v1",
  "epoch": 1,
  "name": "my file",
  "isdefault": true,
  "createdat": "2025",
  "modifiedat": "2025",
  "ancestor": "v1",

  "meta": {
    "epoch": 1,
    "createdat": "2025",
    "modifiedat": "2025",
    "defaultversionid": "v1",
    "defaultversionsticky": false
  },
  "versions": {
    "v1": { see Resource.* attrs }
  }
}

Request:

PUT /dirs/d1/files/f1

{}

Final State:

{
  "fileid": "f1",
  "versionid": "v1",
  "epoch": 2,
  "isdefault": true,
  "createdat": "2025",
  "modifiedat": "now",
  "ancestor": "v1",

  "meta": {
    "epoch": 1,
    "createdat": "2025",
    "modifiedat": "2025",
    "defaultversionid": "v1",
    "defaultversionsticky": false
  },
  "versions": {
    "v1": { see Resource.* attrs }
  }
}

Notes:


Patch Resource with empty content 🔗

Initial State:

{
  "fileid": "f1",
  "versionid": "v1",
  "epoch": 1,
  "name": "my file",
  "isdefault": true,
  "createdat": "2025",
  "modifiedat": "2025",
  "ancestor": "v1",

  "meta": {
    "epoch": 1,
    "createdat": "2025",
    "modifiedat": "2025",
    "defaultversionid": "v1",
    "defaultversionsticky": false
  },

  "versions": {
    "v1": { see Resource.* attrs }
  }
}

Request:

PATCH /dirs/d1/files/f1

{}

Final State:

{
  "fileid": "f1",
  "versionid": "v1",
  "epoch": 2,
  "name": "my file",
  "isdefault": true,
  "createdat": "2025",
  "modifiedat": "now",
  "ancestor": "v1",

  "meta": {
    "epoch": 1,
    "createdat": "2025",
    "modifiedat": "2025",
    "defaultversionid": "v1",
    "defaultversionsticky": false
  },
  "versions": {
    "v1": { see Resource.* attrs }
  }
}

Notes:


Update Resource with new description 🔗

Initial State:

{
  "fileid": "f1",
  "versionid": "v1",
  "epoch": 1,
  "name": "my file",
  "isdefault": true,
  "createdat": "2025",
  "modifiedat": "2025",
  "ancestor": "v1",

  "meta": {
    "epoch": 1,
    "createdat": "2025",
    "modifiedat": "2025",
    "defaultversionid": "v1",
    "defaultversionsticky": false
  },
  "versions": {
    "v1": { see Resource.* attrs }
  }
}

Request:

PUT /dirs/d1/files/f1

{
  "description": "very cool"
}

Final State:

{
  "fileid": "f1",
  "versionid": "v1",
  "epoch": 2,
  "isdefault": true,
  "description": "very cool",
  "createdat": "2025",
  "modifiedat": "now",
  "ancestor": "v1",

  "meta": {
    "epoch": 1,
    "createdat": "2025",
    "modifiedat": "2025",
    "defaultversionid": "v1",
    "defaultversionsticky": false
  },
  "versions": {
    "v1": { see Resource.* attrs }
  }
}

Notes:


Patch Resource's description field 🔗

Initial State:

{
  "fileid": "f1",
  "versionid": "v1",
  "epoch": 1,
  "name": "my file",
  "isdefault": true,
  "createdat": "2025",
  "modifiedat": "2025",
  "ancestor": "v1",

  "meta": {
    "epoch": 1,
    "createdat": "2025",
    "modifiedat": "2025",
    "defaultversionid": "v1",
    "defaultversionsticky": false
  },
  "versions": {
    "v1": { see Resource.* attrs }
  }
}

Request:

PATCH /dirs/d1/files/f1

{
  "description": "very cool"
}

Final State:

{
  "fileid": "f1",
  "versionid": "v1",
  "epoch": 2,
  "name": "my file",
  "isdefault": true,
  "description": "very cool",
  "createdat": "2025",
  "modifiedat": "now",
  "ancestor": "v1",

  "meta": {
    "epoch": 1,
    "createdat": "2025",
    "modifiedat": "2025",
    "defaultversionid": "v1",
    "defaultversionsticky": false
  },
  "versions": {
    "v1": { see Resource.* attrs }
  }
}

Notes:


Update Resource with non-specified defaultversionsticky 🔗

Initial State:

{
  "fileid": "f1",
  "versionid": "v1",
  "epoch": 1,
  "name": "my file",
  "isdefault": true,
  "createdat": "2025",
  "modifiedat": "2025",
  "ancestor": "v1",

  "meta": {
    "epoch": 1,
    "createdat": "2025",
    "modifiedat": "2025",
    "defaultversionid": "v1",
    "defaultversionsticky": false
  },
  "versions": {
    "v1": { see Resource.* attrs }
  }
}

Request:

PUT /dirs/d1/files/f1

{
  "meta: {
    "defaultversionsticky": true
  }
}

Final State:

{
  "fileid": "f1",
  "versionid": "v1",
  "epoch": 2,
  "isdefault": true,
  "createdat": "2025",
  "modifiedat": "now",
  "ancestor": "v1",

  "meta": {
    "epoch": 2,
    "createdat": "2025",
    "modifiedat": "now",
    "defaultversionid": "v1",
    "defaultversionsticky": true
  },
  "versions": {
    "v1": { see Resource.* attrs }
  }
}

Notes:


Patch Resource with defaultversionsticky 🔗

Initial State:

{
  "fileid": "f1",
  "versionid": "v1",
  "epoch": 1,
  "name": "my file",
  "isdefault": true,
  "createdat": "2025",
  "modifiedat": "2025",
  "ancestor": "v1",

  "meta": {
    "epoch": 1,
    "createdat": "2025",
    "modifiedat": "2025",
    "defaultversionid": "v1",
    "defaultversionsticky": false
  },
  "versions": {
    "v1": { see Resource.* attrs }
  }
}

Request:

PATCH /dirs/d1/files/f1

{
  "meta: {
    "defaultversionsticky": true
  }
}

Final State:

{
  "fileid": "f1",
  "versionid": "v1",
  "epoch": 2,
  "name": "my file",
  "isdefault": true,
  "createdat": "2025",
  "modifiedat": "now",
  "ancestor": "v1",

  "meta": {
    "epoch": 2,
    "createdat": "2025",
    "modifiedat": "now",
    "defaultversionid": "v1",
    "defaultversionsticky": true
  },
  "versions": {
    "v1": { see Resource.* attrs }
  }
}

Notes:


Patch Resource with sticky defaultversionid 🔗

Initial State:

{
  "fileid": "f1",
  "versionid": "v2",
  "epoch": 1,
  "isdefault": true,
  "createdat": "2025",
  "modifiedat": "2025",
  "ancestor": "v1",

  "meta": {
    "epoch": 1,
    "createdat": "2025",
    "modifiedat": "2025",
    "defaultversionid": "v2",
    "defaultversionsticky": false
  },
  "versions": {
    "v1": {
      "epoch": 1,
      "createdat": "2025",
      "modifiedat": "2025",
      "ancestor": "v1"
    },
    "v2": { see Resource.* attrs }
  }
}

Request:

PATCH /dirs/d1/files/f1/meta

{
  "defaultversionid": "v1",
  "defaultversionsticky": true
}

Final State:

{
  "fileid": "f1",
  "versionid": "v1",
  "epoch": 1,
  "isdefault": true,
  "createdat": "2025",
  "modifiedat": "2025",
  "ancestor": "v1",

  "meta": {
    "epoch": 2,
    "createdat": "2025",
    "modifiedat": "now",
    "defaultversionid": "v1",
    "defaultversionsticky": true
  },
  "versions": {
    "v1": { see Resource.* attrs },
    "v2": {
      "epoch": 1,
      "createdat": "2025",
      "modifiedat": "2025",
      "ancestor": "v1"
    }
  }
}

Notes:


Patch Resource with bad defaultversionid 🔗

Initial State:

{
  "fileid": "f1",
  "versionid": "v1",
  "epoch": 1,
  "name": "my file",
  "isdefault": true,
  "createdat": "2025",
  "modifiedat": "2025",
  "ancestor": "v1",

  "meta": {
    "epoch": 1,
    "createdat": "2025",
    "modifiedat": "2025",
    "defaultversionid": "v1",
    "defaultversionsticky": false
  },
  "versions": {
    "v1": { see Resource.* attrs }
  }
}

Request:

PATCH /dirs/d1/files/f1

{
  "meta: {
    "defaultversionid": "foo"
  }
}

Final State:

Error due to `foo` being an unknown Version.

Notes:


Update Resource with bad sticky defaultversionid 🔗

Initial State:

{
  "fileid": "f1",
  "versionid": "v1",
  "epoch": 1,
  "name": "my file",
  "isdefault": true,
  "createdat": "2025",
  "modifiedat": "2025",
  "ancestor": "v1",

  "meta": {
    "epoch": 1,
    "createdat": "2025",
    "modifiedat": "2025",
    "defaultversionid": "v1",
    "defaultversionsticky": false
  },
  "versions": {
    "v1": { see Resource.* attrs }
  }
}

Request:

PUT /dirs/d1/files/f1

{
  "meta: {
    "defaultversionid": "foo",
    "defaultversionsticky": true
  }
}

Final State:

Error due to `foo` being an unknown Version.

Notes:


Update Resource with non-specified sticky default Version 🔗

Initial State:

{
  "fileid": "f1",
  "versionid": "v1",
  "epoch": 1,
  "isdefault": true,
  "createdat": "2025",
  "modifiedat": "2025",
  "ancestor": "v1",

  "meta": {
    "epoch": 1,
    "createdat": "2025",
    "modifiedat": "2025",
    "defaultversionid": "v1",
    "defaultversionsticky": false
  },
  "versions": {
    "v1": { ... }
  }
}

Request:

PUT /dirs/d1/files/f1

{
  "name": "foo",
  "createdat": "1999"
  "meta": {
    "defaultversionsticky": true
  },
  "versions": {
     "v2": { "createdat": "1998" }
  }
}

Final State:

{
  "fileid": "f1",
  "versionid": "v1",
  "epoch": 2,
  "name": "foo",
  "isdefault": true,
  "createdat": "1999",
  "modifiedat": "now",
  "ancestor": "v2",

  "meta": {
    "epoch": 2,
    "createdat": "2025",
    "modifiedat": "now",
    "defaultversionid": "v1",
    "defaultversionsticky": true
  },
  "versions": {
    "v1": { see Resource.* attrs },
    "v2": {
       "epoch": 1,
       "createdat": "1998",
       "modifiedat": "now",
       "ancestor": "v2"
     }
  }
}

Notes:


Create Resource with conflicting default Version attributes - variant 1 🔗

Initial State:

Empty

Request:

PUT /dirs/d1/files/f1

{
  "versionid": "v1",
  "name": "foo",
  "meta": {
    "defaultversionsticky": true
  },
  "versions": {
    "v1": {"name":"abc"},
    "v2": {}
  }
}

Final State:

{
  "fileid": "f1",
  "versionid": "v2",
  "epoch": 1,
  "isdefault": true,
  "createdat": "now",
  "modifiedat": "now",
  "ancestor": "v1",

  "meta": {
    "epoch": 1,
    "createdat": "now",
    "modifiedat": "now",
    "defaultversionid": "v2",
    "defaultversionsticky": true
  },
  "versions": {
    "v1": {
      "epoch": 1,
      "name": "abc",
      "createdat": "now",
      "modifiedat": "now",
      "ancestor": "v1"
    },
    "v2": { see Resource.* attrs }
  }
}

Notes:


Create Resource with conflicting default Version attributes - variant 2 🔗

Initial State:

Empty

Request:

PUT /dirs/d1/files/f1

{
  "meta": {
    "defaultversionid": "v1"
  },
  "versions": {
    "v1": {"name":"abc"},
    "v2": {}
  }
}

Final State:

{
  "fileid": "f1",
  "versionid": "v2",
  "epoch": 1,
  "isdefault": true,
  "createdat": "now",
  "modifiedat": "now",
  "ancestor": "v1",

  "meta": {
    "epoch": 1,
    "createdat": "now",
    "modifiedat": "now",
    "defaultversionid": "v2",
    "defaultversionsticky": false
  },
  "versions": {
    "v1": {
      "epoch": 1,
      "name": "abc",
      "createdat": "now",
      "modifiedat": "now",
      "ancestor": "v1"
    },
    "v2": { see Resource.* attrs }
  }
}

Notes:


Create Resource with conflicting default Version attributes - variant 3 🔗

Initial State:

Empty

Request:

PUT /dirs/d1/files/f1

{
  "versionid": "v1",
  "versions": {
    "v1": {"name":"abc"},
    "v2": {}
  }
}

Final State:

{
  "fileid": "f1",
  "versionid": "v2",
  "epoch": 1,
  "isdefault": true,
  "createdat": "now",
  "modifiedat": "now",
  "ancestor": "v1",

  "meta": {
    "epoch": 1,
    "createdat": "now",
    "modifiedat": "now",
    "defaultversionid": "v2",
    "defaultversionsticky": false
  },
  "versions": {
    "v1": {
      "epoch": 1,
      "name": "abc",
      "createdat": "now",
      "modifiedat": "now",
      "ancestor": "v1"
    },
    "v2": { see Resource.* attrs }
  }
}

Notes:

Create Resource with SetDefaultVersionID flag 🔗

Initial State:

Empty

Request:

PUT /dirs/d1/files/f1?setdefaultversionid=v1

{
  "versions": {
    "v1": {"name":"abc"},
    "v2": {}
  }
}

Final State:

{
  "fileid": "f1",
  "versionid": "v1",
  "epoch": 1,
  "name": "abc",
  "isdefault": true,
  "createdat": "now",
  "modifiedat": "now",
  "ancestor": "v1",

  "meta": {
    "epoch": 1,
    "createdat": "now",
    "modifiedat": "now",
    "defaultversionid": "v1",
    "defaultversionsticky": true
  },
  "versions": {
    "v1": { see Resource.* attrs },
    "v2": {
      "epoch": 1,
      "createdat": "now",
      "modifiedat": "now",
      "ancestor": "v1"
    },
  }
}

Notes:

Create Resource with SetDefaultVersionID flag via /versions 🔗

Initial State:

Empty

Request:

POST /dirs/d1/files/f1/versions?setdefaultversionid=v1

{
  "v1": {"name":"abc"},
  "v2": {}
}

Final State:

{
  "fileid": "f1",
  "versionid": "v1",
  "epoch": 1,
  "name": "abc",
  "isdefault": true,
  "createdat": "now",
  "modifiedat": "now",
  "ancestor": "v1",

  "meta": {
    "epoch": 1,
    "createdat": "now",
    "modifiedat": "now",
    "defaultversionid": "v1",
    "defaultversionsticky": true
  },
  "versions": {
    "v1": { see Resource.* attrs },
    "v2": {
      "epoch": 1,
      "createdat": "now",
      "modifiedat": "now",
      "ancestor": "v1"
    },
  }
}

Notes: