src/Infrastructure/HumanResource/Leave/Controller/GetLeaveRequestController.ts   A
last analyzed

Complexity

Total Complexity 1
Complexity/F 1

Size

Lines of Code 56
Function Count 1

Duplication

Duplicated Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
wmc 1
eloc 50
mnd 0
bc 0
fnc 1
dl 0
loc 56
rs 10
bpm 0
cpm 1
noi 0
c 0
b 0
f 0

1 Function

Rating   Name   Duplication   Size   Complexity  
A GetLeaveRequestController.get 0 20 1
1
import {
2
  Controller,
3
  Inject,
4
  UseGuards,
5
  Get,
6
  Render,
7
  Param
8
} from '@nestjs/common';
9
import { IQueryBus } from 'src/Application/IQueryBus';
10
import { User } from 'src/Domain/HumanResource/User/User.entity';
11
import { IsAuthenticatedGuard } from 'src/Infrastructure/HumanResource/User/Security/IsAuthenticatedGuard';
12
import { WithName } from 'src/Infrastructure/Common/ExtendedRouting/WithName';
13
import { LoggedUser } from '../../User/Decorator/LoggedUser';
14
import { LeaveRequestTableFactory } from '../Table/LeaveRequestTableFactory';
15
import { GetLeaveRequestByIdQuery } from 'src/Application/HumanResource/Leave/Query/GetLeaveRequestByIdQuery';
16
import { IdDTO } from 'src/Infrastructure/Common/DTO/IdDTO';
17
import { CanLeaveRequestBeModerated } from 'src/Domain/HumanResource/Leave/Specification/CanLeaveRequestBeModerated';
18
import { LeaveRequestDetailView } from 'src/Application/HumanResource/Leave/View/LeaveRequestDetailView';
19
import { DoesLeaveRequestBelongToUser } from 'src/Domain/HumanResource/Leave/Specification/DoesLeaveRequestBelongToUser';
20
import { Status } from 'src/Domain/HumanResource/Leave/LeaveRequest.entity';
21
22
@Controller('app/people/leaves')
23
@UseGuards(IsAuthenticatedGuard)
24
export class GetLeaveRequestController {
25
  constructor(
26
    @Inject('IQueryBus')
27
    private readonly queryBus: IQueryBus,
28
    private readonly tableFactory: LeaveRequestTableFactory,
29
    private readonly canLeaveRequestBeModerated: CanLeaveRequestBeModerated,
30
    private readonly doesLeaveRequestBelongToUser: DoesLeaveRequestBelongToUser
31
  ) {}
32
33
  @Get(':id')
34
  @WithName('people_leave_requests_detail')
35
  @Render('pages/leave_requests/detail.njk')
36
  public async get(@Param() { id }: IdDTO, @LoggedUser() user: User) {
37
    const leaveRequest: LeaveRequestDetailView = await this.queryBus.execute(
38
      new GetLeaveRequestByIdQuery(id, user)
39
    );
40
41
    const inline = this.tableFactory.createInline(leaveRequest);
42
43
    return {
44
      leaveRequest,
45
      inline,
46
      canEdit:
47
        leaveRequest.status === Status.PENDING &&
48
        this.doesLeaveRequestBelongToUser.isSatisfiedBy(leaveRequest, user),
49
      canModerate: this.canLeaveRequestBeModerated.isSatisfiedBy(
50
        leaveRequest,
51
        user
52
      )
53
    };
54
  }
55
}
56