Passed
Push — master ( d4464b...8d34d2 )
by Mathieu
01:55
created

server/src/Infrastructure/Accounting/Repository/DailyRateRepository.ts   A

Complexity

Total Complexity 4
Complexity/F 1

Size

Lines of Code 78
Function Count 4

Duplication

Duplicated Lines 0
Ratio 0 %

Importance

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

4 Functions

Rating   Name   Duplication   Size   Complexity  
A DailyRateRepository.findOneById 0 20 1
A DailyRateRepository.save 0 3 1
A DailyRateRepository.findAll 0 21 1
A DailyRateRepository.findOneByUserCustomerAndTask 0 12 1
1
import {InjectRepository} from '@nestjs/typeorm';
2
import {Repository} from 'typeorm';
3
import {IDailyRateRepository} from 'src/Domain/Accounting/Repository/IDailyRateRepository';
4
import {DailyRate} from 'src/Domain/Accounting/DailyRate.entity';
5
import {User} from 'src/Domain/User/User.entity';
6
import {Customer} from 'src/Domain/Customer/Customer.entity';
7
import {Task} from 'src/Domain/Task/Task.entity';
8
9
export class DailyRateRepository implements IDailyRateRepository {
10
  constructor(
11
    @InjectRepository(DailyRate)
12
    private readonly repository: Repository<DailyRate>
13
  ) {}
14
15
  public save(dailyRate: DailyRate): Promise<DailyRate> {
16
    return this.repository.save(dailyRate);
17
  }
18
19
  public findAll(): Promise<DailyRate[]> {
20
    return this.repository
21
      .createQueryBuilder('dailyRate')
22
      .select([
23
        'dailyRate.id',
24
        'dailyRate.amount',
25
        'user.id',
26
        'user.firstName',
27
        'user.lastName',
28
        'user.email',
29
        'task.id',
30
        'task.name',
31
        'customer.id',
32
        'customer.name'
33
      ])
34
      .innerJoin('dailyRate.user', 'user')
35
      .innerJoin('dailyRate.task', 'task')
36
      .innerJoin('dailyRate.customer', 'customer')
37
      .orderBy('user.lastName', 'ASC')
38
      .addOrderBy('user.firstName', 'ASC')
39
      .getMany();
40
  }
41
42
  public findOneById(id: string): Promise<DailyRate | undefined> {
43
    return this.repository
44
      .createQueryBuilder('dailyRate')
45
      .select([
46
        'dailyRate.id',
47
        'dailyRate.amount',
48
        'user.id',
49
        'user.firstName',
50
        'user.lastName',
51
        'user.email',
52
        'task.id',
53
        'task.name',
54
        'customer.id',
55
        'customer.name'
56
      ])
57
      .innerJoin('dailyRate.user', 'user')
58
      .innerJoin('dailyRate.task', 'task')
59
      .innerJoin('dailyRate.customer', 'customer')
60
      .where('dailyRate.id = :id', {id})
61
      .getOne();
62
  }
63
64
  public findOneByUserCustomerAndTask(
65
    user: User,
66
    customer: Customer,
67
    task: Task
68
  ): Promise<DailyRate | undefined> {
69
    return this.repository
70
      .createQueryBuilder('dailyRate')
71
      .select('dailyRate.id')
72
      .where('dailyRate.user = :user', {user: user.getId()})
73
      .andWhere('dailyRate.customer = :customer', {customer: customer.getId()})
74
      .andWhere('dailyRate.task = :task', {task: task.getId()})
75
      .getOne();
76
  }
77
}
78