mkdir anpi-app
cd anpi-app
npm init -y
npm install express sqlite3
mkdir public
// server.js
const express = require(“express”);
const sqlite3 = require(“sqlite3”).verbose();
const path = require(“path”);
const app = express();
const PORT = 3000;
// JSONとフォームデータを受け取るための設定
app.use(express.json());
app.use(express.urlencoded({ extended: true }));
// public 配下を静的ファイルとして配信
app.use(express.static(path.join(__dirname, “public”)));
// — SQLite DB 設定 —
const dbFile = path.join(__dirname, “safety.db”);
const db = new sqlite3.Database(dbFile);
// テーブル作成(初回のみ実行される)
db.serialize(() => {
db.run(CREATE TABLE IF NOT EXISTS reports ( id INTEGER PRIMARY KEY AUTOINCREMENT, employee_id TEXT, name TEXT, department TEXT, status TEXT, can_work TEXT, message TEXT, created_at TEXT )
);
});
// — API定義 —
// 安否報告(登録)
app.post(“/api/report”, (req, res) => {
const { employeeId, name, department, status, canWork, message } = req.body;
if (!employeeId || !name || !department || !status || !canWork) {
return res.status(400).json({ error: “必須項目が入力されていません。” });
}
const createdAt = new Date().toISOString();
db.run(INSERT INTO reports (employee_id, name, department, status, can_work, message, created_at) VALUES (?, ?, ?, ?, ?, ?, ?),
[employeeId, name, department, status, canWork, message || “”, createdAt],
function (err) {
if (err) {
console.error(err);
return res.status(500).json({ error: “データ登録に失敗しました。” });
}
return res.json({ id: this.lastID, message: “安否情報を登録しました。” });
}
);
});
// 安否報告一覧(管理者用)
app.get(“/api/reports”, (req, res) => {
const { department } = req.query;
let query = “SELECT * FROM reports”;
const params = [];
if (department && department !== “all”) {
query += ” WHERE department = ?”;
params.push(department);
}
query += ” ORDER BY created_at DESC”;
db.all(query, params, (err, rows) => {
if (err) {
console.error(err);
return res.status(500).json({ error: “データ取得に失敗しました。” });
}
return res.json(rows);
});
});
// ヘルスチェック
app.get(“/api/health”, (req, res) => {
res.json({ status: “ok” });
});
// サーバ起動
app.listen(PORT, () => {
console.log(安否確認アプリ サーバ起動: http://localhost:${PORT});
});


