From 714e59dfe734cca2780c5dd401545378f22c5ad6 Mon Sep 17 00:00:00 2001
From: Martin Korec <xkorec2@fi.muni.cz>
Date: Sat, 18 Jun 2022 01:52:10 +0200
Subject: [PATCH] fix: add create and update validation for directors

---
 .../src/api/directors/directors.service.ts    | 15 ++++++++++----
 .../api/directors/dto/create-director.dto.ts  | 20 ++++++++++++++++++-
 2 files changed, 30 insertions(+), 5 deletions(-)

diff --git a/backend/src/api/directors/directors.service.ts b/backend/src/api/directors/directors.service.ts
index 8a5374d..417b72b 100644
--- a/backend/src/api/directors/directors.service.ts
+++ b/backend/src/api/directors/directors.service.ts
@@ -2,14 +2,17 @@ import { Injectable } from '@nestjs/common';
 import { CreateDirectorDto } from './dto/create-director.dto';
 import { UpdateDirectorDto } from './dto/update-director.dto';
 import { PrismaService } from '../../prisma.service';
+import { plainToClass } from 'class-transformer';
+import { DirectorEntity } from './entities/director.entity';
 
 @Injectable()
 export class DirectorsService {
   constructor(private prisma: PrismaService) {}
 
   async create(createDirectorDto: CreateDirectorDto) {
+    const director = plainToClass(DirectorEntity, createDirectorDto);
     return await this.prisma.director.create({
-      data: createDirectorDto,
+      data: director,
     });
   }
 
@@ -26,12 +29,16 @@ export class DirectorsService {
   }
 
   async update(id: string, updateDirectorDto: UpdateDirectorDto) {
+    const updatedDirector = {
+      ...await this.findOne(id),
+      ...plainToClass(DirectorEntity, updateDirectorDto),
+    };
     return await this.prisma.director.update({
       where: {
         id,
       },
       data: {
-        ...updateDirectorDto,
+        ...updatedDirector,
       },
     });
   }
@@ -43,8 +50,8 @@ export class DirectorsService {
         deletedAt: null,
       },
       select: {
-        id: true
-      }
+        id: true,
+      },
     });
 
     if (directorMovie === undefined) {
diff --git a/backend/src/api/directors/dto/create-director.dto.ts b/backend/src/api/directors/dto/create-director.dto.ts
index f1c2bc8..35a268c 100644
--- a/backend/src/api/directors/dto/create-director.dto.ts
+++ b/backend/src/api/directors/dto/create-director.dto.ts
@@ -1,5 +1,23 @@
+import {
+  IsDate,
+  IsNotEmpty,
+  IsOptional,
+  IsString,
+  MaxDate,
+} from 'class-validator';
+
 export class CreateDirectorDto {
+  @IsNotEmpty()
+  @IsString()
   readonly name: string;
+
+  @IsNotEmpty()
+  @IsString()
   readonly surname: string;
-  readonly birthDate?: string;
+
+  @IsNotEmpty()
+  @IsDate()
+  @IsOptional()
+  @MaxDate(new Date())
+  readonly birthDate?: Date;
 }
-- 
GitLab