File size: 1,613 Bytes
3ec134e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9180083
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3ec134e
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
// backend/src/app.ts
import express from 'express';
import cors from 'cors';
import cookieParser from 'cookie-parser';
import { errorHandler } from './utils/errorHandler';
import { postsRouter } from './posts/router';
import { notesRouter } from './notes/router';
import { blogsRouter } from './blogs/router';
import { projectsRouter } from './projects/router';
import { uploadsRouter } from './uploads/router';
import { tagsRouter } from './tags/router';
import { authRouter } from './auth/router';

export const app = express();

// CORS ์„ค์ • (ํ”„๋ก ํŠธ์—”๋“œ ๋„๋ฉ”์ธ ๋ช…์‹œ)
app.use(cors({
  origin: process.env.FRONTEND_ORIGIN, // ํ”„๋ก ํŠธ์—”๋“œ App Service ๋„๋ฉ”์ธ
  credentials: true, // ์ฟ ํ‚ค ํ—ˆ์šฉ
}));

// JSON ํŒŒ์„œ
app.use(express.json({ limit: '5mb' }));

// ์ฟ ํ‚ค ํŒŒ์„œ
app.use(cookieParser());

// ๋ผ์šฐํ„ฐ ์—ฐ๊ฒฐ
app.use('/api/posts', postsRouter);
app.use('/api/notes', notesRouter);
app.use('/api/blogs', blogsRouter);
app.use('/api/projects', projectsRouter);
app.use('/api/uploads', uploadsRouter);
app.use('/api/tags', tagsRouter);
app.use('/api/auth', authRouter);

// ๊ธฐ๋ณธ ์•ˆ๋‚ด ํŽ˜์ด์ง€ (๋ฃจํŠธ ๊ฒฝ๋กœ)
app.get("/", (req, res) => {
  res.send(`
    <h1>Portfolio Core Backend</h1>
    <p>โœ… Backend is running.</p>
    <p>API endpoints are available under <code>/api/*</code>.</p>
    <p>Frontend: <a href="${process.env.FRONTEND_ORIGIN}">${process.env.FRONTEND_ORIGIN}</a></p>
  `);
});

// ํ—ฌ์Šค์ฒดํฌ ์—”๋“œํฌ์ธํŠธ
app.get("/health", (req, res) => {
  res.json({ status: "ok", timestamp: new Date().toISOString() });
});

// ์—๋Ÿฌ ํ•ธ๋“ค๋Ÿฌ
app.use(errorHandler);