Add agent workflows & stuff
This commit is contained in:
@@ -0,0 +1,58 @@
|
||||
import { ConvexError, v } from 'convex/values';
|
||||
|
||||
import { mutation, query } from './_generated/server';
|
||||
import {
|
||||
getOwnedSpoon,
|
||||
getRequiredUserId,
|
||||
optionalText,
|
||||
requireText,
|
||||
} from './model';
|
||||
|
||||
export const listForSpoon = query({
|
||||
args: { spoonId: v.id('spoons') },
|
||||
handler: async (ctx, { spoonId }) => {
|
||||
const ownerId = await getRequiredUserId(ctx);
|
||||
await getOwnedSpoon(ctx, spoonId, ownerId);
|
||||
return await ctx.db
|
||||
.query('spoonRemotes')
|
||||
.withIndex('by_spoon', (q) => q.eq('spoonId', spoonId))
|
||||
.order('asc')
|
||||
.collect();
|
||||
},
|
||||
});
|
||||
|
||||
export const create = mutation({
|
||||
args: {
|
||||
spoonId: v.id('spoons'),
|
||||
label: v.string(),
|
||||
url: v.string(),
|
||||
remoteName: v.optional(v.string()),
|
||||
},
|
||||
handler: async (ctx, args) => {
|
||||
const ownerId = await getRequiredUserId(ctx);
|
||||
await getOwnedSpoon(ctx, args.spoonId, ownerId);
|
||||
const now = Date.now();
|
||||
return await ctx.db.insert('spoonRemotes', {
|
||||
spoonId: args.spoonId,
|
||||
ownerId,
|
||||
label: requireText(args.label, 'Remote label'),
|
||||
url: requireText(args.url, 'Remote URL'),
|
||||
remoteName: optionalText(args.remoteName),
|
||||
createdAt: now,
|
||||
updatedAt: now,
|
||||
});
|
||||
},
|
||||
});
|
||||
|
||||
export const remove = mutation({
|
||||
args: { remoteId: v.id('spoonRemotes') },
|
||||
handler: async (ctx, { remoteId }) => {
|
||||
const ownerId = await getRequiredUserId(ctx);
|
||||
const remote = await ctx.db.get(remoteId);
|
||||
if (remote?.ownerId !== ownerId) {
|
||||
throw new ConvexError('Remote not found.');
|
||||
}
|
||||
await ctx.db.delete(remoteId);
|
||||
return { success: true };
|
||||
},
|
||||
});
|
||||
Reference in New Issue
Block a user