refactor: 提取 validation.ts 和 amap.ts,统一 API 路由校验逻辑
新增 validation.ts(用户名/密码/邮箱/内容/房间名/必填字段校验) 和 amap.ts(AMAP API key 校验),消除 7 个路由中的重复验证代码。
This commit is contained in:
@@ -2,17 +2,15 @@ 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 = username.trim();
|
||||
if (trimmedUsername.length < 2 || trimmedUsername.length > 16) {
|
||||
throw new ApiError("用户名需要 2-16 个字符");
|
||||
}
|
||||
if (password.length < 6) throw new ApiError("密码至少 6 个字符");
|
||||
const trimmedUsername = validateUsername(username);
|
||||
validatePassword(password);
|
||||
|
||||
const existing = await prisma.user.findUnique({ where: { username: trimmedUsername } });
|
||||
if (existing) throw new ApiError("用户名已被注册", 409);
|
||||
|
||||
Reference in New Issue
Block a user