From cffaf48641567214100a31df258d926088ac1a46 Mon Sep 17 00:00:00 2001 From: xion Date: Thu, 17 Oct 2024 01:55:05 +0800 Subject: [PATCH] feat: add switch orgs in org --- src/models/user.ts | 18 ++++++++++++++++-- src/routes/user/me.ts | 10 ++++++---- 2 files changed, 22 insertions(+), 6 deletions(-) diff --git a/src/models/user.ts b/src/models/user.ts index dc4bfcc..a21a0e2 100644 --- a/src/models/user.ts +++ b/src/models/user.ts @@ -26,6 +26,10 @@ export class User extends Model { declare orgId: string; declare email: string; declare avatar: string; + tokenUser: any; + setTokenUser(tokenUser: any) { + this.tokenUser = tokenUser; + } async createToken(uid?: string) { const { id, username, type } = this; const expireTime = 60 * 60 * 24 * 7; // 7 days @@ -91,7 +95,12 @@ export class User extends Model { }; } 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`); if (cache) { return JSON.parse(cache); @@ -109,9 +118,14 @@ export class User extends Model { }, }); const orgNames = orgs.map((org) => org.username); - await redis.set(`user:${id}:orgs`, JSON.stringify(orgNames), 'EX', 60 * 60); // 1 hour + if (orgNames.length > 0) { + await redis.set(`user:${id}:orgs`, JSON.stringify(orgNames), 'EX', 60 * 60); // 1 hour + } return orgNames; } + async expireOrgs() { + await redis.del(`user:${this.id}:orgs`); + } } User.init( { diff --git a/src/routes/user/me.ts b/src/routes/user/me.ts index 39c5433..4902616 100644 --- a/src/routes/user/me.ts +++ b/src/routes/user/me.ts @@ -10,14 +10,15 @@ app middleware: ['auth'], }) .define(async (ctx) => { - const state = ctx.state?.tokenUser || {}; - const { id } = state; + const tokenUser = ctx.state?.tokenUser || {}; + const { id } = tokenUser; const user = await User.findByPk(id, { logging: false, }); if (!user) { throw new CustomError(500, 'user not found'); } + user.setTokenUser(tokenUser); ctx.body = await user.getInfo(); }) .addTo(app); @@ -68,12 +69,13 @@ app }) .define(async (ctx) => { const { username, password, description, avatar, email } = ctx.query.data || {}; - const state = ctx.state?.tokenUser || {}; - const { id } = state; + const tokenUser = ctx.state?.tokenUser || {}; + const { id } = tokenUser; const user = await User.findByPk(id); if (!user) { throw new CustomError(500, 'user not found'); } + user.setTokenUser(tokenUser); if (username) { user.username = username; }