fix: Unassign flow folders before removing folder

This commit is contained in:
Faruk AYDIN
2025-02-14 12:13:25 +01:00
parent 6639dde6c7
commit 3d1657b63c
3 changed files with 51 additions and 1 deletions

View File

@@ -4,7 +4,7 @@ export default async (request, response) => {
.findById(request.params.folderId)
.throwIfNotFound();
await folder.$query().delete();
await folder.delete();
response.status(204).end();
};

View File

@@ -1,5 +1,6 @@
import Base from './base.js';
import User from './user.js';
import Flow from './flow.js';
class Folder extends Base {
static tableName = 'folders';
@@ -24,7 +25,20 @@ class Folder extends Base {
to: 'users.id',
},
},
flows: {
relation: Base.HasManyRelation,
modelClass: Flow,
join: {
from: 'folders.id',
to: 'flows.folder_id',
},
},
});
async delete() {
await this.$relatedQuery('flows').patch({ folderId: null });
await this.$query().delete();
}
}
export default Folder;

View File

@@ -1,7 +1,11 @@
import { describe, it, expect } from 'vitest';
import Folder from './folder';
import User from './user';
import Flow from './flow';
import Base from './base';
import { createFolder } from '../../test/factories/folder';
import { createFlow } from '../../test/factories/flow';
import { createUser } from '../../test/factories/user';
describe('Folder model', () => {
it('tableName should return correct name', () => {
@@ -24,8 +28,40 @@ describe('Folder model', () => {
to: 'users.id',
},
},
flows: {
relation: Base.HasManyRelation,
modelClass: Flow,
join: {
from: 'folders.id',
to: 'flows.folder_id',
},
},
};
expect(relationMappings).toStrictEqual(expectedRelations);
});
describe('delete', () => {
it('should set folderId to null for all related flows before deleting the folder', async () => {
const user = await createUser();
const folder = await createFolder({ userId: user.id });
const flow = await createFlow({ folderId: folder.id, userId: user.id });
await folder.delete();
const refetchedFlow = await flow.$query();
expect(refetchedFlow.folderId).toBe(null);
});
it('should delete the folder', async () => {
const user = await createUser();
const folder = await createFolder({ userId: user.id });
await folder.delete();
const deletedFolder = await Folder.query().findById(folder.id);
expect(deletedFolder).toBeUndefined();
});
});
});