Преглед на файлове

Merge branch 'starter' of 139-template-116/d8d-vite-starter into starter

18617351030 преди 5 месеца
родител
ревизия
fc071d6ec7
променени са 2 файла, в които са добавени 55 реда и са изтрити 15 реда
  1. 20 14
      .roo/rules/09-logging.md
  2. 35 1
      src/server/modules/auth/auth.service.ts

+ 20 - 14
.roo/rules/09-logging.md

@@ -29,28 +29,34 @@ k8s:deployment:create  # K8S-部署-创建
 
 ### 前端示例
 ```typescript
-// src/client/utils/logger.ts
+// 在需要使用日志的文件中直接引入debug
 import debug from 'debug';
 
-export const logger = {
-  error: debug('frontend:error'),
-  api: debug('frontend:api'),
-  auth: debug('frontend:auth'),
-  ui: debug('frontend:ui')
-};
+// 按需定义命名空间
+const errorLogger = debug('frontend:error');
+const apiLogger = debug('frontend:api');
+const authLogger = debug('frontend:auth');
+const uiLogger = debug('frontend:ui');
+
+// 使用示例
+errorLogger('用户登录失败: %s', error.message);
+apiLogger('API请求: %s', url);
 ```
 
 ### 后端示例
 ```typescript
-// src/server/utils/logger.ts
+// 在需要使用日志的文件中直接引入debug
 import debug from 'debug';
 
-export const logger = {
-  error: debug('backend:error'),
-  api: debug('backend:api'),
-  db: debug('backend:db'),
-  middleware: debug('backend:middleware')
-};
+// 按需定义命名空间
+const errorLogger = debug('backend:error');
+const apiLogger = debug('backend:api');
+const dbLogger = debug('backend:db');
+const middlewareLogger = debug('backend:middleware');
+
+// 使用示例
+errorLogger('数据库连接失败: %s', error.message);
+dbLogger('查询执行: %s', sql);
 ```
 
 ## 5. 最佳实践

+ 35 - 1
src/server/modules/auth/auth.service.ts

@@ -1,9 +1,18 @@
 import jwt from 'jsonwebtoken';
 import { UserService } from '../users/user.service';
 import { UserEntity as User } from '../users/user.entity';
+import { DisabledStatus } from '@/share/types';
+import debug from 'debug';
+
+const logger = {
+  info: debug('backend:auth:info'),
+  error: debug('backend:auth:error')
+}
 
 const JWT_SECRET = 'your-secret-key'; // 生产环境应使用环境变量
 const JWT_EXPIRES_IN = '7d'; // 7天有效期
+const ADMIN_USERNAME = 'admin';
+const ADMIN_PASSWORD = 'admin123';
 
 export class AuthService {
   private userService: UserService;
@@ -12,8 +21,33 @@ export class AuthService {
     this.userService = userService;
   }
 
+  async ensureAdminExists(): Promise<User> {
+    try {
+      let admin = await this.userService.getUserByUsername(ADMIN_USERNAME);
+      if (!admin) {
+        logger.info('Admin user not found, creating default admin account');
+        admin = await this.userService.createUser({
+          username: ADMIN_USERNAME,
+          password: ADMIN_PASSWORD,
+          nickname: '系统管理员',
+          isDisabled: DisabledStatus.ENABLED
+        });
+        logger.info('Default admin account created successfully');
+      }
+      return admin;
+    } catch (error) {
+      logger.error('Failed to ensure admin account exists:', error);
+      throw error;
+    }
+  }
+
   async login(username: string, password: string): Promise<{ token: string; user: User }> {
     try {
+      // 确保admin用户存在
+      if (username === ADMIN_USERNAME) {
+        await this.ensureAdminExists();
+      }
+      
       const user = await this.userService.getUserByUsername(username);
       if (!user) {
         throw new Error('User not found');
@@ -27,7 +61,7 @@ export class AuthService {
       const token = this.generateToken(user);
       return { token, user };
     } catch (error) {
-      console.error('Login error:', error);
+      logger.error('Login error:', error);
       throw error;
     }
   }