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); expect(fields.length).toBe(2);
const loadedFields = db.getCollection('sqlCollection').fields; const loadedFields = db.getCollection('sqlCollection').fields;
expect(loadedFields.size).toBe(2); expect(loadedFields.size).toBe(2);
await agent.resource('sqlCollection').update({ const updateRes = await agent.resource('sqlCollection').update({
filterByTk: 'sqlCollection', filterByTk: 'sqlCollection',
values: { values: {
key: collection.key,
sql: 'select "testField1" from "fakeCollection"', sql: 'select "testField1" from "fakeCollection"',
name: 'sqlCollection',
fields: [ fields: [
{ {
name: 'testField1', name: 'testField1',
type: 'string', type: 'string',
interface: 'input', 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({ const collection2 = await db.getRepository('collections').findOne({
filter: { filter: {
name: 'sqlCollection', name: 'sqlCollection',

View File

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