generated from NarHakobyan/awesome-nest-boilerplate
-
Notifications
You must be signed in to change notification settings - Fork 2
/
user.service.ts
79 lines (65 loc) · 2.58 KB
/
user.service.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
import { Injectable } from '@nestjs/common';
import { first, last } from 'lodash';
import { FindConditions } from 'typeorm';
import { AwsS3Service } from '../../shared/services/aws-s3.service';
import { ValidatorService } from '../../shared/services/validator.service';
import { UserRegisterDto } from '../auth/dto/UserRegisterDto';
import { UsersPageDto } from './dto/UsersPageDto';
import { UsersPageOptionsDto } from './dto/UsersPageOptionsDto';
import { UserEntity } from './user.entity';
import { UserRepository } from './user.repository';
@Injectable()
export class UserService {
constructor(
public readonly userRepository: UserRepository,
public readonly validatorService: ValidatorService,
public readonly awsS3Service: AwsS3Service,
) {}
/**
* Find single user
*/
findOne(findData: FindConditions<UserEntity>): Promise<UserEntity> {
return this.userRepository.findOne(findData);
}
async findByUsernameOrEmail(
options: Partial<{ username: string; email: string }>,
): Promise<UserEntity | undefined> {
const queryBuilder = this.userRepository.createQueryBuilder('user');
if (options.email) {
queryBuilder.orWhere('user.email = :email', {
email: options.email,
});
}
if (options.username) {
queryBuilder.orWhere('user.username = :username', {
username: options.username,
});
}
return queryBuilder.getOne();
}
async createUser(userRegisterDto: UserRegisterDto): Promise<UserEntity> {
const user = this.userRepository.create({ ...userRegisterDto });
return this.userRepository.save(user);
}
async getUsers(pageOptionsDto: UsersPageOptionsDto): Promise<UsersPageDto> {
const queryBuilder = this.userRepository.createQueryBuilder('user');
const [users, pageMetaDto] = await queryBuilder.paginate(
pageOptionsDto,
);
return new UsersPageDto(users.toDtos(), pageMetaDto);
}
async updateUser(userDto: UserEntity): Promise<UserEntity> {
userDto.emailVerified = true;
return this.userRepository.save(userDto);
}
// for Unittest demo, not works in real
async getKoreanUserNameByUserId(userId: number) {
const { firstName, lastName } = await this.userRepository.findOne(userId)
// for demo jest.fn mocking
const { status } = await this.awsS3Service.collectApiHit()
return {
name: lastName + firstName,
statusCode: status
}
}
}