// server.
js
const express = require('express');
const db = require('./[Link]');
const cors = require('cors');
const app = express();
const PORT = 3001;
[Link](cors());
[Link]([Link]({ limit: '10mb' }));
/* -------------------- ENVIRONMENTAL DATA -------------------- */
[Link]('/api/environmental-data', (req, res) => {
const data = [];
for (let i = 29; i >= 0; i--) {
const date = new Date();
[Link]([Link]() - i);
[Link]({
timestamp: [Link]().split('T')[0],
airQuality: +(20 + [Link]() * 50).toFixed(2),
waterQuality: +(6 + [Link]() * 2).toFixed(2),
noiseLevel: +(50 + [Link]() * 20).toFixed(2),
});
}
[Link]({ message: 'success', data });
});
[Link]("/api/weather-forecast", (req, res) => {
const days = ["Mon","Tue","Wed","Thu","Fri","Sat","Sun"];
const data = [Link]((d) => ({
day: d,
temperature: 20 + [Link]() * 10,
humidity: 40 + [Link]() * 40,
rainfall: [Link]() * 10,
}));
[Link]({ message: "success", data });
});
/* -------------------- ISSUES -------------------- */
// GET all issues
[Link]('/api/issues', (req, res) => {
const sql = 'SELECT * FROM issues ORDER BY timestamp DESC';
[Link](sql, [], (err, rows) => {
if (err) return [Link](400).json({ error: [Link] });
[Link]({ message: 'success', data: rows });
});
});
// POST new issue (citizen)
[Link]('/api/issues', (req, res) => {
const { category, description, location, photo } = [Link];
if (!category || !description || !location) {
return [Link](400).json({ error: 'category, description and location required' });
}
const newIssue = {
id: `CI-${[Link]()}`,
title: `${category} Report`,
description,
category,
location,
status: 'Open',
timestamp: new Date().toISOString(),
photo: photo || null,
};
const sql = 'INSERT INTO issues (id, category, title, description, location, status, timestamp, photo) VALUES (?,?,?,?,?,?,?,?)';
const params = [[Link], [Link], [Link], [Link], [Link], [Link], [Link], [Link]];
[Link](sql, params, function (err) {
if (err) return [Link](400).json({ error: [Link] });
[Link]({ message: 'success', data: newIssue });
});
});
// Admin-only: update issue status only
[Link]('/api/issues/:id/status', (req, res) => {
const { id } = [Link];
const { status } = [Link];
if (!status) return [Link](400).json({ error: 'status required' });
const sql = 'UPDATE issues SET status = ? WHERE id = ?';
[Link](sql, [status, id], function (err) {
if (err) return [Link](400).json({ error: [Link] });
[Link]({ message: 'updated', data: { id, status } });
});
});
// Issue comments
[Link]('/api/issues/:id/comments', (req, res) => {
const { id } = [Link];
const sql = 'SELECT * FROM issue_comments WHERE issue_id = ? ORDER BY timestamp ASC';
[Link](sql, [id], (err, rows) => {
if (err) return [Link](400).json({ error: [Link] });
[Link]({ message: 'success', data: rows });
});
});
[Link]('/api/issues/:id/comments', (req, res) => {
const { id } = [Link];
const { author, comment } = [Link];
if (!author || !comment) return [Link](400).json({ error: 'author and comment required' });
const newComment = {
id: `IC-${[Link]()}`,
issue_id: id,
author,
comment,
timestamp: new Date().toISOString(),
};
const sql = 'INSERT INTO issue_comments (id, issue_id, author, comment, timestamp) VALUES (?,?,?,?,?)';
[Link](sql, [[Link], newComment.issue_id, [Link], [Link], [Link]], function (err) {
if (err) return [Link](400).json({ error: [Link] });
[Link]({ message: 'success', data: newComment });
});
});
/* -------------------- ALERTS -------------------- */
[Link]('/api/alerts', (req, res) => {
const sql = 'SELECT * FROM alerts ORDER BY timestamp DESC';
[Link](sql, [], (err, rows) => {
if (err) return [Link](400).json({ error: [Link] });
[Link]({ message: 'success', data: rows });
});
});
[Link]('/api/alerts', (req, res) => {
const { title, description, category, priority } = [Link];
if (!title || !description) return [Link](400).json({ error: 'title and description required' });
const newAlert = {
id: `AL-${[Link]()}`,
title,
description,
category: category || 'General',
priority: priority || 'Low',
timestamp: new Date().toISOString(),
};
const sql = 'INSERT INTO alerts (id, title, description, category, priority, timestamp) VALUES (?,?,?,?,?,?)';
[Link](sql, [[Link], [Link], [Link], [Link], [Link], [Link]], (err) => {
if (err) return [Link](400).json({ error: [Link] });
[Link]({ message: 'success', data: newAlert });
});
});
[Link]('/api/alerts/:id', (req, res) => {
const { id } = [Link];
const { title, description, category, priority } = [Link];
const sql = 'UPDATE alerts SET title = ?, description = ?, category = ?, priority = ? WHERE id = ?';
[Link](sql, [title, description, category, priority, id], function (err) {
if (err) return [Link](400).json({ error: [Link] });
[Link]({ message: 'updated', id });
});
});
[Link]('/api/alerts/:id', (req, res) => {
const { id } = [Link];
[Link]('DELETE FROM alerts WHERE id = ?', [id], function (err) {
if (err) return [Link](400).json({ error: [Link] });
[Link]({ message: 'deleted', id });
});
});
/* -------------------- RESOURCES -------------------- */
[Link]('/api/resources', (req, res) => {
[Link]('SELECT * FROM resources', [], (err, rows) => {
if (err) return [Link](400).json({ error: [Link] });
[Link]({ message: 'success', data: rows });
});
});
[Link]('/api/resources', (req, res) => {
const { name, type, contact, capacity } = [Link];
if (!name || !type) return [Link](400).json({ error: 'name and type required' });
const newResource = { id: `R-${[Link]()}`, name, type, contact: contact || '', capacity: capacity || '', status: 'Available' };
const sql = 'INSERT INTO resources (id, name, type, contact, capacity, status) VALUES (?,?,?,?,?,?)';
[Link](sql, [[Link], [Link], [Link], [Link], [Link], [Link]], function (err) {
if (err) return [Link](400).json({ error: [Link] });
[Link]({ message: 'success', data: newResource });
});
});
[Link]('/api/resources/:id', (req, res) => {
const { id } = [Link];
const { name, type, contact, capacity, status } = [Link];
const sql = 'UPDATE resources SET name=?, type=?, contact=?, capacity=?, status=? WHERE id=?';
[Link](sql, [name, type, contact, capacity, status, id], function (err) {
if (err) return [Link](400).json({ error: [Link] });
[Link]({ message: 'updated', id });
});
});
[Link]('/api/resources/:id', (req, res) => {
const { id } = [Link];
[Link]('DELETE FROM resources WHERE id = ?', [id], function (err) {
if (err) return [Link](400).json({ error: [Link] });
[Link]({ message: 'deleted', id });
});
});
/* -------------------- SERVICES & EVENTS -------------------- */
[Link]('/api/services-events', (req, res) => {
const servicesSql = 'SELECT * FROM services';
const eventsSql = 'SELECT * FROM events ORDER BY date ASC';
[Link](servicesSql, [], (err, services) => {
if (err) return [Link](400).json({ error: [Link] });
[Link](eventsSql, [], (err, events) => {
if (err) return [Link](400).json({ error: [Link] });
[Link]({ message: 'success', data: { services, events } });
});
});
});
[Link]('/api/services', (req, res) => {
const { name, type, address, contact } = [Link];
const newService = { id: `S-${[Link]()}`, name, type, address, contact };
const sql = 'INSERT INTO services (id, name, type, address, contact) VALUES (?,?,?,?,?)';
[Link](sql, [[Link], [Link], [Link], [Link], [Link]], (err) => {
if (err) return [Link](400).json({ error: [Link] });
[Link]({ message: 'success', data: newService });
});
});
[Link]('/api/services/:id', (req, res) => {
const { id } = [Link];
const { name, type, address, contact } = [Link];
const sql = 'UPDATE services SET name=?, type=?, address=?, contact=? WHERE id=?';
[Link](sql, [name, type, address, contact, id], function (err) {
if (err) return [Link](400).json({ error: [Link] });
[Link]({ message: 'updated', id });
});
});
[Link]('/api/services/:id', (req, res) => {
const { id } = [Link];
[Link]('DELETE FROM services WHERE id = ?', [id], function (err) {
if (err) return [Link](400).json({ error: [Link] });
[Link]({ message: 'deleted', id });
});
});
[Link]('/api/events', (req, res) => {
const { title, date, location, description, organizer } = [Link];
const newEvent = { id: `E-${[Link]()}`, title, date, location, description, organizer };
const sql = 'INSERT INTO events (id, title, date, location, description, organizer) VALUES (?,?,?,?,?,?)';
[Link](sql, [[Link], [Link], [Link], [Link], [Link], [Link]], (err) => {
if (err) return [Link](400).json({ error: [Link] });
[Link]({ message: 'success', data: newEvent });
});
});
[Link]('/api/events/:id', (req, res) => {
const { id } = [Link];
const { title, date, location, description, organizer } = [Link];
const sql = 'UPDATE events SET title=?, date=?, location=?, description=?, organizer=? WHERE id=?';
[Link](sql, [title, date, location, description, organizer, id], function (err) {
if (err) return [Link](400).json({ error: [Link] });
[Link]({ message: 'updated', id });
});
});
[Link]('/api/events/:id', (req, res) => {
const { id } = [Link];
[Link]('DELETE FROM events WHERE id = ?', [id], function (err) {
if (err) return [Link](400).json({ error: [Link] });
[Link]({ message: 'deleted', id });
});
});
[Link](PORT, () => {
[Link](`Server running on [Link]
});