import { GraphQLError } from "graphql"; import { builder } from "../builder.js"; import { CurrentUserType, UserType } from "../types/index.js"; import { users } from "../../db/schema/index.js"; import { eq } from "drizzle-orm"; builder.queryField("me", (t) => t.field({ type: CurrentUserType, nullable: true, resolve: async (_root, _args, ctx) => { if (!ctx.currentUser) return null; const user = await ctx.db .select() .from(users) .where(eq(users.id, ctx.currentUser.id)) .limit(1); return user[0] || null; }, }), ); builder.queryField("userProfile", (t) => t.field({ type: UserType, nullable: true, args: { id: t.arg.string({ required: true }), }, resolve: async (_root, args, ctx) => { const user = await ctx.db .select() .from(users) .where(eq(users.id, args.id)) .limit(1); return user[0] || null; }, }), ); builder.mutationField("updateProfile", (t) => t.field({ type: CurrentUserType, nullable: true, args: { firstName: t.arg.string(), lastName: t.arg.string(), artistName: t.arg.string(), description: t.arg.string(), tags: t.arg.stringList(), }, resolve: async (_root, args, ctx) => { if (!ctx.currentUser) throw new GraphQLError("Unauthorized"); const updates: Record = { date_updated: new Date() }; if (args.firstName !== undefined && args.firstName !== null) updates.first_name = args.firstName; if (args.lastName !== undefined && args.lastName !== null) updates.last_name = args.lastName; if (args.artistName !== undefined && args.artistName !== null) updates.artist_name = args.artistName; if (args.description !== undefined && args.description !== null) updates.description = args.description; if (args.tags !== undefined && args.tags !== null) updates.tags = args.tags; await ctx.db.update(users).set(updates as any).where(eq(users.id, ctx.currentUser.id)); const updated = await ctx.db .select() .from(users) .where(eq(users.id, ctx.currentUser.id)) .limit(1); return updated[0] || null; }, }), );