Skip to content

Instantly share code, notes, and snippets.

@lpillonel
Last active February 20, 2020 16:28
Show Gist options
  • Save lpillonel/d335231c661d2cc284f81e504192c483 to your computer and use it in GitHub Desktop.
Save lpillonel/d335231c661d2cc284f81e504192c483 to your computer and use it in GitHub Desktop.

Bulk operations

We need enpoints to handle the following operation in one transaction

  1. Remove multiple inodes
  2. Save multiple inodes
  3. Copy multiple inodes to one location
  4. Restore multiple inodes
  5. Set / Unset as favorite  multiple inodes
  6. Watch / Unwatch  multiple inodes
  7. Upload multiple files

Endpoints are not definitive and need further discussion. Also returned codes & payloads on errors are to be defined.

1. Remove multiple inodes

We already have an enpoint for that:

POST /dms/inodes/delete

{
  "kind": "dms-core.InodeRefList",
  "items": [
    {
      "kind": "dms-core.InodeRef",
      "oid": "c52a0d38-1933-4464-81b5-3c525b31c051",
      "name": "some name"
    },
    {
      "kind": "dms-core.InodeRef",
      "oid": "7ce7570d-7bac-46eb-a8c3-521b99fae156",
      "name": "some other name"
    }
  ]
}

RESPONSE 204

No content

2. Save multiple inodes

PUT /dms/inodes/update

{
  "kind": "dms-core.Inode",
  "items": [
    {
      "kind": "dms-core.Inode",
      "oid": "c52a0d38-1933-4464-81b5-3c525b31c051",
      "name": "some name",
      ...
    },
    {
      "kind": "dms-core.Inode",
      "oid": "c52a0d38-1933-4464-81b5-3c525b31c051",
      "name": "some name...",
      ...
    },
  ]
}

RESPONSE 200

Return the updated list of inodes

{
  "kind": "dms-core.InodeList",
  "items": [
    {
      "kind": "dms-core.Inode",
      "oid": "c52a0d38-1933-4464-81b5-3c525b31c051",
      "name": "some name",
      ...
    },
    {
      "kind": "dms-core.Inode",
      "oid": "c52a0d38-1933-4464-81b5-3c525b31c051",
      "name": "some name...",
      ...
    },
  ]
}

3. Copy multiple inodes to one location

POST /dms/inodes/copyTo/<targetOid>

{
  "kind": "dms-core.InodeRefList",
  "items": [
    {
      "kind": "dms-core.InodeRef",
      "oid": "c52a0d38-1933-4464-81b5-3c525b31c051",
      "name": "some name"
    },
    {
      "kind": "dms-core.InodeRef",
      "oid": "7ce7570d-7bac-46eb-a8c3-521b99fae156",
      "name": "some other name"
    }
  ]
}

RESPONSE 200

Return the list of created inodes

{
  "kind": "dms-core.InodeList",
  "items": [
    {
      "kind": "dms-core.Inode",
      "oid": "c52a0d38-1933-4464-81b5-3c525b31c051",
      "name": "some name",
      ...
    },
    {
      "kind": "dms-core.Inode",
      "oid": "c52a0d38-1933-4464-81b5-3c525b31c051",
      "name": "some name...",
      ...
    },
  ]
}

4. Restore multiple inodes

POST /dms/inodes/restore

We have to use a list of inodes (and not inodeRef), as we can in one call:

  • restore an inode
  • to a new location (by updating parent oid)
  • update the type (respecting target's allowed children types)
{
  "kind": "dms-core.InodeList",
  "items": [
    {
      "kind": "dms-core.Inode",
      "oid": "c52a0d38-1933-4464-81b5-3c525b31c051",
      "name": "some name",
      ...
    },
    {
      "kind": "dms-core.Inode",
      "oid": "c52a0d38-1933-4464-81b5-3c525b31c051",
      "name": "some name...",
      ...
    },
  ]
}

RESPONSE 200

Return the list of restored inodes

{
  "kind": "dms-core.InodeList",
  "items": [
    {
      "kind": "dms-core.Inode",
      "oid": "c52a0d38-1933-4464-81b5-3c525b31c051",
      "name": "some name",
      ...
    },
    {
      "kind": "dms-core.Inode",
      "oid": "c52a0d38-1933-4464-81b5-3c525b31c051",
      "name": "some name...",
      ...
    },
  ]
}

5. Set / Unset as favorite  multiple inodes

Maybe for those endpoints, a RESPONSE 204 would be enough

POST /dms/inodes/favorite

{
  "kind": "dms-core.InodeRefList",
  "items": [
    {
      "kind": "dms-core.InodeRef",
      "oid": "c52a0d38-1933-4464-81b5-3c525b31c051",
      "name": "some name"
    },
    {
      "kind": "dms-core.InodeRef",
      "oid": "7ce7570d-7bac-46eb-a8c3-521b99fae156",
      "name": "some other name"
    }
  ]
}

RESPONSE 200

Return the list of inodes added to favorites.

{
  "kind": "dms-core.InodeList",
  "items": [
    {
      "kind": "dms-core.Inode",
      "oid": "c52a0d38-1933-4464-81b5-3c525b31c051",
      "name": "some name",
      ...
    },
    {
      "kind": "dms-core.Inode",
      "oid": "c52a0d38-1933-4464-81b5-3c525b31c051",
      "name": "some name...",
      ...
    },
  ]
}

POST /dms/inodes/unfavorite

{
  "kind": "dms-core.InodeRefList",
  "items": [
    {
      "kind": "dms-core.InodeRef",
      "oid": "c52a0d38-1933-4464-81b5-3c525b31c051",
      "name": "some name"
    },
    {
      "kind": "dms-core.InodeRef",
      "oid": "7ce7570d-7bac-46eb-a8c3-521b99fae156",
      "name": "some other name"
    }
  ]
}

RESPONSE 200

Return the list of inodes removed from favorites.

{
  "kind": "dms-core.InodeList",
  "items": [
    {
      "kind": "dms-core.Inode",
      "oid": "c52a0d38-1933-4464-81b5-3c525b31c051",
      "name": "some name",
      ...
    },
    {
      "kind": "dms-core.Inode",
      "oid": "c52a0d38-1933-4464-81b5-3c525b31c051",
      "name": "some name...",
      ...
    },
  ]
}

6. Watch / Unwatch  multiple inodes

Maybe for those endpoints, a RESPONSE 204 would be enough

POST /dms/inodes/watch

{
  "kind": "dms-core.InodeRefList",
  "items": [
    {
      "kind": "dms-core.InodeRef",
      "oid": "c52a0d38-1933-4464-81b5-3c525b31c051",
      "name": "some name"
    },
    {
      "kind": "dms-core.InodeRef",
      "oid": "7ce7570d-7bac-46eb-a8c3-521b99fae156",
      "name": "some other name"
    }
  ]
}

RESPONSE 200

Return the list of inodes watched.

{
  "kind": "dms-core.InodeList",
  "items": [
    {
      "kind": "dms-core.Inode",
      "oid": "c52a0d38-1933-4464-81b5-3c525b31c051",
      "name": "some name",
      ...
    },
    {
      "kind": "dms-core.Inode",
      "oid": "c52a0d38-1933-4464-81b5-3c525b31c051",
      "name": "some name...",
      ...
    },
  ]
}

POST /dms/inodes/unwatch

{
  "kind": "dms-core.InodeRefList",
  "items": [
    {
      "kind": "dms-core.InodeRef",
      "oid": "c52a0d38-1933-4464-81b5-3c525b31c051",
      "name": "some name"
    },
    {
      "kind": "dms-core.InodeRef",
      "oid": "7ce7570d-7bac-46eb-a8c3-521b99fae156",
      "name": "some other name"
    }
  ]
}

RESPONSE 200

Return the list of inodes unwatched.

{
  "kind": "dms-core.InodeList",
  "items": [
    {
      "kind": "dms-core.Inode",
      "oid": "c52a0d38-1933-4464-81b5-3c525b31c051",
      "name": "some name",
      ...
    },
    {
      "kind": "dms-core.Inode",
      "oid": "c52a0d38-1933-4464-81b5-3c525b31c051",
      "name": "some name...",
      ...
    },
  ]
}

7. Upload multiple files

We already have an endpoint for this one. We don't change it, except BE should ensure operation is executed in one transaction (not the case for now).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment