Passed
Pull Request — master (#188)
by Mathieu
02:03
created

server/src/Application/Project/Command/UpdateProjectCommandHandler.ts   A

Complexity

Total Complexity 4
Complexity/F 4

Size

Lines of Code 45
Function Count 1

Duplication

Duplicated Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 38
dl 0
loc 45
rs 10
c 0
b 0
f 0
wmc 4
mnd 3
bc 3
fnc 1
bpm 3
cpm 4
noi 0

1 Function

Rating   Name   Duplication   Size   Complexity  
A UpdateProjectCommandHandler.execute 0 23 4
1
import { CommandHandler } from '@nestjs/cqrs';
2
import { Inject } from '@nestjs/common';
3
import { UpdateProjectCommand } from './UpdateProjectCommand';
4
import { IProjectRepository } from 'src/Domain/Project/Repository/IProjectRepository';
5
import { ProjectNotFoundException } from 'src/Domain/Project/Exception/ProjectNotFoundException';
6
import { IsProjectAlreadyExist } from 'src/Domain/Project/Specification/IsProjectAlreadyExist';
7
import { ProjectAlreadyExistException } from 'src/Domain/Project/Exception/ProjectAlreadyExistException';
8
import { ICustomerRepository } from 'src/Domain/Customer/Repository/ICustomerRepository';
9
import { CustomerNotFoundException } from 'src/Domain/Customer/Exception/CustomerNotFoundException';
10
11
@CommandHandler(UpdateProjectCommand)
12
export class UpdateProjectCommandHandler {
13
  constructor(
14
    @Inject('IProjectRepository')
15
    private readonly projectRepository: IProjectRepository,
16
    @Inject('ICustomerRepository')
17
    private readonly customerRepository: ICustomerRepository,
18
    private readonly isProjectAlreadyExist: IsProjectAlreadyExist
19
  ) {}
20
21
  public async execute(command: UpdateProjectCommand): Promise<void> {
22
    const { id, name, dayDuration, customerId, invoiceUnit } = command;
23
24
    const project = await this.projectRepository.findOneById(id);
25
    if (!project) {
26
      throw new ProjectNotFoundException();
27
    }
28
29
    const customer = await this.customerRepository.findOneById(customerId);
30
    if (!customer) {
31
      throw new CustomerNotFoundException();
32
    }
33
34
    if (
35
      name !== project.getName() &&
36
      true === (await this.isProjectAlreadyExist.isSatisfiedBy(name))
37
    ) {
38
      throw new ProjectAlreadyExistException();
39
    }
40
41
    project.update(customer, dayDuration, invoiceUnit, name);
42
    await this.projectRepository.save(project);
43
  }
44
}
45