feat: add switch orgs in org

This commit is contained in:
xion 2024-10-17 01:55:05 +08:00
parent 430a403f25
commit cffaf48641
2 changed files with 22 additions and 6 deletions

View File

@ -26,6 +26,10 @@ export class User extends Model {
declare orgId: string; declare orgId: string;
declare email: string; declare email: string;
declare avatar: string; declare avatar: string;
tokenUser: any;
setTokenUser(tokenUser: any) {
this.tokenUser = tokenUser;
}
async createToken(uid?: string) { async createToken(uid?: string) {
const { id, username, type } = this; const { id, username, type } = this;
const expireTime = 60 * 60 * 24 * 7; // 7 days const expireTime = 60 * 60 * 24 * 7; // 7 days
@ -91,7 +95,12 @@ export class User extends Model {
}; };
} }
async getOrgs() { async getOrgs() {
const id = this.id; let id = this.id;
if (this.type === 'org') {
if (this.tokenUser && this.tokenUser.uid) {
id = this.tokenUser.uid;
}
}
const cache = await redis.get(`user:${id}:orgs`); const cache = await redis.get(`user:${id}:orgs`);
if (cache) { if (cache) {
return JSON.parse(cache); return JSON.parse(cache);
@ -109,9 +118,14 @@ export class User extends Model {
}, },
}); });
const orgNames = orgs.map((org) => org.username); const orgNames = orgs.map((org) => org.username);
if (orgNames.length > 0) {
await redis.set(`user:${id}:orgs`, JSON.stringify(orgNames), 'EX', 60 * 60); // 1 hour await redis.set(`user:${id}:orgs`, JSON.stringify(orgNames), 'EX', 60 * 60); // 1 hour
}
return orgNames; return orgNames;
} }
async expireOrgs() {
await redis.del(`user:${this.id}:orgs`);
}
} }
User.init( User.init(
{ {

View File

@ -10,14 +10,15 @@ app
middleware: ['auth'], middleware: ['auth'],
}) })
.define(async (ctx) => { .define(async (ctx) => {
const state = ctx.state?.tokenUser || {}; const tokenUser = ctx.state?.tokenUser || {};
const { id } = state; const { id } = tokenUser;
const user = await User.findByPk(id, { const user = await User.findByPk(id, {
logging: false, logging: false,
}); });
if (!user) { if (!user) {
throw new CustomError(500, 'user not found'); throw new CustomError(500, 'user not found');
} }
user.setTokenUser(tokenUser);
ctx.body = await user.getInfo(); ctx.body = await user.getInfo();
}) })
.addTo(app); .addTo(app);
@ -68,12 +69,13 @@ app
}) })
.define(async (ctx) => { .define(async (ctx) => {
const { username, password, description, avatar, email } = ctx.query.data || {}; const { username, password, description, avatar, email } = ctx.query.data || {};
const state = ctx.state?.tokenUser || {}; const tokenUser = ctx.state?.tokenUser || {};
const { id } = state; const { id } = tokenUser;
const user = await User.findByPk(id); const user = await User.findByPk(id);
if (!user) { if (!user) {
throw new CustomError(500, 'user not found'); throw new CustomError(500, 'user not found');
} }
user.setTokenUser(tokenUser);
if (username) { if (username) {
user.username = username; user.username = username;
} }