| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- //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;
|