initial commit

This commit is contained in:
Matthias
2026-06-15 11:33:23 +02:00
commit fc0a6fb975
155 changed files with 24526 additions and 0 deletions

68
convex/users.ts Normal file
View File

@@ -0,0 +1,68 @@
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;
},
});