| import { PrismaRepository } from '@gitroom/nestjs-libraries/database/prisma/prisma.service'; | |
| import { Injectable } from '@nestjs/common'; | |
| import { WebhooksDto } from '@gitroom/nestjs-libraries/dtos/webhooks/webhooks.dto'; | |
| import { v4 as uuidv4 } from 'uuid'; | |
| () | |
| export class WebhooksRepository { | |
| constructor(private _webhooks: PrismaRepository<'webhooks'>) {} | |
| getTotal(orgId: string) { | |
| return this._webhooks.model.webhooks.count({ | |
| where: { | |
| organizationId: orgId, | |
| deletedAt: null, | |
| }, | |
| }); | |
| } | |
| getWebhooks(orgId: string) { | |
| return this._webhooks.model.webhooks.findMany({ | |
| where: { | |
| organizationId: orgId, | |
| deletedAt: null, | |
| }, | |
| include: { | |
| integrations: { | |
| select: { | |
| integration: { | |
| select: { | |
| id: true, | |
| picture: true, | |
| name: true, | |
| }, | |
| }, | |
| }, | |
| }, | |
| }, | |
| }); | |
| } | |
| deleteWebhook(orgId: string, id: string) { | |
| return this._webhooks.model.webhooks.update({ | |
| where: { | |
| id, | |
| organizationId: orgId, | |
| }, | |
| data: { | |
| deletedAt: new Date(), | |
| }, | |
| }); | |
| } | |
| async createWebhook(orgId: string, body: WebhooksDto) { | |
| const { id } = await this._webhooks.model.webhooks.upsert({ | |
| where: { | |
| id: body.id || uuidv4(), | |
| organizationId: orgId, | |
| }, | |
| create: { | |
| organizationId: orgId, | |
| url: body.url, | |
| name: body.name, | |
| }, | |
| update: { | |
| url: body.url, | |
| name: body.name, | |
| }, | |
| }); | |
| await this._webhooks.model.webhooks.update({ | |
| where: { | |
| id, | |
| organizationId: orgId, | |
| }, | |
| data: { | |
| integrations: { | |
| deleteMany: {}, | |
| create: body.integrations.map((integration) => ({ | |
| integrationId: integration.id, | |
| })), | |
| }, | |
| }, | |
| }); | |
| return { id }; | |
| } | |
| } | |