* replace TypeORM with Kysely query builder * refactor migrations * other changes and fixes
51 lines
1.4 KiB
TypeScript
51 lines
1.4 KiB
TypeScript
import {
|
|
BadRequestException,
|
|
Injectable,
|
|
NotFoundException,
|
|
} from '@nestjs/common';
|
|
import { UpdateUserDto } from './dto/update-user.dto';
|
|
import { UserRepo } from '@docmost/db/repos/user/user.repo';
|
|
import { hashPassword } from '../../helpers/utils';
|
|
|
|
@Injectable()
|
|
export class UserService {
|
|
constructor(private userRepo: UserRepo) {}
|
|
|
|
async findById(userId: string, workspaceId: string) {
|
|
return this.userRepo.findById(userId, workspaceId);
|
|
}
|
|
|
|
async update(
|
|
updateUserDto: UpdateUserDto,
|
|
userId: string,
|
|
workspaceId: string,
|
|
) {
|
|
const user = await this.userRepo.findById(userId, workspaceId);
|
|
if (!user) {
|
|
throw new NotFoundException('User not found');
|
|
}
|
|
|
|
if (updateUserDto.name) {
|
|
user.name = updateUserDto.name;
|
|
}
|
|
|
|
// todo need workspace scoping
|
|
if (updateUserDto.email && user.email != updateUserDto.email) {
|
|
if (await this.userRepo.findByEmail(updateUserDto.email, workspaceId)) {
|
|
throw new BadRequestException('A user with this email already exists');
|
|
}
|
|
user.email = updateUserDto.email;
|
|
}
|
|
|
|
if (updateUserDto.avatarUrl) {
|
|
user.avatarUrl = updateUserDto.avatarUrl;
|
|
}
|
|
|
|
if (updateUserDto.password) {
|
|
updateUserDto.password = await hashPassword(updateUserDto.password);
|
|
}
|
|
|
|
await this.userRepo.updateUser(updateUserDto, userId, workspaceId);
|
|
return user;
|
|
}
|
|
}
|