Skip to content

Commit

Permalink
CRYP-47 Add api retrieve webhook deliveries
Browse files Browse the repository at this point in the history
  • Loading branch information
thongnguyen5 authored and thongnguyendev committed Apr 16, 2024
1 parent c690a8e commit 78660be
Show file tree
Hide file tree
Showing 5 changed files with 158 additions and 0 deletions.
2 changes: 2 additions & 0 deletions app/apps/onebox/src/main.module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import { MonitorModule } from './modules/monitor/monitor.module';
import { ProjectModule } from './modules/project/project.module';
import { UsersModule } from './modules/users/users.module';
import { PollingBlockService } from './polling.block/polling.block.service';
import { DeliveryModule } from './modules/delivery/delivery.module';

@Module({
imports: [
Expand Down Expand Up @@ -44,6 +45,7 @@ import { PollingBlockService } from './polling.block/polling.block.service';
BlockSyncModule,
MonitorModule,
MonitorAddressModule,
DeliveryModule,
],
providers: [GlobalService, PollingBlockService],
})
Expand Down
36 changes: 36 additions & 0 deletions app/apps/onebox/src/modules/delivery/delivery.controller.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
import { Controller, Get, Query, Req, UseGuards } from '@nestjs/common';
import {
ApiBearerAuth,
ApiOkResponse,
ApiOperation,
ApiTags,
} from '@nestjs/swagger';
import { Request } from 'express';
import { JwtAuthGuard } from '../auth/guards/jwt-auth.guard';
import { User } from '../users/schemas/user.schema';
import { DeliveryService } from './delivery.service';
import {
GetMonitorDeliveryDto,
MonitorDeliveryResponseDto,
} from './dto/delivery.dto';

@ApiTags('Monitor Delivery')
@Controller('/delivery')
export class DeliveryController {
constructor(private readonly deliveryService: DeliveryService) {}

@ApiOperation({ summary: 'Get Monitor Deliveries' })
@ApiBearerAuth('JWT')
@UseGuards(JwtAuthGuard)
@Get('')
@ApiOkResponse({ type: [MonitorDeliveryResponseDto] })
async getMonitorDeliveries(
@Req() req: Request,
@Query() body: GetMonitorDeliveryDto,
): Promise<MonitorDeliveryResponseDto[]> {
return await this.deliveryService.getMonitorDeliveries(
req.user as User,
body,
);
}
}
21 changes: 21 additions & 0 deletions app/apps/onebox/src/modules/delivery/delivery.module.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
import { MonitorModule as MonitorModelModule } from '@app/shared_modules/monitor/monitor.module';
import { ProjectModule as ProjectModelModule } from '@app/shared_modules/project/project.module';
import { WebhookModule } from '@app/shared_modules/webhook/webhook.module';
import { Module } from '@nestjs/common';
import { MonitorModule } from '../monitor/monitor.module';
import { ProjectModule } from '../project/project.module';
import { DeliveryController } from './delivery.controller';
import { DeliveryService } from './delivery.service';
@Module({
controllers: [DeliveryController],
providers: [DeliveryService],
exports: [DeliveryService],
imports: [
WebhookModule,
ProjectModelModule,
MonitorModelModule,
ProjectModule,
MonitorModule,
],
})
export class DeliveryModule {}
39 changes: 39 additions & 0 deletions app/apps/onebox/src/modules/delivery/delivery.service.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
import { WebhookService } from '@app/shared_modules/webhook/webhook.service';
import { Injectable } from '@nestjs/common';
import { MonitorService } from '../monitor/monitor.service';
import { User } from '../users/schemas/user.schema';
import {
GetMonitorDeliveryDto,
MonitorDeliveryResponseDto,
} from './dto/delivery.dto';

@Injectable()
export class DeliveryService {
constructor(
private readonly webhookService: WebhookService,
private readonly monitorService: MonitorService,
) {}

async getMonitorDeliveries(
user: User,
request: GetMonitorDeliveryDto,
): Promise<MonitorDeliveryResponseDto[]> {
const monitor = await this.monitorService.findAndAuthMonitor(
user,
request.monitorId,
);

return this.webhookService
.getDeliveries(
monitor.webhookId,
request.limit,
request.offset,
request.status,
)
.then((response) => {
return response.deliveries.map((delivery) =>
MonitorDeliveryResponseDto.from(delivery),
);
});
}
}
60 changes: 60 additions & 0 deletions app/apps/onebox/src/modules/delivery/dto/delivery.dto.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
import { DeliveryDto } from '@app/shared_modules/webhook/webhook.service';
import { ApiProperty, ApiResponseProperty } from '@nestjs/swagger';
import { Builder } from 'builder-pattern';
import { Transform } from 'class-transformer';
import { IsNotEmpty, Max, Min } from 'class-validator';

export class GetMonitorDeliveryDto {
@ApiProperty()
@IsNotEmpty()
monitorId: string;

@ApiProperty({ required: false })
status?: 'succeeded' | 'pending' | 'failed';

@ApiProperty({ default: 10 })
@Max(10)
@Min(1)
@Transform(({ value }) => parseInt(value))
limit: number;

@ApiProperty({ default: 0 })
@Min(0)
@Transform(({ value }) => parseInt(value))
offset: number;
}

export class MonitorDeliveryResponseDto {
@ApiResponseProperty()
id: string;

@ApiResponseProperty()
payload: string;

@ApiResponseProperty()
status: string;

@ApiResponseProperty()
attempts: number;

@ApiResponseProperty()
dateScheduled: string;

@ApiResponseProperty()
dateCreated: string;

@ApiResponseProperty()
dateUpdated: string;

static from(dto: DeliveryDto): MonitorDeliveryResponseDto {
return Builder<MonitorDeliveryResponseDto>()
.id(dto.id)
.payload(dto.payload)
.status(dto.status)
.attempts(dto.delivery_attempts)
.dateScheduled(dto.scheduled_at)
.dateCreated(dto.created_at)
.dateUpdated(dto.updated_at)
.build();
}
}

0 comments on commit 78660be

Please sign in to comment.