Skip to content

Commit 9928850

Browse files
authored
Merge pull request #8904 from ever-co/fix/zapier-webhook-subscription-migration
[Fix] Zapier Webhook Subscription Entity/Migration
2 parents 666c63a + 560c541 commit 9928850

10 files changed

+88
-89
lines changed

packages/core/src/lib/database/migrations/1744014217496-CreateZapierWebhookSubscriptionRepositoryTable.ts

+40-40
Large diffs are not rendered by default.

packages/plugins/integration-zapier/src/lib/dto/create-zapier-integration.dto.ts

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
1+
import { ApiProperty } from '@nestjs/swagger';
12
import { IsString, IsNotEmpty, IsIn } from 'class-validator';
23
import { ICreateZapierIntegrationInput, ZapierGrantType } from '@gauzy/contracts';
34
import { TenantOrganizationBaseDTO } from '@gauzy/core';
4-
import { ApiProperty } from '@nestjs/swagger';
55

66
export class CreateZapierIntegrationDto extends TenantOrganizationBaseDTO implements ICreateZapierIntegrationInput {
77
@ApiProperty({ type: () => String })

packages/plugins/integration-zapier/src/lib/integration-zapier.plugin.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1+
import { Logger } from '@nestjs/common';
12
import * as chalk from 'chalk';
23
import { ApplicationPluginConfig, CustomEmbeddedFieldConfig, CustomEmbeddedFields } from '@gauzy/common';
34
import { GauzyCorePlugin as Plugin, IOnPluginBootstrap, IOnPluginDestroy } from '@gauzy/plugin';
45
import { ZapierModule } from './zapier.module';
5-
import { ZapierWebhookSubscriptionRepository } from './repository/zapier-repository.entity';
6-
import { Logger } from '@nestjs/common';
6+
import { ZapierWebhookSubscription } from './zapier-webhook-subscription.entity';
77

88
// Extend the CustomEmbeddedFields interface to include our custom entities
99
interface ZapierCustomFields extends CustomEmbeddedFields {
@@ -20,7 +20,7 @@ interface ZapierCustomFields extends CustomEmbeddedFields {
2020
* Entity needed for Zapier integration that extends the existing
2121
* IntegrationSetting entity to store webhook subscription data
2222
*/
23-
entities: [ZapierWebhookSubscriptionRepository],
23+
entities: [ZapierWebhookSubscription],
2424
/**
2525
* A callback that receives the main plugin configuration object and allows
2626
* custom modifications before returning the final configuration.
@@ -40,7 +40,7 @@ interface ZapierCustomFields extends CustomEmbeddedFields {
4040
name: 'webhookSubscriptions',
4141
type: 'relation',
4242
relationType: 'one-to-many',
43-
entity: ZapierWebhookSubscriptionRepository,
43+
entity: ZapierWebhookSubscription,
4444
nullable: true,
4545
onDelete: 'CASCADE'
4646
}
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
11
import { MikroOrmBaseEntityRepository } from '@gauzy/core';
2-
import { ZapierWebhookSubscriptionRepository } from './zapier-repository.entity';
2+
import { ZapierWebhookSubscription } from '../zapier-webhook-subscription.entity';
33

4-
export class MikroOrmZapierWebhookSubscriptionRepository extends MikroOrmBaseEntityRepository<ZapierWebhookSubscriptionRepository> {}
4+
export class MikroOrmZapierWebhookSubscriptionRepository extends MikroOrmBaseEntityRepository<ZapierWebhookSubscription> { }

packages/plugins/integration-zapier/src/lib/repository/type-orm-zapier.repository.ts

+4-4
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
1+
import { Injectable } from '@nestjs/common';
12
import { InjectRepository } from '@nestjs/typeorm';
23
import { Repository } from 'typeorm';
3-
import { ZapierWebhookSubscriptionRepository } from './zapier-repository.entity';
4-
import { Injectable } from '@nestjs/common';
4+
import { ZapierWebhookSubscription } from '../zapier-webhook-subscription.entity';
55

66
@Injectable()
7-
export class TypeOrmZapierWebhookSubscriptionRepository extends Repository<ZapierWebhookSubscriptionRepository> {
7+
export class TypeOrmZapierWebhookSubscriptionRepository extends Repository<ZapierWebhookSubscription> {
88
constructor(
9-
@InjectRepository(ZapierWebhookSubscriptionRepository) readonly repository: Repository<ZapierWebhookSubscriptionRepository>
9+
@InjectRepository(ZapierWebhookSubscription) readonly repository: Repository<ZapierWebhookSubscription>
1010
) {
1111
super(repository.target, repository.manager, repository.queryRunner);
1212
}

packages/plugins/integration-zapier/src/lib/zapier-authorization.controller.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,16 @@
11
import { Controller, Get, HttpException, HttpStatus, Query, Res } from '@nestjs/common';
2+
import { ConfigService } from '@nestjs/config';
23
import { ApiTags, ApiOperation, ApiResponse } from '@nestjs/swagger';
34
import { Response } from 'express';
4-
import { ZAPIER_AUTHORIZATION_URL, ZAPIER_REDIRECT_URI } from './zapier.config';
55
import { Public } from '@gauzy/common';
6-
import { ConfigService } from '@nestjs/config';
76
import { IntegrationEnum } from '@gauzy/contracts';
87
import { buildQueryString } from '@gauzy/utils';
8+
import { ZAPIER_AUTHORIZATION_URL, ZAPIER_REDIRECT_URI } from './zapier.config';
99

1010
@ApiTags('Zapier Integrations')
1111
@Controller('/integration/zapier')
1212
export class ZapierAuthorizationController {
13-
constructor(private readonly _config: ConfigService) {}
13+
constructor(private readonly _config: ConfigService) { }
1414
/**
1515
* Handles the OAuth2 authorization request
1616
* Redirects the user to the zapier authorization URL

packages/plugins/integration-zapier/src/lib/repository/zapier-repository.entity.ts renamed to packages/plugins/integration-zapier/src/lib/zapier-webhook-subscription.entity.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,12 @@ import {
1717
} from '@gauzy/core';
1818

1919
// Local imports
20-
import { MikroOrmZapierWebhookSubscriptionRepository } from './mikro-orm-zapier.repository';
20+
import { MikroOrmZapierWebhookSubscriptionRepository } from './repository/mikro-orm-zapier.repository';
2121

2222
@MultiORMEntity('zapier_webhook_subscription', {
2323
mikroOrmRepository: () => MikroOrmZapierWebhookSubscriptionRepository
2424
})
25-
export class ZapierWebhookSubscriptionRepository extends TenantOrganizationBaseEntity {
25+
export class ZapierWebhookSubscription extends TenantOrganizationBaseEntity {
2626
@ApiProperty({ type: () => String })
2727
@IsString()
2828
@ColumnIndex()
@@ -37,7 +37,7 @@ export class ZapierWebhookSubscriptionRepository extends TenantOrganizationBaseE
3737

3838
@ApiProperty({ type: () => String })
3939
@IsUUID()
40-
@RelationId((it: ZapierWebhookSubscriptionRepository) => it.integration)
40+
@RelationId((it: ZapierWebhookSubscription) => it.integration)
4141
@ColumnIndex()
4242
@MultiORMColumn({ nullable: true, relationId: true })
4343
integrationId!: ID;

packages/plugins/integration-zapier/src/lib/zapier-webhook.controller.ts

+6-6
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,11 @@ import {
1111
BadRequestException,
1212
InternalServerErrorException
1313
} from '@nestjs/common';
14+
import { ApiOperation, ApiResponse } from '@nestjs/swagger';
15+
import { IZapierCreateWebhookInput } from '@gauzy/contracts';
1416
import { ZapierWebhookService } from './zapier-webhook.service';
1517
import { ZapierService } from './zapier.service';
16-
import { IZapierCreateWebhookInput } from '@gauzy/contracts';
17-
import { ZapierWebhookSubscriptionRepository } from './repository/zapier-repository.entity';
18-
import { ApiOperation, ApiResponse } from '@nestjs/swagger';
18+
import { ZapierWebhookSubscription } from './zapier-webhook-subscription.entity';
1919

2020
@Controller('/integration/zapier')
2121
export class ZapierWebhookController {
@@ -24,7 +24,7 @@ export class ZapierWebhookController {
2424
constructor(
2525
private readonly zapierWebhookService: ZapierWebhookService,
2626
private readonly zapierService: ZapierService
27-
) {}
27+
) { }
2828

2929
@ApiOperation({ summary: 'Create a new Zapier webhook subscription' })
3030
@ApiResponse({
@@ -39,11 +39,11 @@ export class ZapierWebhookController {
3939
async createWebhook(
4040
@Body() body: IZapierCreateWebhookInput,
4141
@Headers('Authorization') authorization: string
42-
): Promise<ZapierWebhookSubscriptionRepository> {
42+
): Promise<ZapierWebhookSubscription> {
4343
if (!authorization) {
4444
throw new UnauthorizedException('Authorization header is required');
4545
}
46-
if(!authorization.startsWith('Bearer')) {
46+
if (!authorization.startsWith('Bearer')) {
4747
throw new UnauthorizedException('Authorization header must start with Bearer');
4848
}
4949
const token = authorization.split(' ')[1];

packages/plugins/integration-zapier/src/lib/zapier-webhook.service.ts

+10-11
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,23 @@
11
import { Injectable, Logger, ForbiddenException, NotFoundException, InternalServerErrorException } from '@nestjs/common';
2-
import { InjectRepository } from '@nestjs/typeorm';
3-
import { Repository } from 'typeorm';
4-
import { ZapierWebhookSubscriptionRepository } from './repository/zapier-repository.entity';
2+
import { ID } from '@gauzy/contracts';
3+
import { ZapierWebhookSubscription } from './zapier-webhook-subscription.entity';
4+
import { TypeOrmZapierWebhookSubscriptionRepository } from './repository/type-orm-zapier.repository';
55

66
@Injectable()
77
export class ZapierWebhookService {
8+
private readonly logger = new Logger(ZapierWebhookService.name);
89

9-
private readonly logger = new Logger(ZapierWebhookService.name)
1010
constructor(
11-
@InjectRepository(ZapierWebhookSubscriptionRepository)
12-
private readonly subscriptionRepository: Repository<ZapierWebhookSubscriptionRepository>,
13-
) {}
11+
private readonly subscriptionRepository: TypeOrmZapierWebhookSubscriptionRepository,
12+
) { }
1413

1514
async createSubscription(input: {
1615
targetUrl: string;
1716
event: string;
18-
integrationId?: string;
19-
tenantId?: string;
20-
organizationId?: string
21-
}): Promise<ZapierWebhookSubscriptionRepository> {
17+
integrationId?: ID;
18+
tenantId?: ID;
19+
organizationId?: ID
20+
}): Promise<ZapierWebhookSubscription> {
2221
try {
2322
// Check if subscription already exists to avoid duplicates
2423
const existing = await this.subscriptionRepository.findOne({
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1+
import { MikroOrmModule } from '@mikro-orm/nestjs';
12
import { HttpModule } from '@nestjs/axios';
23
import { Module } from '@nestjs/common';
34
import { CqrsModule } from '@nestjs/cqrs';
5+
import { TypeOrmModule } from '@nestjs/typeorm';
46
import { ConfigModule, environment } from '@gauzy/config';
57
import {
68
IntegrationEntitySettingModule,
@@ -9,7 +11,8 @@ import {
911
IntegrationSettingModule,
1012
IntegrationTenantModule,
1113
UserModule,
12-
RolePermissionModule
14+
RolePermissionModule,
15+
TimerModule
1316
} from '@gauzy/core';
1417
import { ZapierService } from './zapier.service';
1518
import { ZapierController } from './zapier.controller';
@@ -18,12 +21,9 @@ import { CommandHandlers } from '@gauzy/core';
1821
import { QueryHandlers } from '@gauzy/core';
1922
import { ZapierWebhookService } from './zapier-webhook.service';
2023
import { ZapierWebhookController } from './zapier-webhook.controller';
24+
import { ZapierWebhookSubscription } from './zapier-webhook-subscription.entity';
2125
import { MikroOrmZapierWebhookSubscriptionRepository } from './repository/mikro-orm-zapier.repository';
2226
import { TypeOrmZapierWebhookSubscriptionRepository } from './repository/type-orm-zapier.repository';
23-
import { ZapierWebhookSubscriptionRepository } from './repository/zapier-repository.entity';
24-
import { TypeOrmModule } from '@nestjs/typeorm';
25-
import { MikroOrmModule } from '@mikro-orm/nestjs';
26-
import { TimerModule } from '@gauzy/core';
2727

2828
@Module({
2929
imports: [
@@ -38,18 +38,18 @@ import { TimerModule } from '@gauzy/core';
3838
IntegrationTenantModule,
3939
UserModule,
4040
TimerModule,
41-
TypeOrmModule.forFeature([ZapierWebhookSubscriptionRepository]),
42-
MikroOrmModule.forFeature([ZapierWebhookSubscriptionRepository])
41+
TypeOrmModule.forFeature([ZapierWebhookSubscription]),
42+
MikroOrmModule.forFeature([ZapierWebhookSubscription])
4343
],
4444
controllers: [ZapierAuthorizationController, ZapierController, ZapierWebhookController],
4545
providers: [
46-
ZapierService,
47-
ZapierWebhookService,
48-
MikroOrmZapierWebhookSubscriptionRepository,
49-
TypeOrmZapierWebhookSubscriptionRepository,
50-
...CommandHandlers,
51-
...QueryHandlers
52-
],
46+
ZapierService,
47+
ZapierWebhookService,
48+
MikroOrmZapierWebhookSubscriptionRepository,
49+
TypeOrmZapierWebhookSubscriptionRepository,
50+
...CommandHandlers,
51+
...QueryHandlers
52+
],
5353
exports: [ZapierService, ZapierWebhookService, TimerModule]
5454
})
55-
export class ZapierModule {}
55+
export class ZapierModule { }

0 commit comments

Comments
 (0)