Passed
Pull Request — master (#159)
by Mathieu
02:09
created

GetLeaveRequestByIdQueryHandler.execute   B

Complexity

Conditions 3

Size

Total Lines 42
Code Lines 37

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 3
eloc 37
dl 0
loc 42
rs 8.9919
c 0
b 0
f 0
1
import { Inject } from '@nestjs/common';
2
import { QueryHandler } from '@nestjs/cqrs';
3
import { IDateUtils } from 'src/Application/IDateUtils';
4
import { LeaveRequestNotFoundException } from 'src/Domain/HumanResource/Leave/Exception/LeaveRequestNotFoundException';
5
import { LeaveRequestRepository } from 'src/Infrastructure/HumanResource/Leave/Repository/LeaveRequestRepository';
6
import { UserSummaryView } from '../../User/View/UserSummaryView';
7
import { LeaveRequestView } from '../View/LeaveRequestView';
8
import { GetLeaveRequestByIdQuery } from './GetLeaveRequestByIdQuery';
9
10
@QueryHandler(GetLeaveRequestByIdQuery)
11
export class GetLeaveRequestByIdQueryHandler {
12
  constructor(
13
    @Inject('ILeaveRequestRepository')
14
    private readonly leaveRequestRepository: LeaveRequestRepository,
15
    @Inject('IDateUtils')
16
    private readonly dateUtils: IDateUtils
17
  ) {}
18
19
  public async execute(
20
    { id }: GetLeaveRequestByIdQuery
21
  ): Promise<LeaveRequestView> {
22
    const leaveRequest = await this.leaveRequestRepository.findOneById(id);
23
24
    if (!leaveRequest) {
25
      throw new LeaveRequestNotFoundException();
26
    }
27
28
    const user = leaveRequest.getUser();
29
    const moderator = leaveRequest.getModerator();
30
    let moderatorView: UserSummaryView;
31
32
    if (moderator) {
33
      moderatorView = new UserSummaryView(
34
        moderator.getId(),
35
        moderator.getFirstName(),
36
        moderator.getLastName()
37
      );
38
    }
39
40
    return new LeaveRequestView(
41
      leaveRequest.getId(),
42
      leaveRequest.getType(),
43
      leaveRequest.getStatus(),
44
      leaveRequest.getStartDate(),
45
      leaveRequest.getEndDate(),
46
      this.dateUtils.getLeaveDuration(
47
        leaveRequest.getStartDate(),
48
        leaveRequest.isStartsAllDay(),
49
        leaveRequest.getEndDate(),
50
        leaveRequest.isEndsAllDay()
51
      ),
52
      leaveRequest.getComment(),
53
      new UserSummaryView(
54
        user.getId(),
55
        user.getFirstName(),
56
        user.getLastName()
57
      ),
58
      moderatorView,
59
      leaveRequest.getModerationComment()
60
    );
61
  }
62
}
63