mirror of https://github.com/msgbyte/tailchat
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
113 lines
2.7 KiB
TypeScript
113 lines
2.7 KiB
TypeScript
3 years ago
|
import { mongoose } from '@typegoose/typegoose';
|
||
|
import { config } from 'tailchat-server-sdk';
|
||
|
import User from '../models/user/user';
|
||
|
import inquirer from 'inquirer';
|
||
|
import RedisClient from 'ioredis';
|
||
|
import Group from '../models/group/group';
|
||
|
|
||
|
/**
|
||
|
* 运维脚本: 修改服务端路径在数据库中的存储
|
||
|
* 连接mongodb与redis
|
||
|
* 修改头像路径
|
||
|
*/
|
||
|
|
||
|
const redis = new RedisClient(config.redisUrl);
|
||
|
const conn = mongoose.connect(config.mongoUrl);
|
||
|
|
||
|
(async () => {
|
||
|
const { from, to } = await inquirer.prompt([
|
||
|
{
|
||
|
type: 'input',
|
||
|
name: 'from',
|
||
|
message: `原始路径`,
|
||
|
default: 'http://127.0.0.1:14320/',
|
||
|
},
|
||
|
{
|
||
|
type: 'input',
|
||
|
name: 'to',
|
||
|
message: `修改后路径?`,
|
||
|
default: 'http://127.0.0.1:11000/',
|
||
|
},
|
||
|
]);
|
||
|
|
||
|
console.log('正在连接数据库...');
|
||
|
await Promise.resolve(conn);
|
||
|
|
||
|
try {
|
||
|
console.log('正在查询符合条件的记录...');
|
||
|
|
||
|
const userList = await User.find({
|
||
|
avatar: {
|
||
|
$regex: `^${from}`,
|
||
|
},
|
||
|
});
|
||
|
|
||
|
const groupList = await Group.find({
|
||
|
avatar: {
|
||
|
$regex: `^${from}`,
|
||
|
},
|
||
|
});
|
||
|
|
||
|
if (userList.length === 0 && groupList.length === 0) {
|
||
|
console.log('没有找到符合条件的记录。');
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
console.log('找到符合条件的记录如下:');
|
||
|
console.log('-----------用户-----------');
|
||
|
for (const item of userList) {
|
||
|
console.log(
|
||
|
`- ${item.email || item.username}(${item.avatar})\n -> ${String(
|
||
|
item.avatar
|
||
|
).replace(from, to)}`
|
||
|
);
|
||
|
}
|
||
|
|
||
|
console.log('-----------群组-----------');
|
||
|
for (const item of groupList) {
|
||
|
console.log(
|
||
|
`- ${item.name}(${item.avatar})\n -> ${String(item.avatar).replace(
|
||
|
from,
|
||
|
to
|
||
|
)}`
|
||
|
);
|
||
|
}
|
||
|
|
||
|
const { confirm } = await inquirer.prompt([
|
||
|
{
|
||
|
type: 'confirm',
|
||
|
name: 'confirm',
|
||
|
message: `确定要修改${userList.length + groupList.length}条记录么?`,
|
||
|
default: false,
|
||
|
},
|
||
|
]);
|
||
|
|
||
|
if (confirm === false) {
|
||
|
console.log('已取消');
|
||
|
return;
|
||
|
}
|
||
|
|
||
|
await Promise.all([
|
||
|
...userList.map((item) => {
|
||
|
item.avatar = String(item.avatar).replace(from, to);
|
||
|
return item.save();
|
||
|
}),
|
||
|
...groupList.map((item) => {
|
||
|
item.avatar = String(item.avatar).replace(from, to);
|
||
|
return item.save();
|
||
|
}),
|
||
|
]);
|
||
|
console.log('数据库修改完成, 正在清理缓存');
|
||
|
|
||
|
const keys = await redis.keys('MOL-user.resolveToken:*');
|
||
|
await redis.del(keys);
|
||
|
|
||
|
console.log(`缓存清理完成, 清理缓存: ${keys.length} 条`);
|
||
|
} catch (e) {
|
||
|
console.error(e);
|
||
|
}
|
||
|
})().finally(() => {
|
||
|
mongoose.connection.close();
|
||
|
redis.disconnect();
|
||
|
});
|