69 lines
1.7 KiB
TypeScript
69 lines
1.7 KiB
TypeScript
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;
|
|
},
|
|
});
|