8643 fix sentry error (#8644)

- fixes missing data in event payload when adding a new workspaceMember
- add strong typing to database event emitters
This commit is contained in:
martmull
2024-11-21 17:09:36 +01:00
committed by GitHub
parent 395da91071
commit 39373b4a28
61 changed files with 460 additions and 311 deletions

View File

@ -9,6 +9,7 @@ import { WorkspaceService } from 'src/engine/core-modules/workspace/services/wor
import { DataSourceService } from 'src/engine/metadata-modules/data-source/data-source.service';
import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.manager';
import { WorkspaceEventEmitter } from 'src/engine/workspace-event-emitter/workspace-event-emitter';
import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity';
describe('UserService', () => {
let service: UserService;
@ -25,6 +26,10 @@ describe('UserService', () => {
provide: getRepositoryToken(UserWorkspace, 'core'),
useValue: {},
},
{
provide: getRepositoryToken(ObjectMetadataEntity, 'metadata'),
useValue: {},
},
{
provide: DataSourceService,
useValue: {},

View File

@ -6,7 +6,6 @@ import { TypeOrmQueryService } from '@ptc-org/nestjs-query-typeorm';
import { Repository } from 'typeorm';
import { TypeORMService } from 'src/database/typeorm/typeorm.service';
import { ObjectRecordDeleteEvent } from 'src/engine/core-modules/event-emitter/types/object-record-delete.event';
import { User } from 'src/engine/core-modules/user/user.entity';
import { WorkspaceService } from 'src/engine/core-modules/workspace/services/workspace.service';
import {
@ -18,12 +17,15 @@ import { TwentyORMGlobalManager } from 'src/engine/twenty-orm/twenty-orm-global.
import { WorkspaceEventEmitter } from 'src/engine/workspace-event-emitter/workspace-event-emitter';
import { WorkspaceMemberWorkspaceEntity } from 'src/modules/workspace-member/standard-objects/workspace-member.workspace-entity';
import { DatabaseEventAction } from 'src/engine/api/graphql/graphql-query-runner/enums/database-event-action';
import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity';
// eslint-disable-next-line @nx/workspace-inject-workspace-repository
export class UserService extends TypeOrmQueryService<User> {
constructor(
@InjectRepository(User, 'core')
private readonly userRepository: Repository<User>,
@InjectRepository(ObjectMetadataEntity, 'metadata')
private readonly objectMetadataRepository: Repository<ObjectMetadataEntity>,
private readonly dataSourceService: DataSourceService,
private readonly typeORMService: TypeORMService,
private readonly workspaceEventEmitter: WorkspaceEventEmitter,
@ -44,13 +46,11 @@ export class UserService extends TypeOrmQueryService<User> {
'workspaceMember',
);
const workspaceMember = await workspaceMemberRepository.findOne({
return await workspaceMemberRepository.findOne({
where: {
userId: user.id,
},
});
return workspaceMember;
}
async loadWorkspaceMembers(workspace: Workspace) {
@ -107,19 +107,27 @@ export class UserService extends TypeOrmQueryService<User> {
await workspaceDataSource?.query(
`DELETE FROM ${dataSourceMetadata.schema}."workspaceMember" WHERE "userId" = '${userId}'`,
);
const payload =
new ObjectRecordDeleteEvent<WorkspaceMemberWorkspaceEntity>();
payload.properties = {
before: workspaceMember,
};
payload.recordId = workspaceMember.id;
const objectMetadata = await this.objectMetadataRepository.findOneOrFail({
where: {
nameSingular: 'workspaceMember',
},
});
this.workspaceEventEmitter.emit(
`workspaceMember.${DatabaseEventAction.DELETED}`,
[payload],
this.workspaceEventEmitter.emitDatabaseBatchEvent({
objectMetadataNameSingular: 'workspaceMember',
action: DatabaseEventAction.DELETED,
events: [
{
recordId: workspaceMember.id,
objectMetadata,
properties: {
before: workspaceMember,
},
},
],
workspaceId,
);
});
return user;
}

View File

@ -17,6 +17,7 @@ import { User } from 'src/engine/core-modules/user/user.entity';
import { UserResolver } from 'src/engine/core-modules/user/user.resolver';
import { WorkspaceModule } from 'src/engine/core-modules/workspace/workspace.module';
import { DataSourceModule } from 'src/engine/metadata-modules/data-source/data-source.module';
import { ObjectMetadataEntity } from 'src/engine/metadata-modules/object-metadata/object-metadata.entity';
import { userAutoResolverOpts } from './user.auto-resolver-opts';
@ -32,6 +33,7 @@ import { UserService } from './services/user.service';
],
resolvers: userAutoResolverOpts,
}),
NestjsQueryTypeOrmModule.forFeature([ObjectMetadataEntity], 'metadata'),
DataSourceModule,
FileUploadModule,
WorkspaceModule,