Files
convex-monorepo/packages/backend/convex/notes.ts

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);
},
});