79 lines
2.4 KiB
TypeScript
79 lines
2.4 KiB
TypeScript
import {HttpException, HttpStatus, Injectable} from '@nestjs/common';
|
|
import {InjectRepository} from '@nestjs/typeorm';
|
|
import {Repository} from 'typeorm';
|
|
import User from './entities/user.entity';
|
|
import CreateUserDto from './dto/createUser.dto';
|
|
import * as bcrypt from 'bcrypt';
|
|
import {FilesService} from "../files/files.service";
|
|
|
|
@Injectable()
|
|
export class UsersService {
|
|
constructor(
|
|
@InjectRepository(User)
|
|
private usersRepository: Repository<User>,
|
|
private readonly filesService: FilesService
|
|
) {
|
|
}
|
|
|
|
async getByEmail(email: string) {
|
|
const user = await this.usersRepository.findOne({where: {email}});
|
|
if (user) {
|
|
return user;
|
|
}
|
|
throw new HttpException(
|
|
'User with this email does not exist',
|
|
HttpStatus.NOT_FOUND,
|
|
);
|
|
}
|
|
|
|
async getById(id: number) {
|
|
const user = await this.usersRepository.findOne({where: {id}});
|
|
if (user) {
|
|
return user;
|
|
}
|
|
throw new HttpException('User with this id does not exist', HttpStatus.NOT_FOUND);
|
|
}
|
|
|
|
async getUserIfRefreshTokenMatches(refreshToken: string, userId: number) {
|
|
const user = await this.getById(userId);
|
|
|
|
const isRefreshTokenMatching = await bcrypt.compare(
|
|
refreshToken,
|
|
user.currentHashedRefreshToken
|
|
);
|
|
|
|
if (isRefreshTokenMatching) {
|
|
return user;
|
|
}
|
|
}
|
|
|
|
async addAvatar(userId: number, imageBuffer: Buffer, filename: string) {
|
|
const avatar = await this.filesService.uploadPublicFile(imageBuffer, filename);
|
|
const user = await this.getById(userId);
|
|
await this.usersRepository.update(userId, {
|
|
...user,
|
|
avatar
|
|
});
|
|
return avatar;
|
|
}
|
|
|
|
async create(userData: CreateUserDto) {
|
|
const newUser = this.usersRepository.create(userData);
|
|
await this.usersRepository.save(newUser);
|
|
return newUser;
|
|
}
|
|
|
|
async setCurrentRefreshToken(refreshToken: string, userId: number) {
|
|
const currentHashedRefreshToken = await bcrypt.hash(refreshToken, 10);
|
|
await this.usersRepository.update(userId, {
|
|
currentHashedRefreshToken,
|
|
});
|
|
}
|
|
|
|
async removeRefreshToken(userId: number) {
|
|
return this.usersRepository.update(userId, {
|
|
currentHashedRefreshToken: null,
|
|
});
|
|
}
|
|
}
|