🎯 프로젝트 리브랜딩: Kumamoto → Travel Planner v2.0
✨ 주요 변경사항: - 프로젝트 이름: kumamoto-travel-planner → travel-planner - 버전 업그레이드: v1.0.0 → v2.0.0 - 멀티유저 시스템 구현 (JWT 인증) - PostgreSQL 마이그레이션 시스템 추가 - Docker 컨테이너 이름 변경 - UI 브랜딩 업데이트 (Travel Planner) - API 서버 및 인증 시스템 추가 - 여행 공유 기능 구현 - 템플릿 시스템 추가 🔧 기술 스택: - Frontend: React + TypeScript + Vite - Backend: Node.js + Express + JWT - Database: PostgreSQL + 마이그레이션 - Infrastructure: Docker + Docker Compose 🌟 새로운 기능: - 사용자 인증 및 권한 관리 - 다중 여행 계획 관리 - 여행 템플릿 시스템 - 공유 링크 및 댓글 시스템 - 관리자 대시보드
This commit is contained in:
77
server/routes/basePoints.js
Normal file
77
server/routes/basePoints.js
Normal file
@@ -0,0 +1,77 @@
|
||||
const express = require('express');
|
||||
const { query } = require('../db');
|
||||
|
||||
const router = express.Router();
|
||||
|
||||
// 모든 기본 포인트 조회
|
||||
router.get('/', async (req, res) => {
|
||||
try {
|
||||
const result = await query(
|
||||
'SELECT * FROM base_points ORDER BY created_at DESC'
|
||||
);
|
||||
|
||||
const basePoints = result.rows.map(row => ({
|
||||
id: row.id.toString(),
|
||||
name: row.name,
|
||||
address: row.address,
|
||||
type: row.type,
|
||||
coordinates: {
|
||||
lat: parseFloat(row.lat),
|
||||
lng: parseFloat(row.lng)
|
||||
},
|
||||
memo: row.memo
|
||||
}));
|
||||
|
||||
res.json(basePoints);
|
||||
} catch (error) {
|
||||
console.error('Error fetching base points:', error);
|
||||
res.status(500).json({ error: error.message });
|
||||
}
|
||||
});
|
||||
|
||||
// 기본 포인트 추가
|
||||
router.post('/', async (req, res) => {
|
||||
try {
|
||||
const { name, address, type, coordinates, memo } = req.body;
|
||||
|
||||
const result = await query(
|
||||
`INSERT INTO base_points (name, address, type, lat, lng, memo)
|
||||
VALUES ($1, $2, $3, $4, $5, $6)
|
||||
RETURNING *`,
|
||||
[name, address || null, type, coordinates.lat, coordinates.lng, memo || null]
|
||||
);
|
||||
|
||||
const basePoint = {
|
||||
id: result.rows[0].id.toString(),
|
||||
name: result.rows[0].name,
|
||||
address: result.rows[0].address,
|
||||
type: result.rows[0].type,
|
||||
coordinates: {
|
||||
lat: parseFloat(result.rows[0].lat),
|
||||
lng: parseFloat(result.rows[0].lng)
|
||||
},
|
||||
memo: result.rows[0].memo
|
||||
};
|
||||
|
||||
res.json(basePoint);
|
||||
} catch (error) {
|
||||
console.error('Error creating base point:', error);
|
||||
res.status(500).json({ error: error.message });
|
||||
}
|
||||
});
|
||||
|
||||
// 기본 포인트 삭제
|
||||
router.delete('/:id', async (req, res) => {
|
||||
try {
|
||||
const { id } = req.params;
|
||||
|
||||
await query('DELETE FROM base_points WHERE id = $1', [id]);
|
||||
|
||||
res.json({ success: true });
|
||||
} catch (error) {
|
||||
console.error('Error deleting base point:', error);
|
||||
res.status(500).json({ error: error.message });
|
||||
}
|
||||
});
|
||||
|
||||
module.exports = router;
|
||||
Reference in New Issue
Block a user