|
@@ -6,19 +6,18 @@ import { CreateUserDto } from './dto/create-user.dto';
|
|
import { UpdateUserDto } from './dto/update-user.dto';
|
|
import { UpdateUserDto } from './dto/update-user.dto';
|
|
import { UserEntity } from './entities/user.entity';
|
|
import { UserEntity } from './entities/user.entity';
|
|
import * as bcrypt from 'bcrypt';
|
|
import * as bcrypt from 'bcrypt';
|
|
-import sharp from 'sharp';
|
|
|
|
-import { createReadStream, unlink, unlinkSync } from 'fs';
|
|
|
|
|
|
+import { createReadStream } from 'fs';
|
|
import { Response as Res } from 'express';
|
|
import { Response as Res } from 'express';
|
|
|
|
+import { mapUser, User } from './response-dto/user';
|
|
|
|
|
|
@Injectable()
|
|
@Injectable()
|
|
export class UserService {
|
|
export class UserService {
|
|
constructor(
|
|
constructor(
|
|
@InjectRepository(UserEntity)
|
|
@InjectRepository(UserEntity)
|
|
private userRepository: Repository<UserEntity>,
|
|
private userRepository: Repository<UserEntity>,
|
|
- ) { }
|
|
|
|
|
|
+ ) {}
|
|
|
|
|
|
async getAllUsers(authUser: AuthUserDto, isAll: boolean) {
|
|
async getAllUsers(authUser: AuthUserDto, isAll: boolean) {
|
|
-
|
|
|
|
if (isAll) {
|
|
if (isAll) {
|
|
return await this.userRepository.find();
|
|
return await this.userRepository.find();
|
|
}
|
|
}
|
|
@@ -26,8 +25,8 @@ export class UserService {
|
|
return await this.userRepository.find({
|
|
return await this.userRepository.find({
|
|
where: { id: Not(authUser.id) },
|
|
where: { id: Not(authUser.id) },
|
|
order: {
|
|
order: {
|
|
- createdAt: 'DESC'
|
|
|
|
- }
|
|
|
|
|
|
+ createdAt: 'DESC',
|
|
|
|
+ },
|
|
});
|
|
});
|
|
}
|
|
}
|
|
|
|
|
|
@@ -40,14 +39,12 @@ export class UserService {
|
|
users = await this.userRepository.find();
|
|
users = await this.userRepository.find();
|
|
}
|
|
}
|
|
|
|
|
|
-
|
|
|
|
return {
|
|
return {
|
|
- userCount: users.length
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
|
|
+ userCount: users.length,
|
|
|
|
+ };
|
|
}
|
|
}
|
|
|
|
|
|
- async createUser(createUserDto: CreateUserDto) {
|
|
|
|
|
|
+ async createUser(createUserDto: CreateUserDto): Promise<User> {
|
|
const user = await this.userRepository.findOne({ where: { email: createUserDto.email } });
|
|
const user = await this.userRepository.findOne({ where: { email: createUserDto.email } });
|
|
|
|
|
|
if (user) {
|
|
if (user) {
|
|
@@ -62,18 +59,10 @@ export class UserService {
|
|
newUser.lastName = createUserDto.lastName;
|
|
newUser.lastName = createUserDto.lastName;
|
|
newUser.isAdmin = false;
|
|
newUser.isAdmin = false;
|
|
|
|
|
|
-
|
|
|
|
try {
|
|
try {
|
|
const savedUser = await this.userRepository.save(newUser);
|
|
const savedUser = await this.userRepository.save(newUser);
|
|
|
|
|
|
- return {
|
|
|
|
- id: savedUser.id,
|
|
|
|
- email: savedUser.email,
|
|
|
|
- firstName: savedUser.firstName,
|
|
|
|
- lastName: savedUser.lastName,
|
|
|
|
- createdAt: savedUser.createdAt,
|
|
|
|
- };
|
|
|
|
-
|
|
|
|
|
|
+ return mapUser(savedUser);
|
|
} catch (e) {
|
|
} catch (e) {
|
|
Logger.error(e, 'Create new user');
|
|
Logger.error(e, 'Create new user');
|
|
throw new InternalServerErrorException('Failed to register new user');
|
|
throw new InternalServerErrorException('Failed to register new user');
|
|
@@ -84,7 +73,6 @@ export class UserService {
|
|
return bcrypt.hash(password, salt);
|
|
return bcrypt.hash(password, salt);
|
|
}
|
|
}
|
|
|
|
|
|
-
|
|
|
|
async updateUser(updateUserDto: UpdateUserDto) {
|
|
async updateUser(updateUserDto: UpdateUserDto) {
|
|
const user = await this.userRepository.findOne(updateUserDto.id);
|
|
const user = await this.userRepository.findOne(updateUserDto.id);
|
|
|
|
|
|
@@ -100,10 +88,10 @@ export class UserService {
|
|
}
|
|
}
|
|
|
|
|
|
if (updateUserDto.isAdmin) {
|
|
if (updateUserDto.isAdmin) {
|
|
- const adminUser = await this.userRepository.findOne({ where: { isAdmin: true } })
|
|
|
|
|
|
+ const adminUser = await this.userRepository.findOne({ where: { isAdmin: true } });
|
|
|
|
|
|
if (adminUser) {
|
|
if (adminUser) {
|
|
- throw new BadRequestException("Admin user exists")
|
|
|
|
|
|
+ throw new BadRequestException('Admin user exists');
|
|
}
|
|
}
|
|
|
|
|
|
user.isAdmin = true;
|
|
user.isAdmin = true;
|
|
@@ -120,7 +108,6 @@ export class UserService {
|
|
isAdmin: updatedUser.isAdmin,
|
|
isAdmin: updatedUser.isAdmin,
|
|
profileImagePath: updatedUser.profileImagePath,
|
|
profileImagePath: updatedUser.profileImagePath,
|
|
};
|
|
};
|
|
-
|
|
|
|
} catch (e) {
|
|
} catch (e) {
|
|
Logger.error(e, 'Create new user');
|
|
Logger.error(e, 'Create new user');
|
|
throw new InternalServerErrorException('Failed to register new user');
|
|
throw new InternalServerErrorException('Failed to register new user');
|
|
@@ -130,13 +117,12 @@ export class UserService {
|
|
async createProfileImage(authUser: AuthUserDto, fileInfo: Express.Multer.File) {
|
|
async createProfileImage(authUser: AuthUserDto, fileInfo: Express.Multer.File) {
|
|
try {
|
|
try {
|
|
await this.userRepository.update(authUser.id, {
|
|
await this.userRepository.update(authUser.id, {
|
|
- profileImagePath: fileInfo.path
|
|
|
|
- })
|
|
|
|
-
|
|
|
|
|
|
+ profileImagePath: fileInfo.path,
|
|
|
|
+ });
|
|
|
|
|
|
return {
|
|
return {
|
|
userId: authUser.id,
|
|
userId: authUser.id,
|
|
- profileImagePath: fileInfo.path
|
|
|
|
|
|
+ profileImagePath: fileInfo.path,
|
|
};
|
|
};
|
|
} catch (e) {
|
|
} catch (e) {
|
|
Logger.error(e, 'Create User Profile Image');
|
|
Logger.error(e, 'Create User Profile Image');
|
|
@@ -146,7 +132,7 @@ export class UserService {
|
|
|
|
|
|
async getUserProfileImage(userId: string, res: Res) {
|
|
async getUserProfileImage(userId: string, res: Res) {
|
|
try {
|
|
try {
|
|
- const user = await this.userRepository.findOne({ id: userId })
|
|
|
|
|
|
+ const user = await this.userRepository.findOne({ id: userId });
|
|
|
|
|
|
if (!user.profileImagePath) {
|
|
if (!user.profileImagePath) {
|
|
// throw new BadRequestException('User does not have a profile image');
|
|
// throw new BadRequestException('User does not have a profile image');
|
|
@@ -157,11 +143,10 @@ export class UserService {
|
|
res.set({
|
|
res.set({
|
|
'Content-Type': 'image/jpeg',
|
|
'Content-Type': 'image/jpeg',
|
|
});
|
|
});
|
|
- const fileStream = createReadStream(user.profileImagePath)
|
|
|
|
|
|
+ const fileStream = createReadStream(user.profileImagePath);
|
|
return new StreamableFile(fileStream);
|
|
return new StreamableFile(fileStream);
|
|
} catch (e) {
|
|
} catch (e) {
|
|
- console.log("error getting user profile")
|
|
|
|
|
|
+ console.log('error getting user profile');
|
|
}
|
|
}
|
|
-
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|