import type { APIRoute } from "astro";
import { getDb } from "@/lib/db";
import { communityUsers } from "@/lib/db/schema";
import { verifyPassword, signToken } from "@/lib/auth";
import { eq } from "drizzle-orm";
export const prerender = false;
export const POST: APIRoute = async ({ request, cookies }) => {
try {
const body = await request.json();
const { email, password } = body;
if (!email || !password) {
return new Response(JSON.stringify({ success: false, error: "Missing email or password" }), { status: 400 });
}
const db = getDb() as any;
const user = await db.query.communityUsers.findFirst({
where: eq(communityUsers.email, email)
});
if (!user) {
return new Response(JSON.stringify({ success: false, error: "Invalid credentials" }), { status: 401 });
}
const isValid = await verifyPassword(password, user.passwordHash);
if (!isValid) {
return new Response(JSON.stringify({ success: false, error: "Invalid credentials" }), { status: 401 });
}
const token = await signToken({ sub: user.id, username: user.username });
cookies.set("community_session", token, {
path: "/",
httpOnly: true,
secure: process.env.NODE_ENV === "production",
maxAge: 60 * 60 * 24 * 7,
});
return new Response(JSON.stringify({ success: true, data: { id: user.id, username: user.username } }), { status: 200 });
} catch (error: any) {
return new Response(JSON.stringify({ success: false, error: error.message || "Server error" }), { status: 500 });
}
};