//router/api.js const cookieSession = require("cookie-session"); const express = require("express"); const bodyParser = require("body-parser"); let db = require("../pass_db"); const router = express.Router(); router.use(bodyParser.json()); const WEATHER_API_KEY = process.env.WEATHER_API_KEY; const WEATHER_API_URL = process.env.WEATHER_API_URL; // 註冊 API router.post('/signup', (req, res) => { const { username, password } = req.body; if (db.createUser(username, password)) { // 註冊成功,進行自動登錄操作 req.session.username = username; res.status(200).json({ success: true, data: { username } }); } else { // 用戶名已存在 res.status(400).json({ success: false, error: 'Username is already taken.' }); } }); // 登錄 API router.post('/login', (req, res) => { const { username, password } = req.body; const user = db.authenticateUser(username, password); if (user) { req.session.username = username; res.status(200).json({ success: true, data: { username } }); } else { res.status(401).json({ success: false, error: 'Invalid username or password.' }); } }); // 登出 API router.post('/logout', (req, res) => { req.session = null; res.status(200).json({ success: true, data: null }); }); // 獲取會話 API router.get('/getSession', (req, res) => { if (req.session.username) { res.status(200).json({ success: true, data: { username: req.session.username } }); } else { res.status(200).json({ success: true, data: null }); } }); // 獲取投票數據 API router.get('/votes/list', (req, res) => { const votes = db.getVotesAllDays(); res.status(200).json({ success: true, data: votes }); }); // 設定投票 API (為SATIS Tier準備) router.post('/votes/set', (req, res) => { const { username, date, vote } = req.body; if (req.session.username === username) { db.placeVote(username, date, vote); res.status(200).json({ success: true }); } else { res.status(403).json({ success: false, error: "Unauthorized" }); } }); router.get("/weather", async (req, res) => { const { lat, lon } = req.query; try { const weatherResponse = await fetch( `${WEATHER_API_URL}?lat=${lat}&lon=${lon}&appid=${WEATHER_API_KEY}&units=metric` ); const weatherData = await weatherResponse.json(); if (!weatherResponse.ok) throw new Error("Weather API request failed."); res.json({ success: true, data: weatherData }); } catch (error) { console.error(error); res .status(500) .json({ success: false, error: "Failed to fetch weather data" }); } }); module.exports = router;