- Move services/nextjs to nextjs/ - Move deploy/docker/Dockerfile.prod to Dockerfile - Add GitHub Actions workflows (ci.yml, build.yml) - Remove deploy/, services/, scripts/ folders
77 lines
1.8 KiB
TypeScript
77 lines
1.8 KiB
TypeScript
import { NextRequest, NextResponse } from 'next/server'
|
|
import { createUser, generateToken } from '@/shared/lib/auth'
|
|
import { db } from '@/shared/lib/db'
|
|
|
|
export async function POST(req: NextRequest) {
|
|
try {
|
|
const { email, password, name } = await req.json()
|
|
|
|
// Validation
|
|
if (!email || !password) {
|
|
return NextResponse.json(
|
|
{ error: 'Email and password are required' },
|
|
{ status: 400 }
|
|
)
|
|
}
|
|
|
|
if (password.length < 6) {
|
|
return NextResponse.json(
|
|
{ error: 'Password must be at least 6 characters' },
|
|
{ status: 400 }
|
|
)
|
|
}
|
|
|
|
// Check if user already exists
|
|
const existingUser = await db.user.findUnique({
|
|
where: { email },
|
|
})
|
|
|
|
if (existingUser) {
|
|
return NextResponse.json(
|
|
{ error: 'User already exists' },
|
|
{ status: 400 }
|
|
)
|
|
}
|
|
|
|
// Create user
|
|
const user = await createUser(email, password, name)
|
|
|
|
// Generate JWT token
|
|
const token = generateToken({
|
|
userId: user.id,
|
|
email: user.email,
|
|
})
|
|
|
|
// Create response with user data
|
|
const response = NextResponse.json(
|
|
{
|
|
message: 'User created successfully',
|
|
token,
|
|
user: {
|
|
id: user.id,
|
|
email: user.email,
|
|
name: user.name,
|
|
}
|
|
},
|
|
{ status: 201 }
|
|
)
|
|
|
|
// Set auth token in cookie (HttpOnly for security)
|
|
response.cookies.set('auth-token', token, {
|
|
httpOnly: true,
|
|
secure: process.env.NODE_ENV === 'production',
|
|
sameSite: 'lax',
|
|
maxAge: 60 * 60 * 24 * 7, // 7 days
|
|
path: '/',
|
|
})
|
|
|
|
return response
|
|
} catch (error) {
|
|
console.error('Registration error:', error)
|
|
return NextResponse.json(
|
|
{ error: 'Internal server error' },
|
|
{ status: 500 }
|
|
)
|
|
}
|
|
}
|