Passed
Pull Request — master (#248)
by
unknown
01:59
created

UserRepository.findUsersWithPayslipInfo   A

Complexity

Conditions 1

Size

Total Lines 24
Code Lines 23

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 23
dl 0
loc 24
c 0
b 0
f 0
rs 9.328
cc 1
1
import { InjectRepository } from '@nestjs/typeorm';
2
import { Injectable } from '@nestjs/common';
3
import { Repository } from 'typeorm';
4
import { IUserRepository } from 'src/Domain/HumanResource/User/Repository/IUserRepository';
5
import { User, UserRole } from 'src/Domain/HumanResource/User/User.entity';
6
7
@Injectable()
8
export class UserRepository implements IUserRepository {
9
  constructor(
10
    @InjectRepository(User)
11
    private readonly repository: Repository<User>
12
  ) {}
13
14
  public findOneByApiToken(apiToken: string): Promise<User | undefined> {
15
    return this.repository
16
      .createQueryBuilder('user')
17
      .select([
18
        'user.id',
19
        'user.firstName',
20
        'user.lastName',
21
        'user.email',
22
        'user.role'
23
      ])
24
      .where('user.apiToken = :apiToken', { apiToken })
25
      .getOne();
26
  }
27
28
  public findOneByEmail(email: string): Promise<User | undefined> {
29
    return this.repository
30
      .createQueryBuilder('user')
31
      .select([
32
        'user.id',
33
        'user.firstName',
34
        'user.lastName',
35
        'user.email',
36
        'user.apiToken',
37
        'user.password',
38
        'user.role'
39
      ])
40
      .where('user.email = :email', { email })
41
      .getOne();
42
  }
43
44
  public findOneById(id: string): Promise<User | undefined> {
45
    return this.repository
46
      .createQueryBuilder('user')
47
      .select([
48
        'user.id',
49
        'user.firstName',
50
        'user.lastName',
51
        'user.email',
52
        'user.role'
53
      ])
54
      .where('user.id = :id', { id })
55
      .getOne();
56
  }
57
58
  public findUsers(withAccountant: boolean, noLeavingDate: boolean = false): Promise<User[]> {
59
    const query = this.repository
60
      .createQueryBuilder('user')
61
      .select([
62
        'user.id',
63
        'user.firstName',
64
        'user.lastName',
65
        'user.email',
66
        'user.role'
67
      ])
68
      .orderBy('user.lastName', 'ASC')
69
      .addOrderBy('user.firstName', 'ASC');
70
71
    if (false === withAccountant) {
72
      query.andWhere('user.role <> :role', { role: UserRole.ACCOUNTANT });
73
    }
74
    if (noLeavingDate) {
75
      query.innerJoin("user.userAdministrative" ,"userAdministrative");
76
      query.andWhere('userAdministrative.leavingDate IS NULL');
77
    }
78
79
    return query.getMany();
80
  }
81
82
  public findUsersWithPayslipInfo(): Promise<User[]> {
83
    const query = this.repository
84
      .createQueryBuilder('user')
85
      .select([
86
        'user.id',
87
        'user.firstName',
88
        'user.lastName',
89
        'userAdministrative.joiningDate',
90
        'userAdministrative.leavingDate',
91
        'userAdministrative.annualEarnings',
92
        'userAdministrative.transportFee',
93
        'userAdministrative.healthInsurance',
94
        'userAdministrative.executivePosition',
95
        'userAdministrative.contract',
96
        'userAdministrative.workingTime'
97
      ])
98
    query.innerJoin("user.userAdministrative" ,"userAdministrative");
99
    query.andWhere('user.role <> :role', { role: UserRole.ACCOUNTANT });
100
    query.andWhere('userAdministrative.leavingDate IS NULL');
101
    query.orderBy('user.lastName', 'ASC');
102
    query.addOrderBy('user.firstName', 'ASC');
103
104
    return query.getMany();
105
  }
106
107
  public save(user: User): Promise<User> {
108
    return this.repository.save(user);
109
  }
110
}
111