From 97ff00c349a9a23069a320c2d7c4aec37c564cb9 Mon Sep 17 00:00:00 2001 From: Vins Date: Wed, 13 Mar 2024 10:54:25 +0100 Subject: [PATCH] Finish --- src/app/api/idnot/UserController.ts | 6 ++- .../migration.sql | 16 ++++++++ src/common/databases/schema.prisma | 9 +++++ .../repositories/UserWhitelistRepository.ts | 39 +++++++++++++++++++ .../UserWhitelistService/WhitelistService.ts | 14 +++++++ 5 files changed, 82 insertions(+), 2 deletions(-) create mode 100644 src/common/databases/migrations/20240313090933_whitelist_by_idnot_id/migration.sql create mode 100644 src/common/repositories/UserWhitelistRepository.ts create mode 100644 src/services/common/UserWhitelistService/WhitelistService.ts diff --git a/src/app/api/idnot/UserController.ts b/src/app/api/idnot/UserController.ts index 0521a747..01850231 100644 --- a/src/app/api/idnot/UserController.ts +++ b/src/app/api/idnot/UserController.ts @@ -38,7 +38,7 @@ export default class UserController extends ApiController { const user = await this.idNotService.getOrCreateUser(idNotToken); if(!user) { - this.httpUnauthorized(response, "Email not found"); + this.httpUnauthorized(response, "User not found"); return; } @@ -62,8 +62,10 @@ export default class UserController extends ApiController { } //Check if user is whitelisted + const isWhitelisted = await this.whitelistService.getByEmail(userHydrated.contact!.email); - const isWhitelisted = await this.whitelistService.getByEmail(userHydrated.contact!.email); + //When we'll switch to idNotId whitelisting + // const isWhitelisted = await this.userWhitelistService.getByIdNotId(user.idNot); //If not whitelisted, return 409 Not whitelisted if (!isWhitelisted || isWhitelisted.length === 0) { diff --git a/src/common/databases/migrations/20240313090933_whitelist_by_idnot_id/migration.sql b/src/common/databases/migrations/20240313090933_whitelist_by_idnot_id/migration.sql new file mode 100644 index 00000000..5581a06e --- /dev/null +++ b/src/common/databases/migrations/20240313090933_whitelist_by_idnot_id/migration.sql @@ -0,0 +1,16 @@ +-- CreateTable +CREATE TABLE "user_whitelist" ( + "uid" TEXT NOT NULL, + "idNot" VARCHAR(255) NOT NULL, + "active" BOOLEAN NOT NULL DEFAULT true, + "created_at" TIMESTAMP(3) DEFAULT CURRENT_TIMESTAMP, + "updated_at" TIMESTAMP(3), + + CONSTRAINT "user_whitelist_pkey" PRIMARY KEY ("uid") +); + +-- CreateIndex +CREATE UNIQUE INDEX "user_whitelist_uid_key" ON "user_whitelist"("uid"); + +-- CreateIndex +CREATE UNIQUE INDEX "user_whitelist_idNot_key" ON "user_whitelist"("idNot"); diff --git a/src/common/databases/schema.prisma b/src/common/databases/schema.prisma index 53858e86..4aad566c 100644 --- a/src/common/databases/schema.prisma +++ b/src/common/databases/schema.prisma @@ -81,6 +81,15 @@ model Whitelist { @@map("whitelist") } +model UserWhitelist { + uid String @id @unique @default(uuid()) + idNot String @unique @db.VarChar(255) + active Boolean @default(true) + created_at DateTime? @default(now()) + updated_at DateTime? @updatedAt + @@map("user_whitelist") +} + model Offices { uid String @id @unique @default(uuid()) idNot String @unique @db.VarChar(255) diff --git a/src/common/repositories/UserWhitelistRepository.ts b/src/common/repositories/UserWhitelistRepository.ts new file mode 100644 index 00000000..eae35819 --- /dev/null +++ b/src/common/repositories/UserWhitelistRepository.ts @@ -0,0 +1,39 @@ +import Database from "@Common/databases/database"; +import BaseRepository from "@Repositories/BaseRepository"; +import { Service } from "typedi"; +import { Prisma } from "prisma/prisma-client"; + +@Service() +export default class UserWhitelistRepository extends BaseRepository { + constructor(private database: Database) { + super(); + } + protected get model() { + return this.database.getClient().userWhitelist; + } + protected get instanceDb() { + return this.database.getClient(); + } + + /** + * @description : Find many whitelist + */ + public async findMany(query: Prisma.UserWhitelistFindManyArgs) { + query.take = Math.min(query.take || this.defaultFetchRows, this.maxFetchRows); + return this.model.findMany(query); + } + + /** + * @description : find unique by email + */ + public async findOneByIdNotId(idNotId: string) { + return this.model.findMany({ + where: { + idNot: idNotId, + }, + }); + } + + + +} diff --git a/src/services/common/UserWhitelistService/WhitelistService.ts b/src/services/common/UserWhitelistService/WhitelistService.ts new file mode 100644 index 00000000..dd96268f --- /dev/null +++ b/src/services/common/UserWhitelistService/WhitelistService.ts @@ -0,0 +1,14 @@ +import UserWhitelistRepository from "@Repositories/UserWhitelistRepository"; +import BaseService from "@Services/BaseService"; +import { Service } from "typedi"; + +@Service() +export default class UserWhitelistService extends BaseService { + constructor(private userWhitelistRepository: UserWhitelistRepository) { + super(); + } + + public async getByIdNotId(idNotId: string): Promise { + return this.userWhitelistRepository.findOneByIdNotId(idNotId); + } +}