Refactor app management to use Drizzle ORM
- Replaced Sequelize models with Drizzle ORM for app and app list management. - Updated routes in app-manager to utilize new database queries. - Removed obsolete Sequelize model files for app, app list, and app domain. - Introduced new helper functions for app and app domain management. - Enhanced user app management with improved file handling and user migration. - Adjusted public API routes to align with new database structure. - Implemented caching mechanisms for domain management.
This commit is contained in:
@@ -1,9 +1,10 @@
|
||||
import { app } from '@/app.ts';
|
||||
import { app, db, schema } from '@/app.ts';
|
||||
import { User } from '@/models/user.ts';
|
||||
import { nanoid } from 'nanoid';
|
||||
import { CustomError } from '@kevisual/router';
|
||||
import { backupUserA, deleteUser, mvUserAToUserB } from '@/routes/file/index.ts';
|
||||
import { AppModel } from '@/routes/app-manager/index.ts';
|
||||
import { AppHelper } from '@/routes/app-manager/module/index.ts';
|
||||
import { eq } from 'drizzle-orm';
|
||||
// import { mvAppFromUserAToUserB } from '@/routes/app-manager/admin/mv-user-app.ts';
|
||||
|
||||
export const checkUsername = (username: string) => {
|
||||
@@ -43,7 +44,7 @@ export const toChangeName = async (opts: { id: number; newName: string; admin?:
|
||||
data.canChangeUsername = false;
|
||||
user.data = data;
|
||||
try {
|
||||
await user.save({ fields: ['username', 'data'] });
|
||||
await user.save();
|
||||
// 迁移文件数据
|
||||
await backupUserA(oldName, user.id); // 备份文件数据
|
||||
await mvUserAToUserB(oldName, newName, true); // 迁移文件数据
|
||||
@@ -53,7 +54,15 @@ export const toChangeName = async (opts: { id: number; newName: string; admin?:
|
||||
const type = user.type === 'org' ? 'org' : 'user';
|
||||
await User.clearUserToken(user.id, type); // 清除旧token
|
||||
}
|
||||
await AppModel.moveToNewUser(oldName, newName); // 更新用户数据
|
||||
// 更新应用数据中的用户名
|
||||
const apps = await db.select().from(schema.kvApp).where(eq(schema.kvApp.user, oldName));
|
||||
for (const appItem of apps) {
|
||||
const appData = appItem.data as any;
|
||||
const newFiles = await AppHelper.getNewFiles(appData.files || [], { oldUser: oldName, newUser: newName });
|
||||
await db.update(schema.kvApp)
|
||||
.set({ user: newName, data: { ...appData, files: newFiles }, updatedAt: new Date().toISOString() })
|
||||
.where(eq(schema.kvApp.id, appItem.id));
|
||||
}
|
||||
} catch (error) {
|
||||
console.error('迁移文件数据失败', error);
|
||||
ctx.throw(500, 'Failed to change username');
|
||||
@@ -93,7 +102,7 @@ app
|
||||
ctx.throw(400, 'Username is required');
|
||||
}
|
||||
checkUsername(username);
|
||||
const user = await User.findOne({ where: { username } });
|
||||
const user = await User.findOne({ username });
|
||||
|
||||
ctx.body = {
|
||||
id: user?.id,
|
||||
@@ -138,7 +147,7 @@ app
|
||||
ctx.throw(400, 'Username is required');
|
||||
}
|
||||
checkUsername(username);
|
||||
const findUserByUsername = await User.findOne({ where: { username } });
|
||||
const findUserByUsername = await User.findOne({ username });
|
||||
if (findUserByUsername) {
|
||||
ctx.throw(400, 'Username already exists');
|
||||
}
|
||||
@@ -165,7 +174,7 @@ app
|
||||
if (!user) {
|
||||
ctx.throw(404, 'User not found');
|
||||
}
|
||||
await user.destroy();
|
||||
await db.delete(schema.cfUser).where(eq(schema.cfUser.id, user.id));
|
||||
backupUserA(user.username, user.id);
|
||||
deleteUser(user.username);
|
||||
// TODO: EXPIRE 删除token
|
||||
|
||||
Reference in New Issue
Block a user