102 lines
4.0 KiB
JavaScript
102 lines
4.0 KiB
JavaScript
const express = require("express");
|
||
const path = require("path");
|
||
const cors = require("cors");
|
||
require("dotenv").config();
|
||
const cookieParser = require("cookie-parser");
|
||
|
||
// Rotaların import edilmesi
|
||
const userRoutesneedRefactor = require("./routes/user.routes");
|
||
const dealRoutes = require("./routes/deal.routes");
|
||
const authRoutes = require("./routes/auth.routes");
|
||
const dealVoteRoutes = require("./routes/vote.routes");
|
||
const commentRoutes = require("./routes/comment.routes");
|
||
const accountSettingsRoutes = require("./routes/accountSettings.routes");
|
||
const userRoutes = require("./routes/user.routes");
|
||
const sellerRoutes = require("./routes/seller.routes");
|
||
const voteRoutes = require("./routes/vote.routes");
|
||
const commentLikeRoutes = require("./routes/commentLike.routes");
|
||
const categoryRoutes =require("./routes/category.routes")
|
||
const modRoutes = require("./routes/mod.routes")
|
||
const uploadRoutes = require("./routes/upload.routes")
|
||
const badgeRoutes = require("./routes/badge.routes")
|
||
const cacheRoutes = require("./routes/cache.routes")
|
||
const { ensureDealSearchIndex } = require("./services/redis/searchIndex.service")
|
||
const { seedRecentDealsToRedis, seedReferenceDataToRedis } = require("./services/redis/dealIndexing.service")
|
||
const { ensureCommentIdCounter } = require("./services/redis/commentId.service")
|
||
const { ensureDealIdCounter } = require("./services/redis/dealId.service")
|
||
const dealDb = require("./db/deal.db")
|
||
const { slugify } = require("./utils/slugify")
|
||
const { requestContextMiddleware } = require("./services/requestContext")
|
||
const app = express();
|
||
|
||
app.set("trust proxy", true)
|
||
|
||
// CORS middleware'ı ile dışardan gelen istekleri kontrol et
|
||
const allowedOrigins = new Set([
|
||
"http://192.168.1.205:3001",
|
||
"http://localhost:3001",
|
||
"http://localhost:3000",
|
||
]);
|
||
|
||
app.use(
|
||
cors({
|
||
origin(origin, cb) {
|
||
if (!origin) return cb(null, true);
|
||
if (allowedOrigins.has(origin)) return cb(null, true);
|
||
return cb(new Error("CORS_NOT_ALLOWED"));
|
||
},
|
||
credentials: true, // Cookies'in paylaşıma izin verilmesi
|
||
})
|
||
);
|
||
// JSON, URL encoded ve cookies'leri parse etme
|
||
app.use(express.json()); // JSON verisi almak için
|
||
app.use(express.urlencoded({ extended: true })); // URL encoded veriler için
|
||
app.use(cookieParser());
|
||
app.use(requestContextMiddleware) // Cookies'leri çözümlemek için
|
||
|
||
|
||
// API route'larını tanımlama
|
||
app.use("/api/users", userRoutesneedRefactor); // User işlemleri
|
||
app.use("/api/deals", dealRoutes); // Deal işlemleri
|
||
app.use("/api/auth", authRoutes); // Auth işlemleri (login, register vs.)
|
||
app.use("/api/deal-votes", dealVoteRoutes); // Deal oy işlemleri
|
||
app.use("/api/comments", commentRoutes); // Comment işlemleri
|
||
app.use("/api/account", accountSettingsRoutes); // Account settings işlemleri
|
||
app.use("/api/user", userRoutes); // Kullanıcı işlemleri
|
||
app.use("/api/seller", sellerRoutes); // Seller işlemleri
|
||
app.use("/api/vote", voteRoutes); // Vote işlemleri
|
||
app.use("/api/comment-likes", commentLikeRoutes); // Comment like işlemleri
|
||
app.use("/api/category", categoryRoutes);
|
||
app.use("/api/mod", modRoutes);
|
||
app.use("/api/uploads", uploadRoutes);
|
||
app.use("/api/badges", badgeRoutes);
|
||
app.use("/cache", cacheRoutes);
|
||
|
||
app.get("/api/openapi.json", (req, res) => {
|
||
res.sendFile(path.join(__dirname, "docs", "openapi.json"));
|
||
});
|
||
|
||
app.get("/api/docs", (req, res) => {
|
||
res.sendFile(path.join(__dirname, "docs", "swagger.html"));
|
||
});
|
||
|
||
async function startServer() {
|
||
try {
|
||
await ensureDealSearchIndex()
|
||
await seedReferenceDataToRedis()
|
||
await ensureDealIdCounter()
|
||
const ttlDays = Number(process.env.REDIS_DEAL_TTL_DAYS) || 31
|
||
await seedRecentDealsToRedis({ days: 31, ttlDays })
|
||
await ensureCommentIdCounter()
|
||
} catch (err) {
|
||
console.error("Redis init skipped:", err?.message || err)
|
||
}
|
||
// Sunucuyu dinlemeye ba??la
|
||
app.listen(3000, () => console.log("Server running on http://localhost:3000"));
|
||
}
|
||
|
||
startServer().catch((err) => {
|
||
console.error("Server failed to start:", err?.message || err)
|
||
process.exit(1)
|
||
})
|