72 lines
1.6 KiB
TypeScript
72 lines
1.6 KiB
TypeScript
import { Auth } from "convex/server";
|
|
import { v } from "convex/values";
|
|
|
|
import { internal } from "../convex/_generated/api";
|
|
import { mutation, query } from "./_generated/server";
|
|
|
|
export const getUserId = async (ctx: { auth: Auth }) => {
|
|
return (await ctx.auth.getUserIdentity())?.subject;
|
|
};
|
|
|
|
// Get all notes for a specific user
|
|
export const getNotes = query({
|
|
args: {},
|
|
handler: async (ctx) => {
|
|
const userId = await getUserId(ctx);
|
|
if (!userId) return null;
|
|
|
|
const notes = await ctx.db
|
|
.query("notes")
|
|
.filter((q) => q.eq(q.field("userId"), userId))
|
|
.collect();
|
|
|
|
return notes;
|
|
},
|
|
});
|
|
|
|
// Get note for a specific note
|
|
export const getNote = query({
|
|
args: {
|
|
id: v.optional(v.id("notes")),
|
|
},
|
|
handler: async (ctx, args) => {
|
|
const { id } = args;
|
|
if (!id) return null;
|
|
const note = await ctx.db.get(id);
|
|
return note;
|
|
},
|
|
});
|
|
|
|
// Create a new note for a user
|
|
export const createNote = mutation({
|
|
args: {
|
|
title: v.string(),
|
|
content: v.string(),
|
|
isSummary: v.boolean(),
|
|
},
|
|
handler: async (ctx, { title, content, isSummary }) => {
|
|
const userId = await getUserId(ctx);
|
|
if (!userId) throw new Error("User not found");
|
|
const noteId = await ctx.db.insert("notes", { userId, title, content });
|
|
|
|
if (isSummary) {
|
|
await ctx.scheduler.runAfter(0, internal.openai.summary, {
|
|
id: noteId,
|
|
title,
|
|
content,
|
|
});
|
|
}
|
|
|
|
return noteId;
|
|
},
|
|
});
|
|
|
|
export const deleteNote = mutation({
|
|
args: {
|
|
noteId: v.id("notes"),
|
|
},
|
|
handler: async (ctx, args) => {
|
|
await ctx.db.delete(args.noteId);
|
|
},
|
|
});
|