From 4300d54d10fc72436e32da64c45f2efaf9a768d7 Mon Sep 17 00:00:00 2001
From: Martin Korec <xkorec2@fi.muni.cz>
Date: Fri, 17 Jun 2022 01:26:28 +0200
Subject: [PATCH] feat: implemented directors CRUD

---
 .../directors/directors.controller.spec.ts    | 20 +++++++++
 .../src/api/directors/directors.controller.ts | 45 +++++++++++++++++++
 backend/src/api/directors/directors.module.ts | 10 +++++
 .../api/directors/directors.service.spec.ts   | 18 ++++++++
 .../src/api/directors/directors.service.ts    | 35 +++++++++++++++
 .../api/directors/dto/create-director.dto.ts  |  5 +++
 .../api/directors/dto/update-director.dto.ts  |  4 ++
 .../api/directors/entities/director.entity.ts | 11 +++++
 8 files changed, 148 insertions(+)
 create mode 100644 backend/src/api/directors/directors.controller.spec.ts
 create mode 100644 backend/src/api/directors/directors.controller.ts
 create mode 100644 backend/src/api/directors/directors.module.ts
 create mode 100644 backend/src/api/directors/directors.service.spec.ts
 create mode 100644 backend/src/api/directors/directors.service.ts
 create mode 100644 backend/src/api/directors/dto/create-director.dto.ts
 create mode 100644 backend/src/api/directors/dto/update-director.dto.ts
 create mode 100644 backend/src/api/directors/entities/director.entity.ts

