From b7f765f488c637e713489f31fa554f271810267d Mon Sep 17 00:00:00 2001 From: Kevsl Date: Fri, 7 Jun 2024 16:18:29 +0200 Subject: [PATCH] added throttler and crypto quantity --- package-lock.json | 2 +- package.json | 2 +- prisma/migrations/20240607141740_/migration.sql | 2 ++ prisma/schema.prisma | 1 + src/app.module.ts | 7 +++++++ src/crypto/crypto.service.ts | 5 ++++- src/crypto/dto/crypto.dto.ts | 8 ++++++++ 7 files changed, 24 insertions(+), 3 deletions(-) create mode 100644 prisma/migrations/20240607141740_/migration.sql diff --git a/package-lock.json b/package-lock.json index 9a02fa5..da2d475 100644 --- a/package-lock.json +++ b/package-lock.json @@ -17,7 +17,7 @@ "@nestjs/passport": "^10.0.3", "@nestjs/platform-express": "^10.0.0", "@nestjs/swagger": "^7.1.17", - "@nestjs/throttler": "^5.1.1", + "@nestjs/throttler": "^5.1.2", "@prisma/client": "^5.8.1", "@prisma/studio": "^0.497.0", "@types/nodemailer": "^6.4.14", diff --git a/package.json b/package.json index 5988d3a..034b944 100644 --- a/package.json +++ b/package.json @@ -28,7 +28,7 @@ "@nestjs/passport": "^10.0.3", "@nestjs/platform-express": "^10.0.0", "@nestjs/swagger": "^7.1.17", - "@nestjs/throttler": "^5.1.1", + "@nestjs/throttler": "^5.1.2", "@prisma/client": "^5.8.1", "@prisma/studio": "^0.497.0", "@types/nodemailer": "^6.4.14", diff --git a/prisma/migrations/20240607141740_/migration.sql b/prisma/migrations/20240607141740_/migration.sql new file mode 100644 index 0000000..7af4734 --- /dev/null +++ b/prisma/migrations/20240607141740_/migration.sql @@ -0,0 +1,2 @@ +-- AlterTable +ALTER TABLE "Crypto" ADD COLUMN "quantity" DOUBLE PRECISION NOT NULL DEFAULT 1000; diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 6bc640a..024729b 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -14,6 +14,7 @@ model Crypto { name String @unique value Float image String + quantity Float @default(1000) created_at DateTime @default(now()) updated_at DateTime @updatedAt @default(now()) UserHasCrypto UserHasCrypto[] diff --git a/src/app.module.ts b/src/app.module.ts index 792c88a..211d85f 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -10,6 +10,7 @@ import { CryptoModule } from './crypto/crypto.module'; import { TradeModule } from './trade/trade.module'; import { OfferModule } from './offer/offer.module'; import { UserModule } from './user/user.module'; +import { ThrottlerModule } from '@nestjs/throttler'; @Module({ imports: [ @@ -24,6 +25,12 @@ import { UserModule } from './user/user.module'; TradeModule, OfferModule, UserModule, + ThrottlerModule.forRoot([ + { + ttl: 60000, + limit: 40, + }, + ]), ], controllers: [AppController], providers: [AppService], diff --git a/src/crypto/crypto.service.ts b/src/crypto/crypto.service.ts index 293b6f6..8d0242d 100644 --- a/src/crypto/crypto.service.ts +++ b/src/crypto/crypto.service.ts @@ -57,6 +57,7 @@ export class CryptoService { name: dto.name, image: dto.image, value: dto.value, + quantity: dto.quantity, }, }); @@ -75,7 +76,9 @@ export class CryptoService { id: userId, }, }); - + if (crypto.quantity < dto.amount) { + throw new ForbiddenException('No more tokens available'); + } const necessaryAmount = crypto.value * dto.amount; console.log(necessaryAmount, user.dollarAvailables); diff --git a/src/crypto/dto/crypto.dto.ts b/src/crypto/dto/crypto.dto.ts index 2e33813..9bbc55a 100644 --- a/src/crypto/dto/crypto.dto.ts +++ b/src/crypto/dto/crypto.dto.ts @@ -17,6 +17,14 @@ export class CryptoDto { @IsNumber() value: number; + @ApiProperty({ + type: Number, + description: 'Quantity of tokens available on the platform', + example: 100, + }) + @IsNumber() + quantity: number; + @ApiProperty({ type: String, description: 'Image for the cryptocurrency in ',