Skip to content

Commit ecd0d20

Browse files
committed
litleFixForCrudDelete
1 parent 448e764 commit ecd0d20

File tree

3 files changed

+170
-169
lines changed

3 files changed

+170
-169
lines changed

packages/integrations/gei-crud/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "gei-crud",
3-
"version": "0.8.3",
3+
"version": "0.8.4",
44
"description": "GraphQL Editor integration for stucco. Allows basic crud operations and relations.",
55
"main": "lib/index.js",
66
"private": false,

packages/integrations/gei-crud/src/Mutation/delete.ts

Lines changed: 23 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@ import { DB } from '../db/mongo.js';
1010

1111
export const handler = async (input: FieldResolveInput) => {
1212
const db = await DB();
13-
1413

1514
const _id = prepare_id(input) || prepareSourceParameters(input)._id;
1615
if (!_id) throw new Error('_id not found');
@@ -29,28 +28,30 @@ export const handler = async (input: FieldResolveInput) => {
2928

3029
const s = object as Record<string, any>;
3130

32-
const relatedCollections = prepareRelatedModel(input).replace(/["' ]/g, '').split(',')
31+
const relatedCollections = prepareRelatedModel(input).replace(/["' ]/g, '').split(',');
3332
const prepareFields = prepareRelatedField(input)?.replace(/[{ }]/g, '').split(',');
34-
let i = 0
35-
for (const rC of relatedCollections){
36-
const prepareField = prepareFields[i]?.split(':') || prepareFields[0]?.split(':');
37-
i++
38-
if (prepareField) {
39-
const fieldForFounding = prepareField[0];
40-
const fieldWithIdOrArray = prepareField[1] || undefined;
33+
let i = 0;
34+
for (const rC of relatedCollections) {
35+
const prepareField = prepareFields[i]?.split(':') || prepareFields[0]?.split(':');
36+
i++;
37+
if (prepareField) {
38+
const fieldForFounding = prepareField[0];
39+
const fieldWithIdOrArray = prepareField[1] || undefined;
4140

42-
if (!fieldWithIdOrArray) {
43-
await db.collection(rC).deleteMany({ [fieldForFounding]: s._id });
44-
await db.collection(rC).updateMany({}, { $pull: { [fieldForFounding]: s._id } });
45-
} else if (!s[fieldWithIdOrArray]?.length) {
46-
return !!res.deletedCount;
47-
} else {
48-
if(typeof(s[fieldWithIdOrArray]) === "string"){
49-
await db.collection(rC).deleteMany({ [fieldForFounding]: s[fieldWithIdOrArray] })
50-
}else
51-
{await db.collection(rC).deleteMany({ [fieldForFounding]: { $in: s[fieldWithIdOrArray] } })};
52-
}
53-
}
54-
}
41+
if (!fieldWithIdOrArray) {
42+
await db.collection(rC).updateMany({}, { $pull: { [fieldForFounding]: s._id } });
43+
await db.collection(rC).deleteMany({ [fieldForFounding]: s._id });
44+
} else if (!s[fieldWithIdOrArray]?.length) {
45+
return !!res.deletedCount;
46+
} else {
47+
if (typeof s[fieldWithIdOrArray] === 'string') {
48+
await db.collection(rC).updateMany({}, { $pull: { [fieldForFounding]: s[fieldWithIdOrArray] } });
49+
await db.collection(rC).deleteMany({ [fieldForFounding]: s[fieldWithIdOrArray] });
50+
} else {
51+
await db.collection(rC).deleteMany({ [fieldForFounding]: { $in: s[fieldWithIdOrArray] } });
52+
}
53+
}
54+
}
55+
}
5556
return !!res.deletedCount;
5657
};
Lines changed: 146 additions & 146 deletions
Original file line numberDiff line numberDiff line change
@@ -1,155 +1,155 @@
11
{
2-
"resolvers": {
3-
"Query.objects": {
4-
"name": "List objects",
5-
"description": "List objects stored in database",
6-
"data": {
7-
"model": {
8-
"name": "Database model",
9-
"description": "Specify model name",
10-
"value": "Object",
11-
"required": true
12-
},
13-
"sourceFilterParameters": {
14-
"name": "Get only owned objects by parameters from source",
15-
"description": "Specify parameters that comes as source from previous resolver. Source must be an object, please specify its keys",
16-
"value": []
17-
}
18-
},
19-
"resolve": {
20-
"name": "Query.objects.handler"
21-
}
2+
"resolvers": {
3+
"Query.objects": {
4+
"name": "List objects",
5+
"description": "List objects stored in database",
6+
"data": {
7+
"model": {
8+
"name": "Database model",
9+
"description": "Specify model name",
10+
"value": "Object",
11+
"required": true
2212
},
23-
"Query.oneById": {
24-
"name": "Get object by _id",
25-
"description": "Get object by _id value",
26-
"data": {
27-
"model": {
28-
"name": "Database model",
29-
"description": "Specify model name",
30-
"value": "Object",
31-
"required": true
32-
},
33-
"sourceFilterParameters": {
34-
"name": "Get only owned objects by parameters from source",
35-
"description": "Specify parameters that comes as source from previous resolver. Source must be an object, please specify its keys",
36-
"value": []
37-
}
38-
},
39-
"resolve": {
40-
"name": "Query.oneById.handler"
41-
}
13+
"sourceFilterParameters": {
14+
"name": "Get only owned objects by parameters from source",
15+
"description": "Specify parameters that comes as source from previous resolver. Source must be an object, please specify its keys",
16+
"value": []
17+
}
18+
},
19+
"resolve": {
20+
"name": "Query.objects.handler"
21+
}
22+
},
23+
"Query.oneById": {
24+
"name": "Get object by _id",
25+
"description": "Get object by _id value",
26+
"data": {
27+
"model": {
28+
"name": "Database model",
29+
"description": "Specify model name",
30+
"value": "Object",
31+
"required": true
4232
},
43-
"Mutation.create": {
44-
"name": "Create object",
45-
"description": "Create object from GraphQL Input. Connect this integration to field with one input param which holds creation data.",
46-
"data": {
47-
"model": {
48-
"name": "Database model",
49-
"description": "Specify model name",
50-
"value": "Object",
51-
"required": true
52-
},
53-
"sourceParameters": {
54-
"name": "Get parameters from source",
55-
"description": "Specify parameters that comes as source from previous resolver. Source must be an object, please specify its keys",
56-
"value": []
57-
}
58-
},
59-
"resolve": {
60-
"name": "Mutation.create.handler"
61-
}
33+
"sourceFilterParameters": {
34+
"name": "Get only owned objects by parameters from source",
35+
"description": "Specify parameters that comes as source from previous resolver. Source must be an object, please specify its keys",
36+
"value": []
37+
}
38+
},
39+
"resolve": {
40+
"name": "Query.oneById.handler"
41+
}
42+
},
43+
"Mutation.create": {
44+
"name": "Create object",
45+
"description": "Create object from GraphQL Input. Connect this integration to field with one input param which holds creation data.",
46+
"data": {
47+
"model": {
48+
"name": "Database model",
49+
"description": "Specify model name",
50+
"value": "Object",
51+
"required": true
6252
},
63-
"Mutation.update": {
64-
"name": "Update object",
65-
"description": "Update object stored in database. This resolver requires \"_id\" parameter on field and one \"input\" type parameter with optional fields",
66-
"data": {
67-
"model": {
68-
"name": "Database model",
69-
"description": "Specify model name",
70-
"value": "Object",
71-
"required": true
72-
},
73-
"sourceFilterParameters": {
74-
"name": "Get only owned objects by parameters from source",
75-
"description": "Specify parameters that comes as source from previous resolver. Source must be an object, please specify its keys",
76-
"value": []
77-
}
78-
},
79-
"resolve": {
80-
"name": "Mutation.update.handler"
81-
}
53+
"sourceParameters": {
54+
"name": "Get parameters from source",
55+
"description": "Specify parameters that comes as source from previous resolver. Source must be an object, please specify its keys",
56+
"value": []
57+
}
58+
},
59+
"resolve": {
60+
"name": "Mutation.create.handler"
61+
}
62+
},
63+
"Mutation.update": {
64+
"name": "Update object",
65+
"description": "Update object stored in database. This resolver requires \"_id\" parameter on field and one \"input\" type parameter with optional fields",
66+
"data": {
67+
"model": {
68+
"name": "Database model",
69+
"description": "Specify model name",
70+
"value": "Object",
71+
"required": true
72+
},
73+
"sourceFilterParameters": {
74+
"name": "Get only owned objects by parameters from source",
75+
"description": "Specify parameters that comes as source from previous resolver. Source must be an object, please specify its keys",
76+
"value": []
77+
}
78+
},
79+
"resolve": {
80+
"name": "Mutation.update.handler"
81+
}
82+
},
83+
"Mutation.delete": {
84+
"name": "Delete object",
85+
"description": "Delete object stored in database. This resolver requires \"_id\" parameter.",
86+
"data": {
87+
"model": {
88+
"name": "Database model",
89+
"description": "Specify model name",
90+
"value": "Object",
91+
"required": true
8292
},
83-
"Mutation.delete": {
84-
"name": "Delete object",
85-
"description": "Delete object stored in database. This resolver requires \"_id\" parameter.",
86-
"data": {
87-
"model": {
88-
"name": "Database model",
89-
"description": "Specify model name",
90-
"value": "Object",
91-
"required": true
92-
},
93-
"sourceParameters": {
94-
"name": "Get parameters from source",
95-
"description": "Specify parameters that comes as source from previous resolver. Source must be an object, please specify its keys",
96-
"value": []
97-
},
98-
"relatedModel": {
99-
"name": "Related model for delete objects",
100-
"description": "You can delete related objects, or pull _id from all arrays in this collection. If you want to use more than one model, you can use a comma, but note that in this case you also need to use a comma for related fields.",
101-
"value": "Object",
102-
"required": true
103-
},
104-
"relatedField": {
105-
"name": "Name of the field on related objects",
106-
"description": "Define here the field name for relate objects by _id of the remove object. If this field is an array, owner _id will be removed from it. If this field in the object is a string with the same value as owner _id, the entire object will be deleted.If you want to use a relation not by _id but by a other field from a remove object, you can write something like '_id:project' and this will remove all objects from the related collection that have an _id value of 'object.project'. For example, if you want to delete a team and write 'owner: members' here. This will remove all objects from the associated collection that has an 'owner' field with a value from the 'team.members' array.",
107-
"value": "owner"
108-
}
109-
},
110-
"resolve": {
111-
"name": "Mutation.delete.handler"
112-
}
93+
"sourceParameters": {
94+
"name": "Get parameters from source",
95+
"description": "Specify parameters that comes as source from previous resolver. Source must be an object, please specify its keys",
96+
"value": []
11397
},
114-
"Object.oneToOne": {
115-
"name": "One to One relation",
116-
"description": "Resolve one to one relation. So if you have a field \"objectB\" with type \"ObjectB\" it will unfold \"ObjectB\"",
117-
"data": {
118-
"relatedModel": {
119-
"name": "Related model",
120-
"description": "Specify related model name",
121-
"value": "Object",
122-
"required": true
123-
},
124-
"relatedField": {
125-
"name": "Name of the field on related objects",
126-
"description": "Related object has this field as an owner id",
127-
"value": "owner"
128-
}
129-
},
130-
"resolve": {
131-
"name": "Object.oneToOne.handler"
132-
}
98+
"relatedModel": {
99+
"name": "Related models for delete objects",
100+
"description": "You can delete related objects, or pull _id from all arrays in this collection. If you want to use more than one model, you can use a comma, but note that in this case you also need to use a comma for related fields.",
101+
"value": "Object",
102+
"required": true
103+
},
104+
"relatedField": {
105+
"name": "Name of the field on related objects",
106+
"description": "Define here the field name for relate objects by _id of the remove object. If this field is an array, owner _id will be removed from it. If this field in the object is a string with the same value as owner _id, the entire object will be deleted. If you want to use a relation not by _id but by a other field from a remove object, you can write something like '_id:project' and this will remove all objects from the related collection that have an _id value of 'object.project'. For example, if you want to delete a team and write 'owner: members' here, this will remove all objects from relate collection that has an 'owner' field with a value from the 'team.members' array.",
107+
"value": "owner"
108+
}
109+
},
110+
"resolve": {
111+
"name": "Mutation.delete.handler"
112+
}
113+
},
114+
"Object.oneToOne": {
115+
"name": "One to One relation",
116+
"description": "Resolve one to one relation. So if you have a field \"objectB\" with type \"ObjectB\" it will unfold \"ObjectB\"",
117+
"data": {
118+
"relatedModel": {
119+
"name": "Related model",
120+
"description": "Specify related model name",
121+
"value": "Object",
122+
"required": true
123+
},
124+
"relatedField": {
125+
"name": "Name of the field on related objects",
126+
"description": "Related object has this field as an owner id",
127+
"value": "owner"
128+
}
129+
},
130+
"resolve": {
131+
"name": "Object.oneToOne.handler"
132+
}
133+
},
134+
"Object.oneToMany": {
135+
"name": "One to Many relation",
136+
"description": "Resolve one to many relation. So if you have a field \"objectsB\" with type \"[ObjectB]\" it will unfold \"ObjectB\"",
137+
"data": {
138+
"relatedModel": {
139+
"name": "Related model",
140+
"description": "Specify related model name",
141+
"value": "Object",
142+
"required": true
133143
},
134-
"Object.oneToMany": {
135-
"name": "One to Many relation",
136-
"description": "Resolve one to many relation. So if you have a field \"objectsB\" with type \"[ObjectB]\" it will unfold \"ObjectB\"",
137-
"data": {
138-
"relatedModel": {
139-
"name": "Related model",
140-
"description": "Specify related model name",
141-
"value": "Object",
142-
"required": true
143-
},
144-
"relatedField": {
145-
"name": "Name of the field on related objects",
146-
"description": "Related object has this field as an owner id",
147-
"value": "owner"
148-
}
149-
},
150-
"resolve": {
151-
"name": "Object.oneToMany.handler"
152-
}
144+
"relatedField": {
145+
"name": "Name of the field on related objects",
146+
"description": "Related object has this field as an owner id",
147+
"value": "owner"
153148
}
149+
},
150+
"resolve": {
151+
"name": "Object.oneToMany.handler"
152+
}
154153
}
155-
}
154+
}
155+
}

0 commit comments

Comments
 (0)