user.service.ts 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. import { Injectable } from '@nestjs/common';
  2. import { InjectRepository } from '@nestjs/typeorm';
  3. import { User } from '../entity/user.entity';
  4. import { Repository } from 'typeorm';
  5. import * as bcrypt from 'bcrypt';
  6. import { SearchUserFilter } from '../dto/search-user.filter';
  7. import { JwtPayload } from 'jsonwebtoken';
  8. import { CreateUserRequest } from '../dto/create-user.request';
  9. @Injectable()
  10. export class UserService {
  11. constructor(
  12. @InjectRepository(User) private readonly userRepository: Repository<User>,
  13. ) {}
  14. private currentUser: User;
  15. setCurrentUser(user: User) {
  16. this.currentUser = user;
  17. }
  18. getCurrentUser() {
  19. return this.currentUser;
  20. }
  21. async setCurrentUserByJwtPayload(payload: JwtPayload) {
  22. const user = await this.userRepository.findOneBy({ id: payload.sub });
  23. this.setCurrentUser(user);
  24. }
  25. async findById(id: string) {
  26. return this.userRepository.findOne({
  27. where: {
  28. id,
  29. },
  30. });
  31. }
  32. async findByUserName(username: string) {
  33. return this.userRepository.findOne({
  34. where: {
  35. username,
  36. },
  37. });
  38. }
  39. async createInitialUser() {
  40. try {
  41. const existingUser = await this.userRepository.findOne({
  42. where: { username: 'admin' },
  43. });
  44. if (!existingUser) {
  45. const salt = await bcrypt.genSalt();
  46. const encryptedPassword = await bcrypt.hash('admin123', salt);
  47. const user = this.userRepository.create({
  48. username: 'admin',
  49. encryptedPassword,
  50. locked: false,
  51. enabled: true,
  52. });
  53. await this.userRepository.save(user);
  54. console.log('Initial admin user created');
  55. } else {
  56. console.log('Admin user already exists');
  57. }
  58. } catch (error) {
  59. console.log('Error creating initial user', error);
  60. }
  61. }
  62. async search(searchUserFilter: SearchUserFilter) {
  63. return this.userRepository.findAndCount({
  64. where: searchUserFilter.getConditions(),
  65. skip: searchUserFilter.getSkip(),
  66. take: searchUserFilter.getSize(),
  67. });
  68. }
  69. async create(createUserRequest: CreateUserRequest) {
  70. const user = new User();
  71. user.username = createUserRequest.username;
  72. const salt = await bcrypt.genSalt();
  73. user.encryptedPassword = await bcrypt.hash('admin123', salt);
  74. return this.userRepository.save(user);
  75. }
  76. }