fix: update sql collection (#5909)

This commit is contained in:
ChengLei Shao 2024-12-18 19:50:44 +08:00 committed by GitHub
parent b7906cdfbf
commit 7eed6ef863
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 24 additions and 2 deletions

View File

@ -135,19 +135,31 @@ describe('sql collection', () => {
expect(fields.length).toBe(2);
const loadedFields = db.getCollection('sqlCollection').fields;
expect(loadedFields.size).toBe(2);
await agent.resource('sqlCollection').update({
const updateRes = await agent.resource('sqlCollection').update({
filterByTk: 'sqlCollection',
values: {
key: collection.key,
sql: 'select "testField1" from "fakeCollection"',
name: 'sqlCollection',
fields: [
{
name: 'testField1',
type: 'string',
interface: 'input',
collectionName: 'sqlCollection',
key: fields.find((f) => f.name === 'testField1').key,
},
],
sources: ['fakeCollection'],
},
});
expect(updateRes.status).toBe(200);
const listMetaRes = await agent.resource('collections').listMeta();
const metaData = listMetaRes.body.data;
const sqlCollectionData = metaData.find((item) => item.name === 'sqlCollection');
const metaFields = sqlCollectionData.fields;
expect(metaFields.length).toBe(1);
const collection2 = await db.getRepository('collections').findOne({
filter: {
name: 'sqlCollection',

View File

@ -19,14 +19,24 @@ const updateCollection = async (ctx: Context, transaction: any) => {
},
transaction,
});
const existFields = await collection.getFields({ transaction });
const deletedFields = existFields.filter((field: any) => !values.fields?.find((f: any) => f.name === field.name));
for (const field of deletedFields) {
await field.destroy({ transaction });
}
const upRes = await repo.update({
filterByTk,
values,
values: {
...values,
fields: values.fields?.map((f: any) => {
delete f.key;
return f;
}),
},
updateAssociationValues: ['fields'],
transaction,
});