From fbf116f4157fce102bfbfc5616695a333cfe5dc4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Geraldo=20D=2E=20F?= Date: Tue, 14 May 2024 22:04:02 -0300 Subject: [PATCH] feat: added partners endpoint (#106) --- .../migrations/20240514211840_/migration.sql | 14 +++++++++ .../migrations/20240515003750_/migration.sql | 8 +++++ prisma/schema.prisma | 10 +++++++ src/app.module.ts | 2 ++ src/partners/partners.controller.spec.ts | 29 +++++++++++++++++++ src/partners/partners.controller.ts | 21 ++++++++++++++ src/partners/partners.module.ts | 12 ++++++++ src/partners/partners.service.spec.ts | 28 ++++++++++++++++++ src/partners/partners.service.ts | 14 +++++++++ src/shelter/shelter.service.ts | 2 +- 10 files changed, 139 insertions(+), 1 deletion(-) create mode 100644 prisma/migrations/20240514211840_/migration.sql create mode 100644 prisma/migrations/20240515003750_/migration.sql create mode 100644 src/partners/partners.controller.spec.ts create mode 100644 src/partners/partners.controller.ts create mode 100644 src/partners/partners.module.ts create mode 100644 src/partners/partners.service.spec.ts create mode 100644 src/partners/partners.service.ts diff --git a/prisma/migrations/20240514211840_/migration.sql b/prisma/migrations/20240514211840_/migration.sql new file mode 100644 index 00000000..d0e1f1e2 --- /dev/null +++ b/prisma/migrations/20240514211840_/migration.sql @@ -0,0 +1,14 @@ +-- CreateTable +CREATE TABLE "partners" ( + "id" TEXT NOT NULL, + "name" TEXT NOT NULL, + "link" TEXT NOT NULL, + "iconName" TEXT NOT NULL DEFAULT 'Handshake', + "created_at" VARCHAR(32) NOT NULL, + "updated_at" VARCHAR(32), + + CONSTRAINT "partners_pkey" PRIMARY KEY ("id") +); + +-- CreateIndex +CREATE UNIQUE INDEX "partners_name_key" ON "partners"("name"); diff --git a/prisma/migrations/20240515003750_/migration.sql b/prisma/migrations/20240515003750_/migration.sql new file mode 100644 index 00000000..5e1e2a63 --- /dev/null +++ b/prisma/migrations/20240515003750_/migration.sql @@ -0,0 +1,8 @@ +/* + Warnings: + + - You are about to drop the column `iconName` on the `partners` table. All the data in the column will be lost. + +*/ +-- AlterTable +ALTER TABLE "partners" DROP COLUMN "iconName"; diff --git a/prisma/schema.prisma b/prisma/schema.prisma index b853d2b4..a43b535a 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -123,3 +123,13 @@ model ShelterManagers { @@id([shelterId, userId]) @@map("shelter_managers") } + +model Partners { + id String @id @default(uuid()) + name String @unique + link String + createdAt String @map("created_at") @db.VarChar(32) + updatedAt String? @map("updated_at") @db.VarChar(32) + + @@map("partners") +} diff --git a/src/app.module.ts b/src/app.module.ts index 8b528767..c08ea99f 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -11,6 +11,7 @@ import { SessionsModule } from './sessions/sessions.module'; import { SupplyCategoriesModule } from './supply-categories/supply-categories.module'; import { ShelterManagersModule } from './shelter-managers/shelter-managers.module'; import { ShelterSupplyModule } from './shelter-supply/shelter-supply.module'; +import { PartnersModule } from './partners/partners.module'; @Module({ imports: [ @@ -22,6 +23,7 @@ import { ShelterSupplyModule } from './shelter-supply/shelter-supply.module'; SupplyCategoriesModule, ShelterManagersModule, ShelterSupplyModule, + PartnersModule, ], controllers: [], providers: [ diff --git a/src/partners/partners.controller.spec.ts b/src/partners/partners.controller.spec.ts new file mode 100644 index 00000000..3d7226e8 --- /dev/null +++ b/src/partners/partners.controller.spec.ts @@ -0,0 +1,29 @@ +import { Test, TestingModule } from '@nestjs/testing'; +import { PartnersController } from './partners.controller'; +import { PartnersService } from './partners.service'; +import { PrismaService } from '../prisma/prisma.service'; + +describe('PartnersController', () => { + let controller: PartnersController; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + controllers: [PartnersController], + providers: [PartnersService], + }) + .useMocker((token) => { + if (token === PrismaService) { + return { + supplyCategory: { findMany: jest.fn().mockResolvedValue(0) }, + }; + } + }) + .compile(); + + controller = module.get(PartnersController); + }); + + it('should be defined', () => { + expect(controller).toBeDefined(); + }); +}); diff --git a/src/partners/partners.controller.ts b/src/partners/partners.controller.ts new file mode 100644 index 00000000..f1829171 --- /dev/null +++ b/src/partners/partners.controller.ts @@ -0,0 +1,21 @@ +import { Controller, Get, HttpException, Logger } from '@nestjs/common'; +import { PartnersService } from './partners.service'; +import { ServerResponse } from '../utils'; + +@Controller('partners') +export class PartnersController { + private logger = new Logger(PartnersController.name); + + constructor(private readonly partnersService: PartnersService) {} + + @Get('') + async index() { + try { + const data = await this.partnersService.index(); + return new ServerResponse(200, 'Successfully get partners', data); + } catch (err: any) { + this.logger.error(`Failed to get partners: ${err}`); + throw new HttpException(err?.code ?? err?.name ?? `${err}`, 400); + } + } +} diff --git a/src/partners/partners.module.ts b/src/partners/partners.module.ts new file mode 100644 index 00000000..04ea8c41 --- /dev/null +++ b/src/partners/partners.module.ts @@ -0,0 +1,12 @@ +import { Module } from '@nestjs/common'; + +import { PartnersService } from './partners.service'; +import { PartnersController } from './partners.controller'; +import { PrismaModule } from '../prisma/prisma.module'; + +@Module({ + imports: [PrismaModule], + providers: [PartnersService], + controllers: [PartnersController], +}) +export class PartnersModule {} diff --git a/src/partners/partners.service.spec.ts b/src/partners/partners.service.spec.ts new file mode 100644 index 00000000..f34d51e9 --- /dev/null +++ b/src/partners/partners.service.spec.ts @@ -0,0 +1,28 @@ +import { Test, TestingModule } from '@nestjs/testing'; + +import { PartnersService } from './partners.service'; +import { PrismaService } from '../prisma/prisma.service'; + +describe('PartnersService', () => { + let service: PartnersService; + + beforeEach(async () => { + const module: TestingModule = await Test.createTestingModule({ + providers: [PartnersService], + }) + .useMocker((token) => { + if (token === PrismaService) { + return { + supplyCategory: { findMany: jest.fn().mockResolvedValue(0) }, + }; + } + }) + .compile(); + + service = module.get(PartnersService); + }); + + it('should be defined', () => { + expect(service).toBeDefined(); + }); +}); diff --git a/src/partners/partners.service.ts b/src/partners/partners.service.ts new file mode 100644 index 00000000..6b3f6c8a --- /dev/null +++ b/src/partners/partners.service.ts @@ -0,0 +1,14 @@ +import { Injectable } from '@nestjs/common'; +import { ApiTags } from '@nestjs/swagger'; + +import { PrismaService } from '../prisma/prisma.service'; + +@ApiTags('Parceiros') +@Injectable() +export class PartnersService { + constructor(private readonly prismaService: PrismaService) {} + + async index() { + return await this.prismaService.partners.findMany({}); + } +} diff --git a/src/shelter/shelter.service.ts b/src/shelter/shelter.service.ts index 190aedaa..35bfbc11 100644 --- a/src/shelter/shelter.service.ts +++ b/src/shelter/shelter.service.ts @@ -1,6 +1,7 @@ import { Injectable, OnModuleInit } from '@nestjs/common'; import { Prisma } from '@prisma/client'; import { DefaultArgs } from '@prisma/client/runtime/library'; +import { subDays } from 'date-fns'; import * as qs from 'qs'; import { z } from 'zod'; @@ -14,7 +15,6 @@ import { FullUpdateShelterSchema, UpdateShelterSchema, } from './types/types'; -import { subDays } from 'date-fns'; @Injectable() export class ShelterService implements OnModuleInit {