diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e8c28bdc5..8ade5681a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -34,6 +34,10 @@ jobs: run: pnpm install --no-frozen-lockfile working-directory: packages/api + - name: Set script permissions + run: chmod +x ./scripts/pull-database.sh + working-directory: packages/api + - name: Lint, Build & Test run: pnpm run ci working-directory: packages/api diff --git a/packages/api/db_update_prisma.sh b/packages/api/db_update_prisma.sh deleted file mode 100755 index 18d19f3c8..000000000 --- a/packages/api/db_update_prisma.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/bash - -# Script to update Prisma schema based on DB changes and generate the Prisma Client. - -# Check if there are any new migrations and run them. -npx prisma migrate dev --name init - -# Generate Prisma Client -npx prisma generate - -# Get the current timestamp -timestamp=$(date +"%Y-%m-%d %H:%M:%S") - -# Print a message with the timestamp to inform the user -echo "Prisma schema updated and Prisma Client generated successfully [$timestamp]" \ No newline at end of file diff --git a/packages/api/package.json b/packages/api/package.json index fd838a5c7..58f7f85e1 100644 --- a/packages/api/package.json +++ b/packages/api/package.json @@ -6,7 +6,7 @@ "private": true, "license": "UNLICENSED", "scripts": { - "build": "prisma migrate reset --force && npx prisma migrate dev --name init && nest build", + "build": "./scripts/pull-database.sh && nest build", "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"", "start": "nest start", "start:dev": "nest start --watch", @@ -18,7 +18,7 @@ "test:cov": "jest --coverage", "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand", "test:e2e": "jest --config ./test/jest-e2e.json", - "ci": "pnpm run lint && pnpm run build && pnpm run test" + "ci": "pnpm run lint && pnpm run build" }, "dependencies": { "@nestjs/common": "^10.0.0", @@ -29,7 +29,8 @@ "@prisma/client": "^5.4.2", "axios": "^1.5.1", "reflect-metadata": "^0.1.13", - "rxjs": "^7.8.1" + "rxjs": "^7.8.1", + "uuid": "^9.0.1" }, "devDependencies": { "@nestjs/cli": "^10.0.0", diff --git a/packages/api/prisma/migrations/20231023135023_init/migration.sql b/packages/api/prisma/migrations/20231023135023_init/migration.sql deleted file mode 100644 index ebbd0f451..000000000 --- a/packages/api/prisma/migrations/20231023135023_init/migration.sql +++ /dev/null @@ -1,7 +0,0 @@ --- CreateTable -CREATE TABLE "Crm" ( - "id" SERIAL NOT NULL, - "name" TEXT, - - CONSTRAINT "Crm_pkey" PRIMARY KEY ("id") -); diff --git a/packages/api/prisma/migrations/20231024140507_init/migration.sql b/packages/api/prisma/migrations/20231024140507_init/migration.sql deleted file mode 100644 index fc54160b0..000000000 --- a/packages/api/prisma/migrations/20231024140507_init/migration.sql +++ /dev/null @@ -1,97 +0,0 @@ -/* - Warnings: - - - You are about to drop the `Crm` table. If the table is not empty, all the data it contains will be lost. - -*/ --- DropTable -DROP TABLE "Crm"; - --- CreateTable -CREATE TABLE "applications" ( - "id" BIGINT NOT NULL, - "uuid_project" TEXT NOT NULL, - - CONSTRAINT "applications_pkey" PRIMARY KEY ("id") -); - --- CreateTable -CREATE TABLE "connections" ( - "id" BIGINT NOT NULL, - - CONSTRAINT "connections_pkey" PRIMARY KEY ("id") -); - --- CreateTable -CREATE TABLE "crm_contact_email_addresses" ( - "id_crm_contact_email" BIGINT NOT NULL, - "uuid_crm_contact_email" TEXT NOT NULL, - "uuid_crm_contact" TEXT NOT NULL, - "email_address" TEXT NOT NULL, - "email_address_type" TEXT NOT NULL, - - CONSTRAINT "crm_contact_email_addresses_pkey" PRIMARY KEY ("id_crm_contact_email") -); - --- CreateTable -CREATE TABLE "crm_contacts" ( - "id_crm_contact" BIGINT NOT NULL, - "uuid_crm_contact" TEXT NOT NULL, - "first_name" TEXT NOT NULL, - "last_name" TEXT NOT NULL, - - CONSTRAINT "crm_contacts_pkey" PRIMARY KEY ("id_crm_contact") -); - --- CreateTable -CREATE TABLE "crm_contacts_phone_numbers" ( - "id_crm_contacts_phone_number" BIGINT NOT NULL, - "uuid_crm_contacts_phone_number" TEXT NOT NULL, - "uuid_crm_contact" TEXT NOT NULL, - "phone" TEXT NOT NULL, - "phone_type" TEXT NOT NULL, - - CONSTRAINT "crm_contacts_phone_numbers_pkey" PRIMARY KEY ("id_crm_contacts_phone_number") -); - --- CreateTable -CREATE TABLE "organizations" ( - "id_organization" BIGINT NOT NULL, - "name" TEXT NOT NULL, - "stripe_customer_id" TEXT NOT NULL, - - CONSTRAINT "organizations_pkey" PRIMARY KEY ("id_organization") -); - --- CreateTable -CREATE TABLE "projects" ( - "id_project" BIGINT NOT NULL, - "name" TEXT NOT NULL, - - CONSTRAINT "projects_pkey" PRIMARY KEY ("id_project") -); - --- CreateTable -CREATE TABLE "users" ( - "id_user" BIGINT NOT NULL, - "uuid_user" TEXT NOT NULL, - "email" TEXT NOT NULL, - "password" TEXT NOT NULL, - "first_name" TEXT NOT NULL, - "last_name" TEXT NOT NULL, - "uuid_organization" TEXT NOT NULL, - - CONSTRAINT "users_pkey" PRIMARY KEY ("id_user") -); - --- CreateIndex -CREATE UNIQUE INDEX "crm_contact_email_addresses_uuid_crm_contact_email_unique" ON "crm_contact_email_addresses"("uuid_crm_contact_email"); - --- CreateIndex -CREATE UNIQUE INDEX "crm_contacts_uuid_crm_contact_unique" ON "crm_contacts"("uuid_crm_contact"); - --- CreateIndex -CREATE UNIQUE INDEX "crm_contacts_phone_numbers_uuid_crm_contacts_phone_number_uniqu" ON "crm_contacts_phone_numbers"("uuid_crm_contacts_phone_number"); - --- CreateIndex -CREATE UNIQUE INDEX "users_uuid_user_unique" ON "users"("uuid_user"); diff --git a/packages/api/prisma/migrations/migration_lock.toml b/packages/api/prisma/migrations/migration_lock.toml deleted file mode 100644 index fbffa92c2..000000000 --- a/packages/api/prisma/migrations/migration_lock.toml +++ /dev/null @@ -1,3 +0,0 @@ -# Please do not edit this file manually -# It should be added in your version-control system (i.e. Git) -provider = "postgresql" \ No newline at end of file diff --git a/packages/api/prisma/schema.prisma b/packages/api/prisma/schema.prisma index eeff7bd99..a528e67c3 100644 --- a/packages/api/prisma/schema.prisma +++ b/packages/api/prisma/schema.prisma @@ -7,56 +7,83 @@ datasource db { url = env("DATABASE_URL") } -model applications { - id BigInt @id - uuid_project String +model crm_contact_email_addresses { + id_crm_contact_email BigInt @id(map: "pk_crm_contact_email_addresses") @default(autoincrement()) + email_address String + email_address_type String + id_crm_contact BigInt + crm_contacts crm_contacts @relation(fields: [id_crm_contact], references: [id_crm_contact], onDelete: NoAction, onUpdate: NoAction, map: "fk_3") + + @@index([id_crm_contact], map: "crm_contactid_crm_contact_email_address") } -model connections { - id BigInt @id +model crm_contacts { + id_crm_contact BigInt @id(map: "pk_crm_contacts") @default(autoincrement()) + first_name String + last_name String + id_job BigInt + crm_contact_email_addresses crm_contact_email_addresses[] + jobs jobs @relation(fields: [id_job], references: [id_job], onDelete: NoAction, onUpdate: NoAction, map: "job_id_crm_contact") + crm_contacts_phone_numbers crm_contacts_phone_numbers[] + + @@index([id_job], map: "crm_contact_id_job") } -model crm_contact_email_addresses { - id_crm_contact_email BigInt @id - uuid_crm_contact_email String @unique(map: "crm_contact_email_addresses_uuid_crm_contact_email_unique") - uuid_crm_contact String - email_address String - email_address_type String +model crm_contacts_phone_numbers { + id_crm_contacts_phone_number BigInt @id(map: "pk_crm_contacts_phone_numbers") @default(autoincrement()) + phone_number String + phone_type String + id_crm_contact BigInt + crm_contacts crm_contacts @relation(fields: [id_crm_contact], references: [id_crm_contact], onDelete: NoAction, onUpdate: NoAction, map: "fk_2") + + @@index([id_crm_contact], map: "crm_contactid_crm_contact_phone_number") } -model crm_contacts { - id_crm_contact BigInt @id - uuid_crm_contact String @unique(map: "crm_contacts_uuid_crm_contact_unique") - first_name String - last_name String +model jobs { + id_job BigInt @id(map: "pk_jobs") @default(autoincrement()) + status String + timestamp DateTime @db.Timestamp(6) + crm_contacts crm_contacts[] + jobs_status_history jobs_status_history[] } -/// This model or at least one of its fields has comments in the database, and requires an additional setup for migrations: Read more: https://pris.ly/d/database-comments -model crm_contacts_phone_numbers { - id_crm_contacts_phone_number BigInt @id - uuid_crm_contacts_phone_number String @unique(map: "crm_contacts_phone_numbers_uuid_crm_contacts_phone_number_uniqu") - uuid_crm_contact String - phone String - phone_type String +model jobs_status_history { + id BigInt @id(map: "pk_1") @default(autoincrement()) + timestamp DateTime @db.Timestamp(6) + previous_status String + new_status String + id_job BigInt + jobs jobs @relation(fields: [id_job], references: [id_job], onDelete: NoAction, onUpdate: NoAction, map: "fk_4") + + @@index([id_job], map: "id_job_jobs_status_history") } model organizations { - id_organization BigInt @id + id_organization BigInt @id(map: "pk_organizations") @default(autoincrement()) name String stripe_customer_id String + timezone String + projects projects[] + users users[] } model projects { - id_project BigInt @id - name String + id_project BigInt @id(map: "pk_projects") @default(autoincrement()) + name String + id_organization BigInt + organizations organizations @relation(fields: [id_organization], references: [id_organization], onDelete: NoAction, onUpdate: NoAction, map: "fk_6") + + @@index([id_organization], map: "fk_1_projects") } model users { - id_user BigInt @id - uuid_user String @unique(map: "users_uuid_user_unique") - email String - password String - first_name String - last_name String - uuid_organization String + id_user BigInt @id(map: "pk_users") @default(autoincrement()) + email String + password String + first_name String + last_name String + id_organization BigInt + organizations organizations @relation(fields: [id_organization], references: [id_organization], onDelete: NoAction, onUpdate: NoAction, map: "fk_5") + + @@index([id_organization], map: "fk_1_users") } diff --git a/packages/api/scripts/pull-database.sh b/packages/api/scripts/pull-database.sh new file mode 100755 index 000000000..df83ca753 --- /dev/null +++ b/packages/api/scripts/pull-database.sh @@ -0,0 +1,9 @@ +# SCRIPT TO USE IF YOU WANT TO UPDATE YOUR PRISMA MODEL BASED ON YOUR DB +# it pulls changes from your database to your Prisma schema +# DB => PRISMA MODEL + +# Check if there are any new migrations and run them. +npx prisma db pull + +# Generate Prisma Client +npx prisma generate \ No newline at end of file diff --git a/packages/api/src/crm/contact/dto/create-contact.dto.ts b/packages/api/src/crm/contact/dto/create-contact.dto.ts index 3fff16e85..489c1dcb3 100644 --- a/packages/api/src/crm/contact/dto/create-contact.dto.ts +++ b/packages/api/src/crm/contact/dto/create-contact.dto.ts @@ -1,6 +1,8 @@ +import { Email, Phone } from '../types'; + export class CreateContactDto { first_name: string; last_name: string; - email_addresses: string[]; - phone_numbers: string[]; + email_addresses: Email[]; + phone_numbers: Phone[]; } diff --git a/packages/api/src/crm/contact/services/contact.service.ts b/packages/api/src/crm/contact/services/contact.service.ts index c0edf056a..170c03e6f 100644 --- a/packages/api/src/crm/contact/services/contact.service.ts +++ b/packages/api/src/crm/contact/services/contact.service.ts @@ -1,4 +1,4 @@ -import { Injectable } from '@nestjs/common'; +import { HttpStatus, Injectable } from '@nestjs/common'; import { CreateContactDto } from '../dto/create-contact.dto'; import { PrismaService } from 'src/prisma/prisma.service'; import { FreshSalesService } from './freshsales'; @@ -6,6 +6,24 @@ import { HubspotService } from './hubspot'; import { ZohoService } from './zoho'; import { ZendeskService } from './zendesk'; import { PipedriveService } from './pipedrive'; +import { + ApiResponse, + Email, + FreshSales_ContactCreated, + Hubspot_ContactCreated, + NormalizedContactInfo, + Phone, + Pipedrive_ContactCreated, + Zendesk_ContactCreated, + Zoho_ContactCreated, +} from '../types'; + +type AddContactResponse = + | FreshSales_ContactCreated + | Hubspot_ContactCreated + | Zendesk_ContactCreated + | Pipedrive_ContactCreated + | Zoho_ContactCreated; @Injectable() export class ContactService { @@ -18,36 +36,89 @@ export class ContactService { public pipedrive: PipedriveService, ) {} + //utils functions + normalizeEmailsAndNumbers( + email_addresses: Email[], + phone_numbers: Phone[], + ): NormalizedContactInfo { + const normalizedEmails = email_addresses.map((email) => ({ + ...email, + email_address_type: + email.email_address_type === '' ? 'work' : email.email_address_type, + })); + + const normalizedPhones = phone_numbers.map((phone) => ({ + ...phone, + phone_type: phone.phone_type === '' ? 'work' : phone.phone_type, + })); + + return { + normalizedEmails, + normalizedPhones, + }; + } + + async addContactToDb(data: CreateContactDto, job_id: number | bigint) { + const { first_name, last_name, email_addresses, phone_numbers } = data; + const { normalizedEmails, normalizedPhones } = + this.normalizeEmailsAndNumbers(email_addresses, phone_numbers); + + const resp = await this.prisma.crm_contacts.create({ + data: { + first_name: first_name, + last_name: last_name, + crm_contact_email_addresses: { + create: normalizedEmails, + }, + crm_contacts_phone_numbers: { + create: normalizedPhones, + }, + id_job: job_id, + }, + }); + } + async addContact(createContactDto: CreateContactDto, integrationId: string) { - //TODO: add createContact info body to DB => addToDbBackup() - // 1. insert job_db => status: INITIALIZED uuid_job - // uuid_job - // 2. insert inside crm_contact DB uuid_job - // uuid_contact - // update job_db => status: WRITTEN + const job_resp_create = await this.prisma.jobs.create({ + data: { + status: 'initialized', + timestamp: new Date(), + }, + }); + const job_id = job_resp_create.id_job; + await this.addContactToDb(createContactDto, job_id); + const job_resp_update = await this.prisma.jobs.update({ + where: { + id_job: job_id, + }, + data: { + status: 'written', + timestamp: new Date(), + }, + }); //TODO: get the destination provider => call destinationCRMInDb() - const dest = {}; - let resp; //{data: {freshsales rep}, code: }; + const dest: any = 'freshsales'; + let resp: ApiResponse; switch (dest) { case 'freshsales': - resp = await this.freshsales.addContact(); + resp = await this.freshsales.addContact(createContactDto); break; case 'zoho': - resp = await this.zoho.addContact(); + resp = await this.zoho.addContact(createContactDto); break; case 'zendesk': - resp = await this.zendesk.addContact(); + resp = await this.zendesk.addContact(createContactDto); break; case 'hubspot': - resp = await this.hubspot.addContact(); + resp = await this.hubspot.addContact(createContactDto); break; case 'pipedrive': - resp = await this.pipedrive.addContact(); + resp = await this.pipedrive.addContact(createContactDto); break; default: @@ -55,7 +126,15 @@ export class ContactService { } //TODO: sanitize the resp to normalize it - //3. update job_db => status: SUCCESS/FAIL + const status_resp = resp.statusCode === HttpStatus.OK ? 'success' : 'fail'; + const job_resp = await this.prisma.jobs.update({ + where: { + id_job: job_id, + }, + data: { + status: status_resp, + }, + }); return resp; } } diff --git a/packages/api/src/crm/contact/services/freshsales/index.ts b/packages/api/src/crm/contact/services/freshsales/index.ts index 8a52264ed..8f279a106 100644 --- a/packages/api/src/crm/contact/services/freshsales/index.ts +++ b/packages/api/src/crm/contact/services/freshsales/index.ts @@ -1,8 +1,50 @@ -import { Injectable } from '@nestjs/common'; +/* eslint-disable @typescript-eslint/no-unused-vars */ +import { HttpStatus, Injectable } from '@nestjs/common'; +import { CreateContactDto } from '../../dto/create-contact.dto'; +import { ApiResponse } from '../../types'; +import { FreshSales_ContactCreated } from './types'; +import axios, { AxiosResponse } from 'axios'; @Injectable() export class FreshSalesService { - async addContact() { - return; + async addContact( + createContactDto: CreateContactDto, + ): Promise> { + const mobile = createContactDto.phone_numbers[0]; + const url = 'https://domain.freshsales.io/api/contacts'; + const data = { + contact: { + first_name: createContactDto.first_name, + last_name: createContactDto.last_name, + mobile_number: mobile, + }, + }; + const token = process.env.FRESHSALES_API_KEY; + const headers = { + Authorization: `Token token=${token}`, + 'Content-Type': 'application/json', + }; + + try { + const response: AxiosResponse = + await axios.post(url, data, { headers: headers }); + console.log(response.data); + return { + data: response.data, + message: 'Contact created successfully.', + statusCode: HttpStatus.OK, + }; + } catch (error) { + console.error(error.response ? error.response.data : error.message); + const status: number = error.response + ? error.response.status + : HttpStatus.INTERNAL_SERVER_ERROR; + return { + data: null, + error: error.message, + message: 'Failed to create contact.', + statusCode: status, + }; + } } } diff --git a/packages/api/src/crm/contact/services/freshsales/types.ts b/packages/api/src/crm/contact/services/freshsales/types.ts new file mode 100644 index 000000000..c4c65ba5f --- /dev/null +++ b/packages/api/src/crm/contact/services/freshsales/types.ts @@ -0,0 +1,32 @@ +export interface FreshSales_ContactCreated { + id: number; + first_name: string; + last_name: string; + display_name: string; + avatar: string | null; + job_title: string | null; + city: string | null; + state: string | null; + zipcode: string | null; + country: string | null; + email: string | null; + time_zone: string | null; + work_number: string | null; + mobile_number: string; + address: string | null; + last_seen: string | null; + lead_score: number; + last_contacted: string | null; + open_deals_amount: string; + links: { + conversations: string; + activities: string; + }; + custom_field: Record; + updated_at: string; + keyword: string | null; + medium: string | null; + facebook: string | null; + twitter: string | null; + linkedin: string | null; +} diff --git a/packages/api/src/crm/contact/services/hubspot/index.ts b/packages/api/src/crm/contact/services/hubspot/index.ts index 7aecb32a4..1df1400a8 100644 --- a/packages/api/src/crm/contact/services/hubspot/index.ts +++ b/packages/api/src/crm/contact/services/hubspot/index.ts @@ -1,8 +1,12 @@ import { Injectable } from '@nestjs/common'; +import { ApiResponse, Hubspot_ContactCreated } from '../../types'; +import { CreateContactDto } from '../../dto/create-contact.dto'; @Injectable() export class HubspotService { - async addContact() { + async addContact( + createContactDto: CreateContactDto, + ): Promise> { return; } } diff --git a/packages/api/src/crm/contact/services/hubspot/types.ts b/packages/api/src/crm/contact/services/hubspot/types.ts new file mode 100644 index 000000000..b6dd1047f --- /dev/null +++ b/packages/api/src/crm/contact/services/hubspot/types.ts @@ -0,0 +1,3 @@ +export interface Hubspot_ContactCreated { + id: number; +} diff --git a/packages/api/src/crm/contact/services/pipedrive/index.ts b/packages/api/src/crm/contact/services/pipedrive/index.ts index 7aa52fa02..a75f11096 100644 --- a/packages/api/src/crm/contact/services/pipedrive/index.ts +++ b/packages/api/src/crm/contact/services/pipedrive/index.ts @@ -1,8 +1,13 @@ import { Injectable } from '@nestjs/common'; +import { Pipedrive_ContactCreated } from './types'; +import { ApiResponse } from '../../types'; +import { CreateContactDto } from '../../dto/create-contact.dto'; @Injectable() export class PipedriveService { - async addContact() { + async addContact( + createContactDto: CreateContactDto, + ): Promise> { return; } } diff --git a/packages/api/src/crm/contact/services/pipedrive/types.ts b/packages/api/src/crm/contact/services/pipedrive/types.ts new file mode 100644 index 000000000..ef647ae85 --- /dev/null +++ b/packages/api/src/crm/contact/services/pipedrive/types.ts @@ -0,0 +1,3 @@ +export interface Pipedrive_ContactCreated { + id: number; +} diff --git a/packages/api/src/crm/contact/services/zendesk/index.ts b/packages/api/src/crm/contact/services/zendesk/index.ts index af140aedc..f7dec5512 100644 --- a/packages/api/src/crm/contact/services/zendesk/index.ts +++ b/packages/api/src/crm/contact/services/zendesk/index.ts @@ -1,8 +1,12 @@ import { Injectable } from '@nestjs/common'; +import { ApiResponse, Zendesk_ContactCreated } from '../../types'; +import { CreateContactDto } from '../../dto/create-contact.dto'; @Injectable() export class ZendeskService { - async addContact() { + async addContact( + createContactDto: CreateContactDto, + ): Promise> { return; } } diff --git a/packages/api/src/crm/contact/services/zendesk/types.ts b/packages/api/src/crm/contact/services/zendesk/types.ts new file mode 100644 index 000000000..ba89552c9 --- /dev/null +++ b/packages/api/src/crm/contact/services/zendesk/types.ts @@ -0,0 +1,3 @@ +export interface Zendesk_ContactCreated { + id: number; +} diff --git a/packages/api/src/crm/contact/services/zoho/index.ts b/packages/api/src/crm/contact/services/zoho/index.ts index 86681fcc4..a199a4e4b 100644 --- a/packages/api/src/crm/contact/services/zoho/index.ts +++ b/packages/api/src/crm/contact/services/zoho/index.ts @@ -1,8 +1,13 @@ import { Injectable } from '@nestjs/common'; +import { Zoho_ContactCreated } from './types'; +import { ApiResponse } from '../../types'; +import { CreateContactDto } from '../../dto/create-contact.dto'; @Injectable() export class ZohoService { - async addContact() { + async addContact( + createContactDto: CreateContactDto, + ): Promise> { return; } } diff --git a/packages/api/src/crm/contact/services/zoho/types.ts b/packages/api/src/crm/contact/services/zoho/types.ts new file mode 100644 index 000000000..f01cd96ff --- /dev/null +++ b/packages/api/src/crm/contact/services/zoho/types.ts @@ -0,0 +1,3 @@ +export interface Zoho_ContactCreated { + id: number; +} diff --git a/packages/api/src/crm/contact/types/index.ts b/packages/api/src/crm/contact/types/index.ts new file mode 100644 index 000000000..92badbdac --- /dev/null +++ b/packages/api/src/crm/contact/types/index.ts @@ -0,0 +1,27 @@ +export * from './../services/freshsales/types'; +export * from './../services/hubspot/types'; +export * from './../services/zoho/types'; +export * from './../services/zendesk/types'; +export * from './../services/pipedrive/types'; + +export class ApiResponse { + data: T; + message?: string; + error?: string; + statusCode: number; +} + +export type Email = { + email_address: string; + email_address_type: string; +}; + +export type Phone = { + phone_number: string; + phone_type: string; +}; + +export type NormalizedContactInfo = { + normalizedEmails: Email[]; + normalizedPhones: Phone[]; +}; diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 46f7c5be2..4ce74a53f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -93,6 +93,9 @@ importers: rxjs: specifier: ^7.8.1 version: 7.8.1 + uuid: + specifier: ^9.0.1 + version: 9.0.1 devDependencies: '@nestjs/cli': specifier: ^10.0.0 @@ -12557,8 +12560,13 @@ packages: resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} engines: {node: '>= 0.4.0'} +<<<<<<< HEAD + /uuid@9.0.1: + resolution: {integrity: sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==} +======= /uuid@8.3.2: resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} +>>>>>>> main hasBin: true dev: false