src/Domain/FairCalendar/Specification/IsMaximumTimeSpentReached.ts   A
last analyzed

Complexity

Total Complexity 2
Complexity/F 2

Size

Lines of Code 34
Function Count 1

Duplication

Duplicated Lines 0
Ratio 0 %

Importance

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

1 Function

Rating   Name   Duplication   Size   Complexity  
A IsMaximumTimeSpentReached.isSatisfiedBy 0 19 2
1
import { Inject } from '@nestjs/common';
2
import { IEventRepository } from '../Repository/IEventRepository';
3
import { Event } from '../Event.entity';
4
import { ILeaveRepository } from 'src/Domain/HumanResource/Leave/Repository/ILeaveRepository';
5
6
export class IsMaximumTimeSpentReached {
7
  constructor(
8
    @Inject('IEventRepository')
9
    private readonly eventRepository: IEventRepository,
10
    @Inject('ILeaveRepository')
11
    private readonly leaveRepository: ILeaveRepository
12
  ) {}
13
14
  public async isSatisfiedBy(
15
    event: Event,
16
    newTime: number = 0
17
  ): Promise<boolean> {
18
    const user = event.getUser();
19
    const date = event.getDate();
20
21
    const [eventTime, leaveTime] = await Promise.all([
22
      this.eventRepository.sumOfTimeSpentByUserAndDate(user, date),
23
      this.leaveRepository.sumOfDurationLeaveByUserAndDate(user, date)
24
    ]);
25
26
    const timeSpent = eventTime + leaveTime;
27
    const dayTime = event.getId()
28
      ? timeSpent - event.getTime() + newTime
29
      : timeSpent + event.getTime();
30
31
    return dayTime > Event.MAXIMUM_TIMESPENT_PER_DAY;
32
  }
33
}
34