修正資料庫未關閉問題
This commit is contained in:
@@ -40,7 +40,7 @@ import type {
|
||||
// =====================================================
|
||||
export class UserService extends DatabaseServiceBase {
|
||||
// 創建用戶
|
||||
async create(userData: Omit<User, 'id' | 'created_at' | 'updated_at'>): Promise<User> {
|
||||
async create(userData: Omit<User, 'id' | 'created_at' | 'updated_at'> & { id: string }): Promise<User> {
|
||||
const sql = `
|
||||
INSERT INTO users (id, name, email, password_hash, avatar, department, role, join_date, total_likes, total_views, status, last_login)
|
||||
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
|
||||
@@ -572,9 +572,9 @@ export class UserService extends DatabaseServiceBase {
|
||||
}
|
||||
}
|
||||
|
||||
// 通用查詢方法
|
||||
// 通用查詢方法 - 使用安全查詢確保連線釋放
|
||||
async query<T = any>(sql: string, params: any[] = []): Promise<T[]> {
|
||||
return await db.query<T>(sql, params);
|
||||
return await this.safeQuery<T>(sql, params);
|
||||
}
|
||||
|
||||
// 獲取儀表板統計數據
|
||||
@@ -764,21 +764,25 @@ export class UserService extends DatabaseServiceBase {
|
||||
}
|
||||
}
|
||||
|
||||
// 通用單一查詢方法
|
||||
// 通用單一查詢方法 - 使用安全查詢確保連線釋放
|
||||
async queryOne<T = any>(sql: string, params: any[] = []): Promise<T | null> {
|
||||
return await db.queryOne<T>(sql, params);
|
||||
return await this.safeQueryOne<T>(sql, params);
|
||||
}
|
||||
|
||||
// 獲取所有用戶
|
||||
async getAllUsers(limit = 50, offset = 0): Promise<User[]> {
|
||||
const sql = 'SELECT * FROM users ORDER BY created_at DESC LIMIT ? OFFSET ?';
|
||||
return await db.query<User>(sql, [limit, offset]);
|
||||
return await this.safeQuery<User>(sql, [limit, offset]);
|
||||
}
|
||||
|
||||
// 靜態方法保持向後兼容
|
||||
static async createUser(userData: Omit<User, 'id' | 'created_at' | 'updated_at'> & { id?: string }): Promise<User> {
|
||||
const service = new UserService();
|
||||
return await service.create(userData);
|
||||
// 確保 id 存在
|
||||
if (!userData.id) {
|
||||
userData.id = `user_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
|
||||
}
|
||||
return await service.create(userData as Omit<User, 'id' | 'created_at' | 'updated_at'> & { id: string });
|
||||
}
|
||||
|
||||
static async getUserByEmail(email: string): Promise<User | null> {
|
||||
@@ -2394,14 +2398,14 @@ export class AppService extends DatabaseServiceBase {
|
||||
}
|
||||
}
|
||||
|
||||
// 通用查詢方法
|
||||
// 通用查詢方法 - 使用安全查詢確保連線釋放
|
||||
async query<T = any>(sql: string, params: any[] = []): Promise<T[]> {
|
||||
return await db.query<T>(sql, params);
|
||||
return await this.safeQuery<T>(sql, params);
|
||||
}
|
||||
|
||||
// 通用單一查詢方法
|
||||
// 通用單一查詢方法 - 使用安全查詢確保連線釋放
|
||||
async queryOne<T = any>(sql: string, params: any[] = []): Promise<T | null> {
|
||||
return await db.queryOne<T>(sql, params);
|
||||
return await this.safeQueryOne<T>(sql, params);
|
||||
}
|
||||
|
||||
// 獲取應用評分統計
|
||||
@@ -3269,23 +3273,6 @@ export class AppService extends DatabaseServiceBase {
|
||||
}
|
||||
}
|
||||
|
||||
// 獲取應用的收藏數量
|
||||
async getAppFavoritesCount(appId: string): Promise<number> {
|
||||
try {
|
||||
const sql = `
|
||||
SELECT COUNT(*) as count
|
||||
FROM user_favorites
|
||||
WHERE app_id = ?
|
||||
`;
|
||||
|
||||
const result = await this.queryOne(sql, [appId]);
|
||||
return result.count || 0;
|
||||
} catch (error) {
|
||||
console.error('獲取應用收藏數量錯誤:', error);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
// 獲取用戶收藏的應用ID列表(不依賴 apps 表狀態)
|
||||
async getUserFavoriteAppIds(userId: string): Promise<string[]> {
|
||||
try {
|
||||
|
Reference in New Issue
Block a user