1import { internalQuery, internalMutation } from './_generated/server';
2import { v } from 'convex/values';
3
4// Get user text preferences by userId
5export const getByUserId = internalQuery({
6 args: { userId: v.id('users') },
7 handler: async (ctx, { userId }) => {
8 const preferences = await ctx.db
9 .query('userTextPreferences')
10 .withIndex('by_userId', (q) => q.eq('userId', userId))
11 .first();
12
13 return preferences;
14 }
15});
16
17// Upsert user text preferences (create or update)
18export const upsert = internalMutation({
19 args: {
20 userId: v.id('users'),
21 defaultStyle: v.object({
22 fontFamily: v.string(),
23 fontSize: v.number(),
24 color: v.optional(v.string()),
25 gradient: v.optional(v.array(v.string())),
26 bold: v.boolean(),
27 italic: v.boolean(),
28 underline: v.boolean(),
29 strikethrough: v.boolean()
30 }),
31 allowFormatting: v.boolean(),
32 maxMessageLength: v.number()
33 },
34 handler: async (ctx, args) => {
35 const now = Date.now();
36
37 // Check if preferences already exist
38 const existing = await ctx.db
39 .query('userTextPreferences')
40 .withIndex('by_userId', (q) => q.eq('userId', args.userId))
41 .first();
42
43 if (existing) {
44 // Update existing preferences
45 return await ctx.db.patch(existing._id, {
46 defaultStyle: args.defaultStyle,
47 allowFormatting: args.allowFormatting,
48 maxMessageLength: args.maxMessageLength,
49 updatedAt: now
50 });
51 } else {
52 // Create new preferences
53 return await ctx.db.insert('userTextPreferences', {
54 userId: args.userId,
55 defaultStyle: args.defaultStyle,
56 allowFormatting: args.allowFormatting,
57 maxMessageLength: args.maxMessageLength,
58 createdAt: now,
59 updatedAt: now
60 });
61 }
62 }
63});