Skip to content

Commit fbf116f

Browse files
authored
feat: added partners endpoint (#106)
1 parent a88475b commit fbf116f

File tree

10 files changed

+139
-1
lines changed

10 files changed

+139
-1
lines changed
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
-- CreateTable
2+
CREATE TABLE "partners" (
3+
"id" TEXT NOT NULL,
4+
"name" TEXT NOT NULL,
5+
"link" TEXT NOT NULL,
6+
"iconName" TEXT NOT NULL DEFAULT 'Handshake',
7+
"created_at" VARCHAR(32) NOT NULL,
8+
"updated_at" VARCHAR(32),
9+
10+
CONSTRAINT "partners_pkey" PRIMARY KEY ("id")
11+
);
12+
13+
-- CreateIndex
14+
CREATE UNIQUE INDEX "partners_name_key" ON "partners"("name");
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
/*
2+
Warnings:
3+
4+
- You are about to drop the column `iconName` on the `partners` table. All the data in the column will be lost.
5+
6+
*/
7+
-- AlterTable
8+
ALTER TABLE "partners" DROP COLUMN "iconName";

prisma/schema.prisma

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,3 +123,13 @@ model ShelterManagers {
123123
@@id([shelterId, userId])
124124
@@map("shelter_managers")
125125
}
126+
127+
model Partners {
128+
id String @id @default(uuid())
129+
name String @unique
130+
link String
131+
createdAt String @map("created_at") @db.VarChar(32)
132+
updatedAt String? @map("updated_at") @db.VarChar(32)
133+
134+
@@map("partners")
135+
}

src/app.module.ts

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import { SessionsModule } from './sessions/sessions.module';
1111
import { SupplyCategoriesModule } from './supply-categories/supply-categories.module';
1212
import { ShelterManagersModule } from './shelter-managers/shelter-managers.module';
1313
import { ShelterSupplyModule } from './shelter-supply/shelter-supply.module';
14+
import { PartnersModule } from './partners/partners.module';
1415

1516
@Module({
1617
imports: [
@@ -22,6 +23,7 @@ import { ShelterSupplyModule } from './shelter-supply/shelter-supply.module';
2223
SupplyCategoriesModule,
2324
ShelterManagersModule,
2425
ShelterSupplyModule,
26+
PartnersModule,
2527
],
2628
controllers: [],
2729
providers: [
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
import { Test, TestingModule } from '@nestjs/testing';
2+
import { PartnersController } from './partners.controller';
3+
import { PartnersService } from './partners.service';
4+
import { PrismaService } from '../prisma/prisma.service';
5+
6+
describe('PartnersController', () => {
7+
let controller: PartnersController;
8+
9+
beforeEach(async () => {
10+
const module: TestingModule = await Test.createTestingModule({
11+
controllers: [PartnersController],
12+
providers: [PartnersService],
13+
})
14+
.useMocker((token) => {
15+
if (token === PrismaService) {
16+
return {
17+
supplyCategory: { findMany: jest.fn().mockResolvedValue(0) },
18+
};
19+
}
20+
})
21+
.compile();
22+
23+
controller = module.get<PartnersController>(PartnersController);
24+
});
25+
26+
it('should be defined', () => {
27+
expect(controller).toBeDefined();
28+
});
29+
});

src/partners/partners.controller.ts

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
import { Controller, Get, HttpException, Logger } from '@nestjs/common';
2+
import { PartnersService } from './partners.service';
3+
import { ServerResponse } from '../utils';
4+
5+
@Controller('partners')
6+
export class PartnersController {
7+
private logger = new Logger(PartnersController.name);
8+
9+
constructor(private readonly partnersService: PartnersService) {}
10+
11+
@Get('')
12+
async index() {
13+
try {
14+
const data = await this.partnersService.index();
15+
return new ServerResponse(200, 'Successfully get partners', data);
16+
} catch (err: any) {
17+
this.logger.error(`Failed to get partners: ${err}`);
18+
throw new HttpException(err?.code ?? err?.name ?? `${err}`, 400);
19+
}
20+
}
21+
}

src/partners/partners.module.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import { Module } from '@nestjs/common';
2+
3+
import { PartnersService } from './partners.service';
4+
import { PartnersController } from './partners.controller';
5+
import { PrismaModule } from '../prisma/prisma.module';
6+
7+
@Module({
8+
imports: [PrismaModule],
9+
providers: [PartnersService],
10+
controllers: [PartnersController],
11+
})
12+
export class PartnersModule {}

src/partners/partners.service.spec.ts

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
import { Test, TestingModule } from '@nestjs/testing';
2+
3+
import { PartnersService } from './partners.service';
4+
import { PrismaService } from '../prisma/prisma.service';
5+
6+
describe('PartnersService', () => {
7+
let service: PartnersService;
8+
9+
beforeEach(async () => {
10+
const module: TestingModule = await Test.createTestingModule({
11+
providers: [PartnersService],
12+
})
13+
.useMocker((token) => {
14+
if (token === PrismaService) {
15+
return {
16+
supplyCategory: { findMany: jest.fn().mockResolvedValue(0) },
17+
};
18+
}
19+
})
20+
.compile();
21+
22+
service = module.get<PartnersService>(PartnersService);
23+
});
24+
25+
it('should be defined', () => {
26+
expect(service).toBeDefined();
27+
});
28+
});

src/partners/partners.service.ts

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
import { Injectable } from '@nestjs/common';
2+
import { ApiTags } from '@nestjs/swagger';
3+
4+
import { PrismaService } from '../prisma/prisma.service';
5+
6+
@ApiTags('Parceiros')
7+
@Injectable()
8+
export class PartnersService {
9+
constructor(private readonly prismaService: PrismaService) {}
10+
11+
async index() {
12+
return await this.prismaService.partners.findMany({});
13+
}
14+
}

src/shelter/shelter.service.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { Injectable, OnModuleInit } from '@nestjs/common';
22
import { Prisma } from '@prisma/client';
33
import { DefaultArgs } from '@prisma/client/runtime/library';
4+
import { subDays } from 'date-fns';
45
import * as qs from 'qs';
56
import { z } from 'zod';
67

@@ -14,7 +15,6 @@ import {
1415
FullUpdateShelterSchema,
1516
UpdateShelterSchema,
1617
} from './types/types';
17-
import { subDays } from 'date-fns';
1818

1919
@Injectable()
2020
export class ShelterService implements OnModuleInit {

0 commit comments

Comments
 (0)