diff --git a/backend/src/api/directors/directors.controller.spec.ts b/backend/src/api/directors/directors.controller.spec.ts
new file mode 100644
index 0000000..b8d105a
--- /dev/null
+++ b/backend/src/api/directors/directors.controller.spec.ts
@@ -0,0 +1,20 @@
+import { Test, TestingModule } from '@nestjs/testing';
+import { DirectorsController } from './directors.controller';
+import { DirectorsService } from './directors.service';
+
+describe('DirectorsController', () => {
+  let controller: DirectorsController;
+
+  beforeEach(async () => {
+    const module: TestingModule = await Test.createTestingModule({
+      controllers: [DirectorsController],
+      providers: [DirectorsService],
+    }).compile();
+
+    controller = module.get<DirectorsController>(DirectorsController);
+  });
+
+  it('should be defined', () => {
+    expect(controller).toBeDefined();
+  });
+});
diff --git a/backend/src/api/directors/directors.controller.ts b/backend/src/api/directors/directors.controller.ts
new file mode 100644
index 0000000..b95aac4
--- /dev/null
+++ b/backend/src/api/directors/directors.controller.ts
@@ -0,0 +1,45 @@
+import {
+  Controller,
+  Get,
+  Post,
+  Body,
+  Patch,
+  Param,
+  Delete,
+} from '@nestjs/common';
+import { DirectorsService } from './directors.service';
+import { CreateDirectorDto } from './dto/create-director.dto';
+import { UpdateDirectorDto } from './dto/update-director.dto';
+
+@Controller('director')
+export class DirectorsController {
+  constructor(private readonly directorsService: DirectorsService) {}
+
+  @Post()
+  async create(@Body() createDirectorDto: CreateDirectorDto) {
+    return await this.directorsService.create(createDirectorDto);
+  }
+
+  @Get()
+  async findAll() {
+    return await this.directorsService.findAll();
+  }
+
+  @Get(':id')
+  async findOne(@Param('id') id: string) {
+    return await this.directorsService.findOne(id);
+  }
+
+  @Patch(':id')
+  async update(
+  @Param('id') id: string,
+    @Body() updateDirectorDto: UpdateDirectorDto,
+  ) {
+    return await this.directorsService.update(id, updateDirectorDto);
+  }
+
+  @Delete(':id')
+  async remove(@Param('id') id: string) {
+    return await this.directorsService.remove(id);
+  }
+}
diff --git a/backend/src/api/directors/directors.module.ts b/backend/src/api/directors/directors.module.ts
new file mode 100644
index 0000000..bed9e1d
--- /dev/null
+++ b/backend/src/api/directors/directors.module.ts
@@ -0,0 +1,10 @@
+import { Module } from '@nestjs/common';
+import { DirectorsService } from './directors.service';
+import { DirectorsController } from './directors.controller';
+import { PrismaService } from '../../prisma.service';
+
+@Module({
+  controllers: [DirectorsController],
+  providers: [DirectorsService, PrismaService],
+})
+export class DirectorsModule {}
diff --git a/backend/src/api/directors/directors.service.spec.ts b/backend/src/api/directors/directors.service.spec.ts
new file mode 100644
index 0000000..06fc8bf
--- /dev/null
+++ b/backend/src/api/directors/directors.service.spec.ts
@@ -0,0 +1,18 @@
+import { Test, TestingModule } from '@nestjs/testing';
+import { DirectorsService } from './directors.service';
+
+describe('DirectorsService', () => {
+  let service: DirectorsService;
+
+  beforeEach(async () => {
+    const module: TestingModule = await Test.createTestingModule({
+      providers: [DirectorsService],
+    }).compile();
+
+    service = module.get<DirectorsService>(DirectorsService);
+  });
+
+  it('should be defined', () => {
+    expect(service).toBeDefined();
+  });
+});
diff --git a/backend/src/api/directors/directors.service.ts b/backend/src/api/directors/directors.service.ts
new file mode 100644
index 0000000..5def117
--- /dev/null
+++ b/backend/src/api/directors/directors.service.ts
@@ -0,0 +1,35 @@
+import { Injectable } from '@nestjs/common';
+import { CreateDirectorDto } from './dto/create-director.dto';
+import { UpdateDirectorDto } from './dto/update-director.dto';
+import { PrismaService } from '../../prisma.service';
+
+@Injectable()
+export class DirectorsService {
+  constructor(private prisma: PrismaService) {}
+
+  create(createDirectorDto: CreateDirectorDto) {
+    return this.prisma.director.create({
+      data: createDirectorDto,
+    });
+  }
+
+  findAll() {
+    return this.prisma.director.findMany();
+  }
+
+  findOne(id: string) {
+    return this.prisma.director.findUnique({
+      where: {
+        id,
+      },
+    });
+  }
+
+  update(id: string, updateDirectorDto: UpdateDirectorDto) {
+    return `This action updates a #${id} director`;
+  }
+
+  remove(id: string) {
+    return `This action removes a #${id} director`;
+  }
+}
diff --git a/backend/src/api/directors/dto/create-director.dto.ts b/backend/src/api/directors/dto/create-director.dto.ts
new file mode 100644
index 0000000..f1c2bc8
--- /dev/null
+++ b/backend/src/api/directors/dto/create-director.dto.ts
@@ -0,0 +1,5 @@
+export class CreateDirectorDto {
+  readonly name: string;
+  readonly surname: string;
+  readonly birthDate?: string;
+}
diff --git a/backend/src/api/directors/dto/update-director.dto.ts b/backend/src/api/directors/dto/update-director.dto.ts
new file mode 100644
index 0000000..48d1b49
--- /dev/null
+++ b/backend/src/api/directors/dto/update-director.dto.ts
@@ -0,0 +1,4 @@
+import { PartialType } from '@nestjs/mapped-types';
+import { CreateDirectorDto } from './create-director.dto';
+
+export class UpdateDirectorDto extends PartialType(CreateDirectorDto) {}
diff --git a/backend/src/api/directors/entities/director.entity.ts b/backend/src/api/directors/entities/director.entity.ts
new file mode 100644
index 0000000..c030642
--- /dev/null
+++ b/backend/src/api/directors/entities/director.entity.ts
@@ -0,0 +1,11 @@
+import { Director } from '@prisma/client';
+
+export class DirectorEntity implements Director {
+  id: string;
+  createdAt: Date;
+  updatedAt: Date;
+  deletedAt: Date;
+  name: string;
+  surname: string;
+  birthDate: Date;
+}
-- 
GitLab