1229bb849b
新增 validation.ts(用户名/密码/邮箱/内容/房间名/必填字段校验) 和 amap.ts(AMAP API key 校验),消除 7 个路由中的重复验证代码。
34 lines
992 B
TypeScript
34 lines
992 B
TypeScript
import { NextResponse } from "next/server";
|
|
import { prisma } from "@/lib/prisma";
|
|
import bcrypt from "bcryptjs";
|
|
import { apiHandler, ApiError } from "@/lib/api";
|
|
import { validateUsername, validatePassword } from "@/lib/validation";
|
|
|
|
export const POST = apiHandler(async (req) => {
|
|
const { username, password, avatar } = await req.json();
|
|
|
|
if (!username || !password) throw new ApiError("用户名和密码为必填项");
|
|
|
|
const trimmedUsername = validateUsername(username);
|
|
validatePassword(password);
|
|
|
|
const existing = await prisma.user.findUnique({ where: { username: trimmedUsername } });
|
|
if (existing) throw new ApiError("用户名已被注册", 409);
|
|
|
|
const passwordHash = await bcrypt.hash(password, 10);
|
|
|
|
const user = await prisma.user.create({
|
|
data: {
|
|
username: trimmedUsername,
|
|
passwordHash,
|
|
avatar: avatar || "🐱",
|
|
},
|
|
});
|
|
|
|
return NextResponse.json({
|
|
id: user.id,
|
|
username: user.username,
|
|
avatar: user.avatar,
|
|
});
|
|
});
|