2026-03-04 18:07:18 +01:00
|
|
|
import { GraphQLError } from "graphql";
|
2026-03-04 18:42:58 +01:00
|
|
|
import { builder } from "../builder";
|
|
|
|
|
import { CurrentUserType, UserType } from "../types/index";
|
|
|
|
|
import { users } from "../../db/schema/index";
|
2026-03-04 18:07:18 +01:00
|
|
|
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) => {
|
2026-03-04 22:27:54 +01:00
|
|
|
const user = await ctx.db.select().from(users).where(eq(users.id, args.id)).limit(1);
|
2026-03-04 18:07:18 +01:00
|
|
|
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<string, unknown> = { date_updated: new Date() };
|
2026-03-04 22:27:54 +01:00
|
|
|
if (args.firstName !== undefined && args.firstName !== null)
|
|
|
|
|
updates.first_name = args.firstName;
|
2026-03-04 18:07:18 +01:00
|
|
|
if (args.lastName !== undefined && args.lastName !== null) updates.last_name = args.lastName;
|
2026-03-04 22:27:54 +01:00
|
|
|
if (args.artistName !== undefined && args.artistName !== null)
|
|
|
|
|
updates.artist_name = args.artistName;
|
|
|
|
|
if (args.description !== undefined && args.description !== null)
|
|
|
|
|
updates.description = args.description;
|
2026-03-04 18:07:18 +01:00
|
|
|
if (args.tags !== undefined && args.tags !== null) updates.tags = args.tags;
|
|
|
|
|
|
2026-03-04 22:27:54 +01:00
|
|
|
await ctx.db
|
|
|
|
|
.update(users)
|
|
|
|
|
.set(updates as any)
|
|
|
|
|
.where(eq(users.id, ctx.currentUser.id));
|
2026-03-04 18:07:18 +01:00
|
|
|
|
|
|
|
|
const updated = await ctx.db
|
|
|
|
|
.select()
|
|
|
|
|
.from(users)
|
|
|
|
|
.where(eq(users.id, ctx.currentUser.id))
|
|
|
|
|
.limit(1);
|
|
|
|
|
return updated[0] || null;
|
|
|
|
|
},
|
|
|
|
|
}),
|
|
|
|
|
);
|