Page MenuHomeDevCentral

D3182.id8109.diff
No OneTemporary

D3182.id8109.diff

diff --git a/backend/servpulse-backend/.env.dist b/backend/servpulse-backend/.env.dist
new file mode 100644
--- /dev/null
+++ b/backend/servpulse-backend/.env.dist
@@ -0,0 +1,2 @@
+POSTGRES_CONNECTION_STRING="postgresql://postgres:password@localhost:5432/postgres"
+EXPRESS_PORT=3000
diff --git a/backend/servpulse-backend/app.js b/backend/servpulse-backend/app.js
new file mode 100644
--- /dev/null
+++ b/backend/servpulse-backend/app.js
@@ -0,0 +1,23 @@
+// app.js
+require('dotenv').config(); // Set up .env file
+require('./config/database.js'); // Set up database connection
+
+const express = require('express');
+const app = express();
+
+// Middleware to parse JSON requests
+app.use(express.json());
+
+// Import routes
+const serviceRoutes = require('./routes/serviceRoutes.js');
+const incidentRoutes = require('./routes/incidentRoutes.js');
+
+// Use the routes
+app.use('/api', serviceRoutes);
+app.use('/api', incidentRoutes);
+
+// Start the server
+const PORT = process.env.EXPRESS_PORT || 3000;
+app.listen(PORT, () => {
+ console.log(`Server running on port ${PORT}`);
+});
diff --git a/backend/servpulse-backend/config/database.js b/backend/servpulse-backend/config/database.js
new file mode 100644
--- /dev/null
+++ b/backend/servpulse-backend/config/database.js
@@ -0,0 +1,8 @@
+require('dotenv').config({ path: '../.env' });
+const { Pool } = require('pg');
+
+const pool = new Pool({
+ connectionString: process.env.POSTGRES_CONNECTION_STRING,
+});
+
+module.exports = pool;
diff --git a/backend/servpulse-backend/controllers/incidentController.js b/backend/servpulse-backend/controllers/incidentController.js
new file mode 100644
--- /dev/null
+++ b/backend/servpulse-backend/controllers/incidentController.js
@@ -0,0 +1,18 @@
+// incidentController.js
+const incidentModel = require('../models/incidentModel.js');
+const incidentServiceModel = require('../models/incidentServiceModel.js');
+const incidentPostModel = require('../models/incidentPostModel.js');
+const incidentPostStatusModel = require('../models/incidentPostStatusModel.js');
+
+const getIncidents = async (req, res) => {
+ try {
+ const incidents = await incidentModel.getIncidents();
+ res.status(200).json(incidents);
+ } catch (error) {
+ res.status(500).json({ message: 'Error fetching services', error: error.message });
+ }
+};
+
+// ... CRUD methods for incident controller using the respective models
+
+module.exports = { getIncidents, /* ... CRUD methods for incident controller */ };
diff --git a/backend/servpulse-backend/controllers/serviceController.js b/backend/servpulse-backend/controllers/serviceController.js
new file mode 100644
--- /dev/null
+++ b/backend/servpulse-backend/controllers/serviceController.js
@@ -0,0 +1,26 @@
+// serviceController.js
+const serviceModel = require('../models/serviceModel.js');
+
+const addService = async (req, res) => {
+ try {
+ const serviceData = req.body;
+ const result = await serviceModel.addService(serviceData);
+
+ res.status(201).json(result);
+ } catch (error) {
+ res.status(500).json({ message: 'Error creating service', error: error.message });
+ }
+};
+
+const getServices = async (req, res) => {
+ try {
+ const services = await serviceModel.getServices();
+ res.status(200).json(services);
+ } catch (error) {
+ res.status(500).json({ message: 'Error fetching services', error: error.message });
+ }
+};
+
+// ... other CRUD methods for service controller
+
+module.exports = { addService, getServices, /* ... other CRUD methods */ };
diff --git a/backend/servpulse-backend/index.js b/backend/servpulse-backend/index.js
deleted file mode 100644
--- a/backend/servpulse-backend/index.js
+++ /dev/null
@@ -1,11 +0,0 @@
-const express = require('express')
-const app = express()
-const port = 3000
-
-app.get('/', (req, res) => {
- res.send('Hello World!')
-})
-
-app.listen(port, () => {
- console.log(`Example app listening on port ${port}`)
-})
diff --git a/backend/servpulse-backend/models/incidentModel.js b/backend/servpulse-backend/models/incidentModel.js
new file mode 100644
--- /dev/null
+++ b/backend/servpulse-backend/models/incidentModel.js
@@ -0,0 +1,14 @@
+// incidentModel.js
+const pool = require('../config/database.js');
+
+const createIncident = async (data) => {
+ return await pool.query('INSERT INTO incident (title, start_date, update_date, type_id, status) VALUES (\$1, \$2, \$3, \$4, \$5) RETURNING *', [data.title, data.start_date, data.update_date, data.type_id, data.status]);
+};
+
+const getIncidents = async () => {
+ return await pool.query('SELECT * FROM incident;');
+};
+
+// ... other CRUD methods for incident table
+
+module.exports = { createIncident, getIncidents /* ... other CRUD methods */ };
diff --git a/backend/servpulse-backend/models/serviceModel.js b/backend/servpulse-backend/models/serviceModel.js
new file mode 100644
--- /dev/null
+++ b/backend/servpulse-backend/models/serviceModel.js
@@ -0,0 +1,14 @@
+// serviceModel.js
+const pool = require('../config/database.js');
+
+const addService = async (data) => {
+ return await pool.query('INSERT INTO service (name, "group", description, status) VALUES (\$1, \$2, \$3, \$4) RETURNING *', [data.name, data.group, data.description, data.status]);
+};
+
+const getServices = async () => {
+ return await pool.query('SELECT * FROM service;');
+};
+
+// ... other CRUD methods for service table
+
+module.exports = { addService, getServices, /* ... other CRUD methods */ };
diff --git a/backend/servpulse-backend/package.json b/backend/servpulse-backend/package.json
--- a/backend/servpulse-backend/package.json
+++ b/backend/servpulse-backend/package.json
@@ -1,14 +1,17 @@
{
- "name": "servpulse-backend",
- "version": "1.0.0",
- "description": "Backend API for the ServPulse frontend.",
- "main": "index.js",
- "scripts": {
- "test": "echo \"Error: no test specified\" && exit 1"
- },
- "author": "",
- "license": "ISC",
- "dependencies": {
- "express": "^4.18.2"
- }
+ "name": "servpulse-backend",
+ "version": "1.0.0",
+ "description": "Backend API for the ServPulse frontend.",
+ "main": "index.js",
+ "scripts": {
+ "test": "echo \"Error: no test specified\" && exit 1"
+ },
+ "author": "",
+ "license": "ISC",
+ "dependencies": {
+ "dotenv": "^16.0.3",
+ "express": "^4.18.2",
+ "pg": "^8.11.0",
+ "sequelize": "^6.31.1"
+ }
}
diff --git a/backend/servpulse-backend/routes/incidentRoutes.js b/backend/servpulse-backend/routes/incidentRoutes.js
new file mode 100644
--- /dev/null
+++ b/backend/servpulse-backend/routes/incidentRoutes.js
@@ -0,0 +1,10 @@
+// incidentRoutes.js
+const express = require('express');
+const router = express.Router();
+const incidentController = require('../controllers/incidentController.js');
+
+router.get('/incident/getAll', incidentController.getIncidents);
+
+// ... other routes for incident controller
+
+module.exports = router;
diff --git a/backend/servpulse-backend/routes/serviceRoutes.js b/backend/servpulse-backend/routes/serviceRoutes.js
new file mode 100644
--- /dev/null
+++ b/backend/servpulse-backend/routes/serviceRoutes.js
@@ -0,0 +1,11 @@
+// serviceRoutes.js
+const express = require('express');
+const router = express.Router();
+const serviceController = require('../controllers/serviceController.js');
+
+router.get('/service/getAll', serviceController.getServices);
+router.post('/service', serviceController.addService);
+
+// ... other routes for service controller
+
+module.exports = router;
diff --git a/database/README.md b/database/README.md
new file mode 100644
--- /dev/null
+++ b/database/README.md
@@ -0,0 +1,5 @@
+<!-- RUN DB -->
+`docker run --name servpulse_db -p 5432:5432 -e POSTGRES_PASSWORD="yourpassword" -d postgres`
+
+<!-- DIAGRAM DESIGN PROJECT -->
+https://dbdiagram.io/d/643dab996b31947051bf53e7
diff --git a/database/scripts/populate_data.sql b/database/scripts/populate_data.sql
new file mode 100644
--- /dev/null
+++ b/database/scripts/populate_data.sql
@@ -0,0 +1,14 @@
+-- POPULATE DB
+
+---- Create a new group
+INSERT INTO service_group (name, description)
+VALUES ('Group 1', 'This is the first service group.'),
+ ('Group 2', 'This is the second service group.')
+RETURNING *;
+
+---- Insert data into the service table:
+INSERT INTO service (name, "group", description, status)
+VALUES ('Service A', 1, 'Description A', 'Active'),
+ ('Service B', 2, 'Description B', 'Inactive'),
+ ('Service C', 1, 'Description C', 'Active')
+RETURNING *;
diff --git a/database/servpulse.sql b/database/servpulse.sql
new file mode 100644
--- /dev/null
+++ b/database/servpulse.sql
@@ -0,0 +1,59 @@
+CREATE TABLE "service" (
+ "id" serial PRIMARY KEY,
+ "name" varchar,
+ "group" int,
+ "description" varchar,
+ "status" varchar
+);
+
+CREATE TABLE "service_group" (
+ "id" serial PRIMARY KEY,
+ "name" varchar,
+ "description" varchar
+);
+
+CREATE TABLE "incident" (
+ "id" serial PRIMARY KEY,
+ "title" varchar,
+ "start_date" timestamp,
+ "update_date" timestamp,
+ "type_id" int,
+ "status" varchar
+);
+
+CREATE TABLE "incident_service" (
+ "id" serial PRIMARY KEY,
+ "incident" int,
+ "service" int
+);
+
+CREATE TABLE "incident_type" (
+ "id" serial PRIMARY KEY,
+ "label" varchar,
+ "color" varchar
+);
+
+CREATE TABLE "incident_post" (
+ "id" serial PRIMARY KEY,
+ "incident_id" int,
+ "date" timestamp,
+ "step_id" int,
+ "note" varchar
+);
+
+CREATE TABLE "incident_post_steps" (
+ "id" serial PRIMARY KEY,
+ "label" varchar
+);
+
+ALTER TABLE "service" ADD FOREIGN KEY ("group") REFERENCES "service_group" ("id");
+
+ALTER TABLE "incident" ADD FOREIGN KEY ("type_id") REFERENCES "incident_type" ("id");
+
+ALTER TABLE "incident_service" ADD FOREIGN KEY ("incident") REFERENCES "incident" ("id");
+
+ALTER TABLE "incident_service" ADD FOREIGN KEY ("service") REFERENCES "service" ("id");
+
+ALTER TABLE "incident_post" ADD FOREIGN KEY ("incident_id") REFERENCES "incident" ("id");
+
+ALTER TABLE "incident_post" ADD FOREIGN KEY ("step_id") REFERENCES "incident_post_steps" ("id");

File Metadata

Mime Type
text/plain
Expires
Mon, Sep 30, 22:24 (21 h, 59 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
2167258
Default Alt Text
D3182.id8109.diff (9 KB)

Event Timeline