iconPreference schema implementation

This commit is contained in:
Oliver Bryan
2026-01-17 21:24:48 +00:00
parent 3daed78521
commit 05022d7661
4 changed files with 20 additions and 7 deletions

View File

@@ -1,4 +1,4 @@
import { User, type UserRecord } from "@sprint/shared"; import { type IconStyle, User, type UserRecord } from "@sprint/shared";
import { eq } from "drizzle-orm"; import { eq } from "drizzle-orm";
import { db } from "../client"; import { db } from "../client";
@@ -23,6 +23,7 @@ export async function updateById(
name?: string; name?: string;
passwordHash?: string; passwordHash?: string;
avatarURL?: string | null; avatarURL?: string | null;
iconPreference?: IconStyle;
}, },
): Promise<UserRecord | undefined> { ): Promise<UserRecord | undefined> {
const [user] = await db.update(User).set(updates).where(eq(User.id, id)).returning(); const [user] = await db.update(User).set(updates).where(eq(User.id, id)).returning();

View File

@@ -33,7 +33,13 @@ export default async function login(req: BunRequest) {
return new Response( return new Response(
JSON.stringify({ JSON.stringify({
user: { id: user.id, name: user.name, username: user.username, avatarURL: user.avatarURL }, user: {
id: user.id,
name: user.name,
username: user.username,
avatarURL: user.avatarURL,
iconPreference: user.iconPreference,
},
csrfToken: session.csrfToken, csrfToken: session.csrfToken,
}), }),
{ {

View File

@@ -34,7 +34,13 @@ export default async function register(req: BunRequest) {
return new Response( return new Response(
JSON.stringify({ JSON.stringify({
user: { id: user.id, name: user.name, username: user.username, avatarURL: user.avatarURL }, user: {
id: user.id,
name: user.name,
username: user.username,
avatarURL: user.avatarURL,
iconPreference: user.iconPreference,
},
csrfToken: session.csrfToken, csrfToken: session.csrfToken,
}), }),
{ {

View File

@@ -8,16 +8,16 @@ export default async function update(req: AuthedRequest) {
const parsed = await parseJsonBody(req, UserUpdateRequestSchema); const parsed = await parseJsonBody(req, UserUpdateRequestSchema);
if ("error" in parsed) return parsed.error; if ("error" in parsed) return parsed.error;
const { name, password, avatarURL } = parsed.data; const { name, password, avatarURL, iconPreference } = parsed.data;
const user = await getUserById(req.userId); const user = await getUserById(req.userId);
if (!user) { if (!user) {
return errorResponse("user not found", "USER_NOT_FOUND", 404); return errorResponse("user not found", "USER_NOT_FOUND", 404);
} }
if (!name && !password && avatarURL === undefined) { if (!name && !password && avatarURL === undefined && !iconPreference) {
return errorResponse( return errorResponse(
"at least one of name, password, or avatarURL must be provided", "at least one of name, password, avatarURL, or iconPreference must be provided",
"NO_UPDATES", "NO_UPDATES",
400, 400,
); );
@@ -29,7 +29,7 @@ export default async function update(req: AuthedRequest) {
} }
const { updateById } = await import("../../db/queries/users"); const { updateById } = await import("../../db/queries/users");
const updatedUser = await updateById(user.id, { name, passwordHash, avatarURL }); const updatedUser = await updateById(user.id, { name, passwordHash, avatarURL, iconPreference });
if (!updatedUser) { if (!updatedUser) {
return errorResponse("failed to update user", "UPDATE_FAILED", 500); return errorResponse("failed to update user", "UPDATE_FAILED", 500);