103 lines
2.3 KiB
TypeScript
103 lines
2.3 KiB
TypeScript
import { v } from 'convex/values';
|
|
import { mutation, query } from './_generated/server';
|
|
|
|
export const connect = mutation({
|
|
args: {
|
|
userId: v.id('users'),
|
|
ragDatabaseId: v.id('ragDatabases'),
|
|
isGlobal: v.optional(v.boolean())
|
|
},
|
|
returns: v.id('ragConnections'),
|
|
handler: async (ctx, args) => {
|
|
const existing = await ctx.db
|
|
.query('ragConnections')
|
|
.withIndex('by_user_id_and_rag_database_id', (q) =>
|
|
q.eq('userId', args.userId).eq('ragDatabaseId', args.ragDatabaseId)
|
|
)
|
|
.unique();
|
|
|
|
if (existing) {
|
|
return existing._id;
|
|
}
|
|
|
|
return await ctx.db.insert('ragConnections', {
|
|
userId: args.userId,
|
|
ragDatabaseId: args.ragDatabaseId,
|
|
isGlobal: args.isGlobal ?? true,
|
|
createdAt: Date.now()
|
|
});
|
|
}
|
|
});
|
|
|
|
export const disconnect = mutation({
|
|
args: {
|
|
userId: v.id('users'),
|
|
ragDatabaseId: v.id('ragDatabases')
|
|
},
|
|
returns: v.boolean(),
|
|
handler: async (ctx, args) => {
|
|
const existing = await ctx.db
|
|
.query('ragConnections')
|
|
.withIndex('by_user_id_and_rag_database_id', (q) =>
|
|
q.eq('userId', args.userId).eq('ragDatabaseId', args.ragDatabaseId)
|
|
)
|
|
.unique();
|
|
|
|
if (!existing) {
|
|
return false;
|
|
}
|
|
|
|
await ctx.db.delete(existing._id);
|
|
return true;
|
|
}
|
|
});
|
|
|
|
export const getActiveForUser = query({
|
|
args: { userId: v.id('users') },
|
|
returns: v.array(
|
|
v.object({
|
|
_id: v.id('ragConnections'),
|
|
_creationTime: v.number(),
|
|
userId: v.id('users'),
|
|
ragDatabaseId: v.id('ragDatabases'),
|
|
isGlobal: v.boolean(),
|
|
createdAt: v.number()
|
|
})
|
|
),
|
|
handler: async (ctx, args) => {
|
|
return await ctx.db
|
|
.query('ragConnections')
|
|
.withIndex('by_user_id', (q) => q.eq('userId', args.userId))
|
|
.collect();
|
|
}
|
|
});
|
|
|
|
export const getByRagDatabaseId = query({
|
|
args: { ragDatabaseId: v.id('ragDatabases') },
|
|
returns: v.array(
|
|
v.object({
|
|
_id: v.id('ragConnections'),
|
|
_creationTime: v.number(),
|
|
userId: v.id('users'),
|
|
ragDatabaseId: v.id('ragDatabases'),
|
|
isGlobal: v.boolean(),
|
|
createdAt: v.number()
|
|
})
|
|
),
|
|
handler: async (ctx, args) => {
|
|
return await ctx.db
|
|
.query('ragConnections')
|
|
.withIndex('by_rag_database_id', (q) => q.eq('ragDatabaseId', args.ragDatabaseId))
|
|
.collect();
|
|
}
|
|
});
|
|
|
|
export const deleteConnection = mutation({
|
|
args: { connectionId: v.id('ragConnections') },
|
|
returns: v.null(),
|
|
handler: async (ctx, args) => {
|
|
await ctx.db.delete(args.connectionId);
|
|
return null;
|
|
}
|
|
});
|