deep-foundation / deeplinks

https://discord.gg/deep-foundation
The Unlicense
14 stars 9 forks source link

await deep.delete({ type_id: await deep.id('@deep-foundation/rss-to-deep', 'Post'), order_by: { id: 'asc' }, limit: 1 }); #213

Open ivansglazunov opened 1 year ago

Konard commented 11 months ago
const adminId = await deep.id('deep', 'admin');
const containTypeId = await deep.id('@deep-foundation/core', 'Contain');
const messageTypeId = await deep.id('@deep-foundation/messaging', 'Message');
const replyTypeId = await deep.id('@deep-foundation/messaging', 'Reply');
const tokensTypeId = await deep.id('@deep-foundation/tokens', 'Tokens');
await deep.delete({ from_id: adminId, type_id: containTypeId, to: { type_id: { _in: [messageTypeId,replyTypeId,tokensTypeId] } } }, limit: 1);

This code is transformed to query:

{
  "operationName": "DELETE",
  "variables": {
    "where0": {
      "from_id": {
        "_eq": 380
      },
      "type_id": {
        "_eq": 3
      },
      "to": {
        "type_id": {
          "_in": [
            1361,
            1363,
            1393
          ]
        }
      }
    }
  },
  "query": "mutation DELETE($where0: links_bool_exp!) {
    m0: delete_links(where: $where0) {
      returning {
        id
      __typename
    }
    __typename
  }
}"
}

And if it is executed it may give an error:

3122-d0bb67c6681de981.js:57 
       POST https://chatgpt.deep.foundation/api/gql 500 (Internal Server Error)
(anonymous) @ 3122-d0bb67c6681de981.js:57
e @ 3122-d0bb67c6681de981.js:130
t.subscribe @ 3122-d0bb67c6681de981.js:130
complete @ 3122-d0bb67c6681de981.js:57
t.start @ 3122-d0bb67c6681de981.js:57
t @ 3122-d0bb67c6681de981.js:57
e.getObservableFromLink @ 3122-d0bb67c6681de981.js:57
(anonymous) @ 3122-d0bb67c6681de981.js:57
(anonymous) @ 3122-d0bb67c6681de981.js:57
(anonymous) @ 3122-d0bb67c6681de981.js:130
(anonymous) @ 3122-d0bb67c6681de981.js:130
(anonymous) @ 3122-d0bb67c6681de981.js:130
a @ 3122-d0bb67c6681de981.js:130
e.mutate @ 3122-d0bb67c6681de981.js:57
e.mutate @ 3122-d0bb67c6681de981.js:57
(anonymous) @ 3122-d0bb67c6681de981.js:104
(anonymous) @ 3122-d0bb67c6681de981.js:104
k @ 3122-d0bb67c6681de981.js:104
delete @ 3122-d0bb67c6681de981.js:104
(anonymous) @ VM865:6
3122-d0bb67c6681de981.js:105 Uncaught Error: DeepClient Delete Error: Response not successful: Received status code 500
    at R.<anonymous> (3122-d0bb67c6681de981.js:104:18712)
    at Generator.throw (<anonymous>)
    at a (3122-d0bb67c6681de981.js:104:6894)

But it does not use limit.

We need support limiting of deep.delete just like with deep.select. And also order_by and offset.

Konard commented 11 months ago

Well, it turns out it is not possible to solve until https://github.com/hasura/graphql-engine/issues/9997 is implemented.

Konard commented 11 months ago

Workaround 1

Use deep.select before deep.delete:

const adminId = await deep.id('deep', 'admin');
const containTypeId = await deep.id('@deep-foundation/core', 'Contain');
const messageTypeId = await deep.id('@deep-foundation/messaging', 'Message');
const replyTypeId = await deep.id('@deep-foundation/messaging', 'Reply');
const tokensTypeId = await deep.id('@deep-foundation/tokens', 'Tokens');
const linksToDelete = await deep.select({ from_id: adminId, type_id: containTypeId, to: { type_id: { _in: [messageTypeId,replyTypeId,tokensTypeId] } }, limit: 1 });
const linksIdsToDelete = linksToDelete.data.map(link => link.id);
await deep.delete({ id: { _in: linksIdsToDelete } });

Btw, we can still use deep.select in that case inside deep.delete logic in DeepClient. While we're waiting for changes in Hasura.