feat: Dynamic hook registration for WorkspaceQueryHooks (#6008)
#### Overview
This PR introduces a new API for dynamically registering and executing
pre and post query hooks in the Workspace Query Hook system using the
`@WorkspaceQueryHook` decorator. This approach eliminates the need for
manual provider registration, and fix the issue of `undefined` or `null`
repository using `@InjectWorkspaceRepository`.
#### New API
**Define a Hook**
Use the `@WorkspaceQueryHook` decorator to define pre or post hooks:
```typescript
@WorkspaceQueryHook({
key: `calendarEvent.findMany`,
scope: Scope.REQUEST,
})
export class CalendarEventFindManyPreQueryHook implements WorkspaceQueryHookInstance {
async execute(userId: string, workspaceId: string, payload: FindManyResolverArgs): Promise<void> {
if (!payload?.filter?.id?.eq) {
throw new BadRequestException('id filter is required');
}
// Implement hook logic here
}
}
```
This API simplifies the registration and execution of query hooks,
providing a more flexible and maintainable approach.
---------
Co-authored-by: Weiko <corentin@twenty.com>
This commit is contained in:
@ -14,7 +14,7 @@ export class ScopedWorkspaceDatasourceFactory {
|
||||
|
||||
public async create(entities: EntitySchema[]) {
|
||||
const workspaceId: string | undefined =
|
||||
this.request['req']?.['workspaceId'];
|
||||
this.request?.['req']?.['workspaceId'];
|
||||
|
||||
if (!workspaceId) {
|
||||
return null;
|
||||
|
||||
Reference in New Issue
Block a user