Skip to content

Commit 4ecfe60

Browse files
committed
fix: enhance base delete event to support permanent deletion
1 parent 0a98d14 commit 4ecfe60

File tree

4 files changed

+18
-14
lines changed

4 files changed

+18
-14
lines changed

apps/nestjs-backend/src/event-emitter/events/base/base.event.ts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import { CoreEvent } from '../core-event';
55
import { Events } from '../event.enum';
66

77
type IBaseCreatePayload = { base: ICreateBaseVo };
8-
type IBaseDeletePayload = { baseId: string };
8+
type IBaseDeletePayload = { baseId: string; permanent?: boolean };
99
type IBaseUpdatePayload = IBaseCreatePayload;
1010
type IBasePermissionUpdatePayload = { baseId: string };
1111

@@ -19,8 +19,8 @@ export class BaseCreateEvent extends CoreEvent<IBaseCreatePayload> {
1919

2020
export class BaseDeleteEvent extends CoreEvent<IBaseDeletePayload> {
2121
public readonly name = Events.BASE_DELETE;
22-
constructor(baseId: string, context: IEventContext) {
23-
super({ baseId }, context);
22+
constructor(payload: IBaseDeletePayload, context: IEventContext) {
23+
super(payload, context);
2424
}
2525
}
2626

@@ -52,8 +52,8 @@ export class BaseEventFactory {
5252
return new BaseCreateEvent(base, context);
5353
})
5454
.with(Events.BASE_DELETE, () => {
55-
const { baseId } = payload as IBaseDeletePayload;
56-
return new BaseDeleteEvent(baseId, context);
55+
const { baseId, permanent } = payload as IBaseDeletePayload;
56+
return new BaseDeleteEvent({ baseId, permanent }, context);
5757
})
5858
.with(Events.BASE_UPDATE, () => {
5959
const { base } = payload as IBaseUpdatePayload;

apps/nestjs-backend/src/event-emitter/interceptor/event.Interceptor.ts

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -57,14 +57,11 @@ export class EventMiddleware implements NestInterceptor {
5757
};
5858

5959
return match(eventName)
60-
.with(
61-
P.union(
62-
Events.BASE_CREATE,
63-
Events.BASE_DELETE,
64-
Events.BASE_UPDATE,
65-
Events.BASE_PERMISSION_UPDATE
66-
),
67-
() => BaseEventFactory.create(eventName, { base: resolveData, ...reqParams }, eventContext)
60+
.with(Events.BASE_DELETE, () =>
61+
BaseEventFactory.create(eventName, { ...resolveData, ...reqParams }, eventContext)
62+
)
63+
.with(P.union(Events.BASE_CREATE, Events.BASE_UPDATE, Events.BASE_PERMISSION_UPDATE), () =>
64+
BaseEventFactory.create(eventName, { base: resolveData, ...reqParams }, eventContext)
6865
)
6966
.with(P.union(Events.SPACE_CREATE, Events.SPACE_DELETE, Events.SPACE_UPDATE), () =>
7067
SpaceEventFactory.create(eventName, { space: resolveData, ...reqParams }, eventContext)

apps/nestjs-backend/src/event-emitter/listeners/trash.listener.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,10 @@ export class TrashListener {
3434
case Events.BASE_DELETE: {
3535
resourceId = payload.baseId;
3636
resourceType = ResourceType.Base;
37+
// Skip trash creation for permanent delete
38+
if (payload.permanent) {
39+
return;
40+
}
3741
const base = await this.prismaService.base.findUniqueOrThrow({
3842
where: { id: resourceId },
3943
select: { id: true, spaceId: true, deletedTime: true },

apps/nestjs-backend/src/features/base/base.controller.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -297,8 +297,11 @@ export class BaseController {
297297
}
298298

299299
@Delete(':baseId/permanent')
300+
@Permissions('base|delete')
301+
@EmitControllerEvent(Events.BASE_DELETE)
300302
async permanentDeleteBase(@Param('baseId') baseId: string) {
301-
return await this.baseService.permanentDeleteBase(baseId);
303+
await this.baseService.permanentDeleteBase(baseId);
304+
return { baseId, permanent: true };
302305
}
303306

304307
@Post(':baseId/collaborator')

0 commit comments

Comments
 (0)