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