mirror of
https://github.com/hex248/sprint.git
synced 2026-02-07 18:23:03 +00:00
40 lines
1.3 KiB
TypeScript
40 lines
1.3 KiB
TypeScript
import { UserUpdateRequestSchema } from "@issue/shared";
|
|
import type { AuthedRequest } from "../../auth/middleware";
|
|
import { hashPassword } from "../../auth/utils";
|
|
import { getUserById } from "../../db/queries";
|
|
import { errorResponse, parseJsonBody } from "../../validation";
|
|
|
|
export default async function update(req: AuthedRequest) {
|
|
const parsed = await parseJsonBody(req, UserUpdateRequestSchema);
|
|
if ("error" in parsed) return parsed.error;
|
|
|
|
const { name, password, avatarURL } = parsed.data;
|
|
|
|
const user = await getUserById(req.userId);
|
|
if (!user) {
|
|
return errorResponse("user not found", "USER_NOT_FOUND", 404);
|
|
}
|
|
|
|
if (!name && !password && avatarURL === undefined) {
|
|
return errorResponse(
|
|
"at least one of name, password, or avatarURL must be provided",
|
|
"NO_UPDATES",
|
|
400,
|
|
);
|
|
}
|
|
|
|
let passwordHash: string | undefined;
|
|
if (password !== undefined) {
|
|
passwordHash = await hashPassword(password);
|
|
}
|
|
|
|
const { updateById } = await import("../../db/queries/users");
|
|
const updatedUser = await updateById(user.id, { name, passwordHash, avatarURL });
|
|
|
|
if (!updatedUser) {
|
|
return errorResponse("failed to update user", "UPDATE_FAILED", 500);
|
|
}
|
|
|
|
return Response.json(updatedUser);
|
|
}
|