user.service.ts 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  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 'bcryptjs';
  6. import { SearchUserFilter } from '../dto/search-user.filter';
  7. import { JwtPayload } from 'jsonwebtoken';
  8. import { CreateUserRequest } from '../dto/create-user.request';
  9. import { UpdateUserRequest } from '../dto/update-user.request';
  10. @Injectable()
  11. export class UserService {
  12. constructor(
  13. @InjectRepository(User) private readonly userRepository: Repository<User>,
  14. ) {}
  15. private currentUser: User;
  16. setCurrentUser(user: User) {
  17. this.currentUser = user;
  18. }
  19. getCurrentUser() {
  20. return this.currentUser;
  21. }
  22. async setCurrentUserByJwtPayload(payload: JwtPayload) {
  23. const user = await this.userRepository.findOneBy({ id: payload.sub });
  24. this.setCurrentUser(user);
  25. }
  26. async findById(id: string) {
  27. return this.userRepository.findOne({
  28. where: {
  29. id,
  30. },
  31. });
  32. }
  33. async findByUserName(username: string) {
  34. return this.userRepository.findOne({
  35. where: {
  36. username,
  37. },
  38. });
  39. }
  40. async createInitialUser() {
  41. try {
  42. const existingUser = await this.userRepository.findOne({
  43. where: { username: 'admin' },
  44. });
  45. if (!existingUser) {
  46. const salt = await bcrypt.genSalt();
  47. const encryptedPassword = await bcrypt.hash('admin123', salt);
  48. const user = this.userRepository.create({
  49. username: 'admin',
  50. encryptedPassword,
  51. locked: false,
  52. enabled: true,
  53. });
  54. await this.userRepository.save(user);
  55. console.log('Initial admin user created');
  56. } else {
  57. console.log('Admin user already exists');
  58. }
  59. } catch (error) {
  60. console.log('Error creating initial user', error);
  61. }
  62. }
  63. async search(searchUserFilter: SearchUserFilter) {
  64. return this.userRepository.findAndCount({
  65. where: searchUserFilter.getConditions(),
  66. skip: searchUserFilter.getSkip(),
  67. take: searchUserFilter.getSize(),
  68. });
  69. }
  70. async create(createUserRequest: CreateUserRequest) {
  71. const user = new User();
  72. user.username = createUserRequest.username;
  73. const salt = await bcrypt.genSalt();
  74. user.encryptedPassword = await bcrypt.hash('admin123', salt);
  75. return this.userRepository.save(user);
  76. }
  77. async update(id: string, updateUserRequest: UpdateUserRequest) {
  78. const user = await this.findById(id);
  79. user.trueName = updateUserRequest.trueName;
  80. user.age = updateUserRequest.age;
  81. user.gender = updateUserRequest.gender;
  82. user.avatar = updateUserRequest.avatar;
  83. user.occupation = updateUserRequest.occupation;
  84. user.address = updateUserRequest.address;
  85. return this.userRepository.save(user);
  86. }
  87. async updateCurrentUser(updateUserRequest: UpdateUserRequest) {
  88. return this.update(this.currentUser.id, updateUserRequest);
  89. }
  90. }