Completed
Push — master ( 927bea...d35268 )
by Mathieu
22s queued 11s
created

GetLeaveRequestByIdQueryHandler.execute   B

Complexity

Conditions 3

Size

Total Lines 44
Code Lines 38

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 3
eloc 38
dl 0
loc 44
rs 8.968
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 { LeaveRequestDetailView } from '../View/LeaveRequestDetailView';
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(query: GetLeaveRequestByIdQuery): Promise<LeaveRequestDetailView> {
20
    const leaveRequest = await this.leaveRequestRepository.findOneById(
21
      query.id
22
    );
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 LeaveRequestDetailView(
41
      leaveRequest.getId(),
42
      leaveRequest.getType(),
43
      leaveRequest.getStatus(),
44
      leaveRequest.getStartDate(),
45
      leaveRequest.isStartsAllDay(),
46
      leaveRequest.getEndDate(),
47
      leaveRequest.isEndsAllDay(),
48
      this.dateUtils.getLeaveDuration(
49
        leaveRequest.getStartDate(),
50
        leaveRequest.isStartsAllDay(),
51
        leaveRequest.getEndDate(),
52
        leaveRequest.isEndsAllDay()
53
      ),
54
      leaveRequest.getComment(),
55
      new UserSummaryView(
56
        user.getId(),
57
        user.getFirstName(),
58
        user.getLastName()
59
      ),
60
      moderatorView,
61
      leaveRequest.getModerationComment()
62
    );
63
  }
64
}
65