-
Notifications
You must be signed in to change notification settings - Fork 4
/
user.repository.ts
90 lines (80 loc) · 2.31 KB
/
user.repository.ts
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
import { InjectRepository } from '@nestjs/typeorm';
import { Repository } from 'typeorm';
import { Injectable, Logger } from '@nestjs/common';
import {
UserEntity,
UserProps,
} from 'src/modules/user/domain/entities/user.entity';
import { NotFoundException } from '@exceptions';
import {
TypeormRepositoryBase,
WhereCondition,
} from 'src/infrastructure/database/base-classes/typeorm.repository.base';
import { QueryParams } from 'src/core/ports/repository.ports';
import { UserOrmEntity } from './user.orm-entity';
import { UserRepositoryPort } from './user.repository.interface';
import { UserOrmMapper } from './user.orm-mapper';
@Injectable()
export class UserRepository
extends TypeormRepositoryBase<UserEntity, UserProps, UserOrmEntity>
implements UserRepositoryPort
{
protected relations: string[] = [];
constructor(
@InjectRepository(UserOrmEntity)
private readonly userRepository: Repository<UserOrmEntity>,
) {
super(
userRepository,
new UserOrmMapper(UserEntity, UserOrmEntity),
new Logger('user-repository'),
);
}
private async findOneByEmail(
email: string,
): Promise<UserOrmEntity | undefined> {
const user = await this.userRepository.findOne({
where: { email },
});
return user;
}
async findOneByEmailOrThrow(email: string): Promise<UserEntity> {
const user = await this.findOneByEmail(email);
if (!user) {
throw new NotFoundException();
}
return this.mapper.toDomainEntity(user);
}
private async findOneByUniversityID(
universityID: string,
): Promise<UserOrmEntity | undefined> {
const user = await this.userRepository.findOne({
where: { universityID },
});
return user;
}
async existsByEmail(email: string): Promise<boolean> {
const found = await this.findOneByEmail(email);
if (found) {
return true;
}
return false;
}
async existsByUniID(universityID: string): Promise<boolean> {
const found = await this.findOneByUniversityID(universityID);
if (found) {
return true;
}
return false;
}
// Used to construct a query
protected prepareQuery(
params: QueryParams<UserProps>,
): WhereCondition<UserOrmEntity> {
const where: QueryParams<UserOrmEntity> = {};
if (params.id) {
where.id = params.id.value;
}
return where;
}
}