mirror of
https://gitee.com/nocobase/nocobase.git
synced 2025-07-02 03:02:19 +08:00
fix: update sql collection (#5909)
This commit is contained in:
parent
b7906cdfbf
commit
7eed6ef863
@ -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',
|
||||||
|
@ -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,
|
||||||
});
|
});
|
||||||
|
Loading…
x
Reference in New Issue
Block a user