Passed
Push — master ( 0e29a7...dfba81 )
by Mathieu
02:20 queued 23s
created

MealTicketRemovalRepository.findByMonth   A

Complexity

Conditions 1

Size

Total Lines 12
Code Lines 12

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 12
dl 0
loc 12
c 0
b 0
f 0
rs 9.8
cc 1
1
import { InjectRepository } from '@nestjs/typeorm';
2
import { Repository } from 'typeorm';
3
import { MealTicketRemoval } from 'src/Domain/HumanResource/MealTicket/MealTicketRemoval.entity';
4
import { FindByMonth, IMealTicketRemovalRepository } from 'src/Domain/HumanResource/MealTicket/Repository/IMealTicketRemovalRepository';
5
import { User } from 'src/Domain/HumanResource/User/User.entity';
6
7
export class MealTicketRemovalRepository implements IMealTicketRemovalRepository {
8
  constructor(
9
    @InjectRepository(MealTicketRemoval)
10
    private readonly repository: Repository<MealTicketRemoval>
11
  ) {}
12
13
  public save(mealTicketRemovals: MealTicketRemoval[]): void {
14
    this.repository.save(mealTicketRemovals);
15
  }
16
17
  public findOneByUserAndDate(
18
    user: User,
19
    date: Date
20
  ): Promise<MealTicketRemoval | undefined> {
21
    const month = date.getMonth() + 1;
22
    const year = date.getFullYear();
23
    const day = date.getDate();
24
25
    return this.repository
26
      .createQueryBuilder('m')
27
      .select(['m.id'])
28
      .where('m.user = :userId', { userId: user.getId() })
29
      .andWhere('extract(month FROM m.date) = :month', {
30
        month
31
      })
32
      .andWhere('extract(year FROM m.date) = :year', { year })
33
      .andWhere('extract(day FROM m.date) = :day', { day })
34
      .getOne();
35
  }
36
37
  public findByMonth(date: Date): Promise<FindByMonth[]> {
38
    const month = date.getMonth() + 1;
39
    const year = date.getFullYear();
40
41
    return this.repository
42
      .createQueryBuilder('mealTicketRemoval')
43
      .select(['user.id, COUNT(mealTicketRemoval.id)::int as count'])
44
      .where('extract(month FROM mealTicketRemoval.date) = :month', { month })
45
      .andWhere('extract(year FROM mealTicketRemoval.date) = :year', { year })
46
      .innerJoin('mealTicketRemoval.user', 'user')
47
      .groupBy('user.id')
48
      .getRawMany();
49
  }
50
}
51