import { query, mutation } from "./_generated/server"; import { v } from "convex/values"; import { getAuthUserId } from "@convex-dev/auth/server"; import { DEFAULT_APP_SETTINGS, DEFAULT_CATEGORIES } from "./lib/seedCategories"; import { requireUserId } from "./lib/helpers"; export const currentUser = query({ args: {}, returns: v.union( v.object({ _id: v.id("users"), _creationTime: v.number(), name: v.optional(v.string()), email: v.optional(v.string()), emailVerificationTime: v.optional(v.number()), image: v.optional(v.string()), isAnonymous: v.optional(v.boolean()), }), v.null(), ), handler: async (ctx) => { const userId = await getAuthUserId(ctx); if (!userId) return null; return await ctx.db.get("users", userId); }, }); export const ensureSeeded = mutation({ args: {}, returns: v.null(), handler: async (ctx) => { const userId = await requireUserId(ctx); const existingCategories = await ctx.db .query("categories") .withIndex("by_user", (q) => q.eq("userId", userId)) .first(); if (!existingCategories) { for (const cat of DEFAULT_CATEGORIES) { await ctx.db.insert("categories", { userId, name: cat.name, kind: cat.kind, block: cat.block, color: cat.color, icon: cat.icon, sortOrder: cat.sortOrder, isSystem: true, }); } } const existingSettings = await ctx.db .query("appSettings") .withIndex("by_user", (q) => q.eq("userId", userId)) .unique(); if (!existingSettings) { await ctx.db.insert("appSettings", { userId, ...DEFAULT_APP_SETTINGS, }); } return null; }, });