You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

41 lines
1.3 KiB

import { dbGlobal } from "drizzle-pkg/lib/db";
import { users } from "drizzle-pkg/lib/schema/auth";
import { eq } from "drizzle-orm";
import { KNOWN_CONFIG_KEYS } from "#server/service/config/registry";
export default defineWrappedResponseHandler(async (event) => {
const user = await event.context.auth.requireUser();
const cacheKey = `config:me:${user.id}`;
const cached = await event.context.cache.get<{ user: unknown, config: unknown }>(cacheKey);
if (cached) return R.success(cached);
const entries = await Promise.all(
KNOWN_CONFIG_KEYS.map(async (key) => {
const value = await event.context.config.get(key);
return [key, value] as const;
}),
);
const [row] = await dbGlobal
.select({
nickname: users.nickname,
avatar: users.avatar,
})
.from(users)
.where(eq(users.id, user.id))
.limit(1);
const result = {
user: {
id: user.id,
username: user.username,
role: user.role,
nickname: row?.nickname ?? null,
avatar: row?.avatar ?? null,
},
config: Object.fromEntries(entries),
};
await event.context.cache.set(cacheKey, result, 60);
return R.success(result);
});