get userId from session
This commit is contained in:
parent
d5e2312dd6
commit
4dcbfea875
5 changed files with 39 additions and 21 deletions
|
|
@ -5,6 +5,7 @@ import * as array from '../../utils/array';
|
|||
import * as object from '../../utils/object';
|
||||
import { internal } from './_generated/api';
|
||||
import { Provider } from '../../types';
|
||||
import { Doc } from './_generated/dataModel';
|
||||
|
||||
export const getModelKey = (args: { provider: Provider; model_id: string }) => {
|
||||
return `${args.provider}:${args.model_id}`;
|
||||
|
|
@ -12,12 +13,18 @@ export const getModelKey = (args: { provider: Provider; model_id: string }) => {
|
|||
|
||||
export const get_enabled = query({
|
||||
args: {
|
||||
user_id: v.string(),
|
||||
sessionToken: v.string(),
|
||||
},
|
||||
handler: async (ctx, args) => {
|
||||
handler: async (ctx, args): Promise<Record<string, Doc<'user_enabled_models'>>> => {
|
||||
const session = await ctx.runQuery(internal.betterAuth.getSession, {
|
||||
sessionToken: args.sessionToken,
|
||||
});
|
||||
|
||||
if (!session) throw new Error('Invalid session token');
|
||||
|
||||
const models = await ctx.db
|
||||
.query('user_enabled_models')
|
||||
.withIndex('by_user', (q) => q.eq('user_id', args.user_id))
|
||||
.withIndex('by_user', (q) => q.eq('user_id', session.userId))
|
||||
.collect();
|
||||
|
||||
return array.toMap(models, (m) => [getModelKey(m), m]);
|
||||
|
|
@ -26,15 +33,21 @@ export const get_enabled = query({
|
|||
|
||||
export const is_enabled = query({
|
||||
args: {
|
||||
user_id: v.string(),
|
||||
sessionToken: v.string(),
|
||||
provider: providerValidator,
|
||||
model_id: v.string(),
|
||||
},
|
||||
handler: async (ctx, args) => {
|
||||
handler: async (ctx, args): Promise<boolean> => {
|
||||
const session = await ctx.runQuery(internal.betterAuth.getSession, {
|
||||
sessionToken: args.sessionToken,
|
||||
});
|
||||
|
||||
if (!session) throw new Error('Invalid session token');
|
||||
|
||||
const model = await ctx.db
|
||||
.query('user_enabled_models')
|
||||
.withIndex('by_model_provider_user', (q) =>
|
||||
q.eq('model_id', args.model_id).eq('provider', args.provider).eq('user_id', args.user_id)
|
||||
q.eq('model_id', args.model_id).eq('provider', args.provider).eq('user_id', session.userId)
|
||||
)
|
||||
.first();
|
||||
|
||||
|
|
@ -46,13 +59,21 @@ export const get = query({
|
|||
args: {
|
||||
provider: providerValidator,
|
||||
model_id: v.string(),
|
||||
user_id: v.string(),
|
||||
sessionToken: v.string(),
|
||||
},
|
||||
handler: async (ctx, args) => {
|
||||
handler: async (ctx, args): Promise<Doc<'user_enabled_models'> | null> => {
|
||||
const session = await ctx.runQuery(internal.betterAuth.getSession, {
|
||||
sessionToken: args.sessionToken,
|
||||
});
|
||||
|
||||
if (!session) throw new Error('Invalid session token');
|
||||
|
||||
const model = await ctx.db
|
||||
.query('user_enabled_models')
|
||||
.withIndex('by_model_provider_user', (q) =>
|
||||
q.eq('model_id', args.model_id).eq('provider', args.provider).eq('user_id', args.user_id)
|
||||
q.eq('model_id', args.model_id)
|
||||
.eq('provider', args.provider)
|
||||
.eq('user_id', session.userId)
|
||||
)
|
||||
.first();
|
||||
|
||||
|
|
@ -64,18 +85,15 @@ export const set = mutation({
|
|||
args: {
|
||||
provider: providerValidator,
|
||||
model_id: v.string(),
|
||||
user_id: v.string(),
|
||||
enabled: v.boolean(),
|
||||
session_token: v.string(),
|
||||
sessionToken: v.string(),
|
||||
},
|
||||
handler: async (ctx, args) => {
|
||||
const session = await ctx.runQuery(internal.betterAuth.getSession, {
|
||||
sessionToken: args.session_token,
|
||||
sessionToken: args.sessionToken,
|
||||
});
|
||||
|
||||
if (!session) {
|
||||
throw new Error('Unauthorized');
|
||||
}
|
||||
if (!session) throw new Error('Invalid session token');
|
||||
|
||||
const existing = await ctx.db
|
||||
.query('user_enabled_models')
|
||||
|
|
@ -90,7 +108,8 @@ export const set = mutation({
|
|||
await ctx.db.delete(existing._id);
|
||||
} else {
|
||||
await ctx.db.insert('user_enabled_models', {
|
||||
...object.pick(args, ['provider', 'model_id', 'user_id']),
|
||||
...object.pick(args, ['provider', 'model_id']),
|
||||
user_id: session.userId,
|
||||
pinned: null,
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ export class Models {
|
|||
|
||||
init = createInit(() => {
|
||||
const query = useCachedQuery(api.user_enabled_models.get_enabled, {
|
||||
user_id: session.current?.user.id ?? '',
|
||||
sessionToken: session.current?.session.token ?? '',
|
||||
});
|
||||
watch(
|
||||
() => $state.snapshot(query.data),
|
||||
|
|
|
|||
|
|
@ -45,10 +45,9 @@
|
|||
const res = await ResultAsync.fromPromise(
|
||||
client.mutation(api.user_enabled_models.set, {
|
||||
provider,
|
||||
user_id: session.current.user.id,
|
||||
model_id: model.id,
|
||||
enabled: v,
|
||||
session_token: session.current?.session.token,
|
||||
sessionToken: session.current?.session.token,
|
||||
}),
|
||||
(e) => e
|
||||
);
|
||||
|
|
|
|||
|
|
@ -52,7 +52,7 @@ async function generateAIResponse(
|
|||
client.query(api.user_enabled_models.get, {
|
||||
provider: Provider.OpenRouter,
|
||||
model_id: modelId,
|
||||
user_id: session.userId,
|
||||
sessionToken: session.token,
|
||||
}),
|
||||
(e) => `Failed to get model: ${e}`
|
||||
);
|
||||
|
|
|
|||
|
|
@ -11,7 +11,7 @@
|
|||
let { class: className }: Props = $props();
|
||||
|
||||
const enabledModelsQuery = useCachedQuery(api.user_enabled_models.get_enabled, {
|
||||
user_id: session.current?.user.id ?? '',
|
||||
sessionToken: session.current?.session.token ?? '',
|
||||
});
|
||||
|
||||
const enabledArr = $derived(Object.values(enabledModelsQuery.data ?? {}));
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue