This commit is contained in:
2026-09-06 20:54:19 -04:00
parent 7e285ffadd
commit f3a5d1799c
27 changed files with 3686 additions and 0 deletions
+105
View File
@@ -0,0 +1,105 @@
import express, {
type Request,
type Response,
type NextFunction,
} from "express";
import cors from "cors";
import session from "express-session";
import passport from "passport";
import bcrypt from "bcrypt";
import env from "./utils/env.js";
import { Strategy as LocalStrategy } from "passport-local";
import { prisma } from "database";
import { ZodError } from "zod";
// routes
import usersRoute from "./routers/users.js";
import postsRoute from "./routers/posts.js";
const app = express();
// passport strategy
passport.use(
new LocalStrategy(
{ usernameField: "email" },
async (email, password, done) => {
try {
const user = await prisma.user.findFirst({
where: {
email,
},
});
if (!user) return done(null, false, { message: "Bad credentials" });
const ok = await bcrypt.compare(password, user.password);
return ok
? done(null, user)
: done(null, false, { message: "Bad credentials" });
} catch (err) {
return done(err);
}
},
),
);
passport.serializeUser((user, done) => done(null, user.id));
passport.deserializeUser(async (id: number, done) => {
const user = await prisma.user.findFirst({
where: {
id,
},
});
done(null, user ?? false);
});
app.use(express.urlencoded({ extended: false }));
app.use(
session({
secret: env.SESSION_SECRET,
resave: false,
saveUninitialized: false,
}),
);
app.use(passport.session());
app.use(express.json());
if (env.NODE_ENV === "production") {
app.use(
cors({
origin: "blog.alexav.gg",
credentials: true,
}),
);
}
app.get("/", (req: Request, res: Response) => {
res.status(200).json({
status: 200,
});
});
app.use("/users", usersRoute);
app.use("/posts", postsRoute);
app.use(
(err: Error | ZodError, req: Request, res: Response, next: NextFunction) => {
if (err instanceof ZodError) {
res.status(400).json({
status: 400,
message: "Malformed request body",
issues: err.issues,
});
} else {
console.log(err);
res.status(500).json({
status: 500,
message:
"Sorry, an unexpected error occurred while performing that action",
});
}
},
);
app.listen(3000, () => {
console.log("Server started");
});