From 0a11b72ac36fcbd65aea40bc7facd657643aa44e Mon Sep 17 00:00:00 2001 From: Nicole Stronge Date: Wed, 15 Jan 2025 12:03:12 +0000 Subject: [PATCH 1/6] Get All Employess endpoint --- employees.json | 0 routes/employees.js | 0 services/employeeService.js | 0 views/employees.ejs | 0 4 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 employees.json create mode 100644 routes/employees.js create mode 100644 services/employeeService.js create mode 100644 views/employees.ejs diff --git a/employees.json b/employees.json new file mode 100644 index 0000000..e69de29 diff --git a/routes/employees.js b/routes/employees.js new file mode 100644 index 0000000..e69de29 diff --git a/services/employeeService.js b/services/employeeService.js new file mode 100644 index 0000000..e69de29 diff --git a/views/employees.ejs b/views/employees.ejs new file mode 100644 index 0000000..e69de29 From 53970b970291f6e28c8bdf719889f1a33712e7cd Mon Sep 17 00:00:00 2001 From: Nicole Stronge Date: Wed, 15 Jan 2025 12:15:15 +0000 Subject: [PATCH 2/6] Get All Employess endpoint saved --- app.js | 2 ++ employees.json | 10 +++++++++ routes/employees.js | 13 +++++++++++ services/employeeService.js | 26 ++++++++++++++++++++++ views/employees.ejs | 44 +++++++++++++++++++++++++++++++++++++ 5 files changed, 95 insertions(+) diff --git a/app.js b/app.js index ff3080d..08b9ba2 100644 --- a/app.js +++ b/app.js @@ -7,6 +7,7 @@ require('dotenv').config(); var indexRouter = require('./routes/index'); var usersRouter = require('./routes/users'); +var employeesRouter = require('./routes/employees'); var app = express(); @@ -22,6 +23,7 @@ app.use(express.static(path.join(__dirname, 'public'))); app.use('/', indexRouter); app.use('/users', usersRouter); +app.use('/employees', employeesRouter); // catch 404 and forward to error handler app.use(function(req, res, next) { diff --git a/employees.json b/employees.json index e69de29..c819fd7 100644 --- a/employees.json +++ b/employees.json @@ -0,0 +1,10 @@ +[ + { + "id": 1, + "name": "Shaun", + "email": "shaun@test.com", + "salary": 500000, + "role": "Software Engineer", + "employeeNumber": "EZ01" + } + ] \ No newline at end of file diff --git a/routes/employees.js b/routes/employees.js index e69de29..1d5183c 100644 --- a/routes/employees.js +++ b/routes/employees.js @@ -0,0 +1,13 @@ +var express = require('express'); +var router = express.Router(); + +const EmployeeService = require('../services/employeeService'); +const employeeService = new EmployeeService(); + +// Read all employees +router.get('/', (req, res) => { + const employees = employeeService.getAllEmployees(); + res.render('employees', { employees: employees }) + }); + + module.exports = router; \ No newline at end of file diff --git a/services/employeeService.js b/services/employeeService.js index e69de29..6d4ab10 100644 --- a/services/employeeService.js +++ b/services/employeeService.js @@ -0,0 +1,26 @@ +// EmployeeService.js +const fs = require('fs'); + +class EmployeeService { + constructor() { + this.filePath = "employees.json"; + } + + // Helper function to read Employees from JSON file + readEmployees() { + try { + const data = fs.readFileSync(this.filePath, 'utf8'); + return JSON.parse(data); + } catch (err) { + console.error('Error reading Employees:', err); + return []; + } + } + + // Get all Employees + getAllEmployees() { + return this.readEmployees(); + } +} + +module.exports = EmployeeService; \ No newline at end of file diff --git a/views/employees.ejs b/views/employees.ejs index e69de29..f5bcf24 100644 --- a/views/employees.ejs +++ b/views/employees.ejs @@ -0,0 +1,44 @@ + + + + + + + employee List + + + +

Employees List

+ + <% if (employees && employees.length > 0) { %> + + + + + + + + + + + + + <% employees.forEach(employee => { %> + + + + + + + + + <% }); %> + +
NameEmailSalaryRoleEmployee Number
<%= employee.name %><%= employee.email %><%= employee.salary %><%= employee.role %><%= employee.employeeNumber %>
+ <% } else { %> +

No employees found.

+ <% } %> + + + + From 5391d7096c5680a700ee0b0a9469fae4b8576ed8 Mon Sep 17 00:00:00 2001 From: Nicole Stronge Date: Wed, 15 Jan 2025 12:26:03 +0000 Subject: [PATCH 3/6] Get All Employess endpoint saved --- employees.json | 26 +++++++++++++++++++++++++- 1 file changed, 25 insertions(+), 1 deletion(-) diff --git a/employees.json b/employees.json index c819fd7..2d09326 100644 --- a/employees.json +++ b/employees.json @@ -6,5 +6,29 @@ "salary": 500000, "role": "Software Engineer", "employeeNumber": "EZ01" - } + }, + { + "id": 2, + "name": "Peter", + "email": "peter@test.com", + "salary": 250000, + "role": "Software Engineer", + "employeeNumber": "EZ02" + }, + { + "id": 3, + "name": "Petunia", + "email": "petunia@test.com", + "salary": 550000, + "role": "Software Engineer", + "employeeNumber": "EZ03" + }, + { + "id": 4, + "name": "Paulina", + "email": "paulina@test.com", + "salary": 230000, + "role": "Software Engineer", + "employeeNumber": "EZ04" + } ] \ No newline at end of file From 5b402fde756416363eedd77882c3104779bf60ff Mon Sep 17 00:00:00 2001 From: Nicole Stronge Date: Wed, 15 Jan 2025 13:33:50 +0000 Subject: [PATCH 4/6] View employee --- routes/employees.js | 6 ++++++ services/employeeService.js | 6 ++++++ views/employee.ejs | 40 +++++++++++++++++++++++++++++++++++++ views/employees.ejs | 3 ++- 4 files changed, 54 insertions(+), 1 deletion(-) create mode 100644 views/employee.ejs diff --git a/routes/employees.js b/routes/employees.js index 1d5183c..eb52dc8 100644 --- a/routes/employees.js +++ b/routes/employees.js @@ -10,4 +10,10 @@ router.get('/', (req, res) => { res.render('employees', { employees: employees }) }); + // Read a Employee by ID +router.get('/:id', (req, res) => { + const employee = employeeService.getEmployeeById(parseInt(req.params.id)); + if (!employee) return res.status(404).send('Employee not found'); + res.render('employee', {employee:employee }) + }); module.exports = router; \ No newline at end of file diff --git a/services/employeeService.js b/services/employeeService.js index 6d4ab10..b62e03a 100644 --- a/services/employeeService.js +++ b/services/employeeService.js @@ -21,6 +21,12 @@ class EmployeeService { getAllEmployees() { return this.readEmployees(); } + + // Get a employee by ID + getEmployeeById(id) { + const employee = this.readEmployees(); + return employee.find(employee => employee.id === id); + } } module.exports = EmployeeService; \ No newline at end of file diff --git a/views/employee.ejs b/views/employee.ejs new file mode 100644 index 0000000..3686187 --- /dev/null +++ b/views/employee.ejs @@ -0,0 +1,40 @@ + + + + + + + User Information + + + +

Employee Information

+ + <% if (employee) { %> + + + + + + + + + + + + + + + + + + + +
NameEmailSalaryRoleEmployee Number
<%= employee.name %><%= employee.email %><%= employee.salary %><%= employee.role %><%= employee.employeeNumber %>
+ <% } else { %> +

No Employee found.

+ <% } %> + + + + diff --git a/views/employees.ejs b/views/employees.ejs index f5bcf24..9bc5467 100644 --- a/views/employees.ejs +++ b/views/employees.ejs @@ -19,6 +19,7 @@ Salary Role Employee Number + @@ -30,7 +31,7 @@ <%= employee.salary %> <%= employee.role %> <%= employee.employeeNumber %> - + View <% }); %> From a657d978c64fa0e24326e44cfbdbd3065c2db29e Mon Sep 17 00:00:00 2001 From: Ashna Abraham Date: Wed, 15 Jan 2025 13:49:09 +0000 Subject: [PATCH 5/6] by id --- employees.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/employees.json b/employees.json index 2d09326..195a51d 100644 --- a/employees.json +++ b/employees.json @@ -17,7 +17,7 @@ }, { "id": 3, - "name": "Petunia", + "name": "Petuna", "email": "petunia@test.com", "salary": 550000, "role": "Software Engineer", From 9610fee8e59d58d8693b97561928d9f6c96ac8f7 Mon Sep 17 00:00:00 2001 From: bigchainbill Date: Thu, 16 Jan 2025 11:57:41 +0000 Subject: [PATCH 6/6] delete user changes --- app.js | 2 ++ employee_deletions.json | 26 +++++++++++++++++ employees.json | 58 ++++++++++++++++--------------------- routes/deletions.js | 13 +++++++++ routes/employees.js | 20 +++++++++++++ services/employeeService.js | 52 +++++++++++++++++++++++++++++++++ views/deleteEmployee.ejs | 44 ++++++++++++++++++++++++++++ views/deletions.ejs | 43 +++++++++++++++++++++++++++ views/employee.ejs | 2 ++ views/employees.ejs | 2 ++ 10 files changed, 229 insertions(+), 33 deletions(-) create mode 100644 employee_deletions.json create mode 100644 routes/deletions.js create mode 100644 views/deleteEmployee.ejs create mode 100644 views/deletions.ejs diff --git a/app.js b/app.js index 08b9ba2..6505b45 100644 --- a/app.js +++ b/app.js @@ -8,6 +8,7 @@ require('dotenv').config(); var indexRouter = require('./routes/index'); var usersRouter = require('./routes/users'); var employeesRouter = require('./routes/employees'); +var deletionsRouter = require('./routes/deletions'); var app = express(); @@ -24,6 +25,7 @@ app.use(express.static(path.join(__dirname, 'public'))); app.use('/', indexRouter); app.use('/users', usersRouter); app.use('/employees', employeesRouter); +app.use('/deletions', deletionsRouter); // catch 404 and forward to error handler app.use(function(req, res, next) { diff --git a/employee_deletions.json b/employee_deletions.json new file mode 100644 index 0000000..9033dac --- /dev/null +++ b/employee_deletions.json @@ -0,0 +1,26 @@ +[ + { + "id": 2, + "name": "Peter", + "email": "peter@test.com", + "salary": 250000, + "role": "Software Engineer", + "employeeNumber": "EZ02" + }, + { + "id": 1, + "name": "Shaun", + "email": "shaun@test.com", + "salary": 500000, + "role": "Software Engineer", + "employeeNumber": "EZ01" + }, + { + "id": 1, + "name": "Shaun", + "email": "shaun@test.com", + "salary": 500000, + "role": "Software Engineer", + "employeeNumber": "EZ01" + } +] \ No newline at end of file diff --git a/employees.json b/employees.json index 195a51d..1b7dfe9 100644 --- a/employees.json +++ b/employees.json @@ -1,34 +1,26 @@ [ - { - "id": 1, - "name": "Shaun", - "email": "shaun@test.com", - "salary": 500000, - "role": "Software Engineer", - "employeeNumber": "EZ01" - }, - { - "id": 2, - "name": "Peter", - "email": "peter@test.com", - "salary": 250000, - "role": "Software Engineer", - "employeeNumber": "EZ02" - }, - { - "id": 3, - "name": "Petuna", - "email": "petunia@test.com", - "salary": 550000, - "role": "Software Engineer", - "employeeNumber": "EZ03" - }, - { - "id": 4, - "name": "Paulina", - "email": "paulina@test.com", - "salary": 230000, - "role": "Software Engineer", - "employeeNumber": "EZ04" - } - ] \ No newline at end of file + { + "id": 2, + "name": "Peter", + "email": "peter@test.com", + "salary": 250000, + "role": "Software Engineer", + "employeeNumber": "EZ02" + }, + { + "id": 3, + "name": "Petuna", + "email": "petunia@test.com", + "salary": 550000, + "role": "Software Engineer", + "employeeNumber": "EZ03" + }, + { + "id": 4, + "name": "Paulina", + "email": "paulina@test.com", + "salary": 230000, + "role": "Software Engineer", + "employeeNumber": "EZ04" + } +] \ No newline at end of file diff --git a/routes/deletions.js b/routes/deletions.js new file mode 100644 index 0000000..0b88b20 --- /dev/null +++ b/routes/deletions.js @@ -0,0 +1,13 @@ +var express = require('express'); +var router = express.Router(); + +const EmployeeService = require('../services/employeeService'); +const employeeService = new EmployeeService(); + + +// Read all deleted employees +router.get('/', (req, res) => { + const deletions = employeeService.getAllDeletedEmployees(); + res.render('deletions', { deletions: deletions }) +}); + module.exports = router; \ No newline at end of file diff --git a/routes/employees.js b/routes/employees.js index eb52dc8..03ef571 100644 --- a/routes/employees.js +++ b/routes/employees.js @@ -16,4 +16,24 @@ router.get('/:id', (req, res) => { if (!employee) return res.status(404).send('Employee not found'); res.render('employee', {employee:employee }) }); + + // Delete a user by ID form +router.get('/delete/:id', (req, res) => { + const employee = employeeService.getEmployeeById(parseInt(req.params.id)); + if (!employee) return res.status(404).send('Employee not found'); + res.render('deleteEmployee', {employee: employee}) +}); + +// Delete a user by ID +router.post('/delete/:id', (req, res) => { + const deletedEmployee = employeeService.deleteEmployee(parseInt(req.params.id)); + if (!deletedEmployee) return res.status(404).send('Employee not found'); + res.redirect('/employees') +}); + +// Read all deleted employees +router.get('/', (req, res) => { + const deletions = employeeService.getAllDeletedEmployees(); + res.render('deletions', { deletions: deletions }) +}); module.exports = router; \ No newline at end of file diff --git a/services/employeeService.js b/services/employeeService.js index b62e03a..f5623d0 100644 --- a/services/employeeService.js +++ b/services/employeeService.js @@ -4,6 +4,7 @@ const fs = require('fs'); class EmployeeService { constructor() { this.filePath = "employees.json"; + this.deletedFilePath = "employee_deletions.json"; } // Helper function to read Employees from JSON file @@ -16,17 +17,68 @@ class EmployeeService { return []; } } + // Helper function to read Deleted Employees from JSON file + readDeletedEmployees() { + try { + const data = fs.readFileSync(this.deletedFilePath, 'utf8'); + return JSON.parse(data); + } catch (err) { + console.error('Error reading Employees:', err); + return []; + } + } // Get all Employees getAllEmployees() { return this.readEmployees(); } + // Get all deleted employee + getAllDeletedEmployees() { + return this.readDeletedEmployees(); + } + + // Update employee list + writeEmployees(employees) { + try { + fs.writeFileSync(this.filePath, JSON.stringify(employees, null, 2), 'utf8'); + } catch (err) { + console.error('Error writing employees:', err); + } + } + + writeDeletions(deletions) { + try { + fs.writeFileSync(this.deletedFilePath, JSON.stringify(deletions, null, 2), 'utf8'); + } catch (err) { + console.error('Error writing deletions:', err); + } + } + // Get a employee by ID getEmployeeById(id) { const employee = this.readEmployees(); return employee.find(employee => employee.id === id); } + + // Delete a user by ID + deleteEmployee(id) { + const employees = this.readEmployees(); + const employeeIndex = employees.findIndex(employee => employee.id === id); + if (employeeIndex === -1) return null; + + const deletedEmployee = employees.splice(employeeIndex, 1); + this.writeEmployees(employees); + this.addDeletedEmployee(deletedEmployee[0]) + return deletedEmployee[0]; + } + + addDeletedEmployee(oldEmployee) { + const deletions = this.readDeletedEmployees(); + deletions.push(oldEmployee); + this.writeDeletions(deletions); + return oldEmployee; + } } module.exports = EmployeeService; \ No newline at end of file diff --git a/views/deleteEmployee.ejs b/views/deleteEmployee.ejs new file mode 100644 index 0000000..d1bd9a3 --- /dev/null +++ b/views/deleteEmployee.ejs @@ -0,0 +1,44 @@ + + + + + + + Delete Employee + + + +

Delete User

+ <% if (employee) { %> + + + + + + + + + + + + + + + + + + + +
NameEmailSalaryRoleEmployee Number
<%= employee.name %><%= employee.email %><%= employee.salary %><%= employee.role %><%= employee.employeeNumber %>
+ <% } else { %> +

No Employee found.

+ <% } %> +
+

+ Are you sure you want to delete <%= employee.name %>? +

+ + +
+ + diff --git a/views/deletions.ejs b/views/deletions.ejs new file mode 100644 index 0000000..c911c78 --- /dev/null +++ b/views/deletions.ejs @@ -0,0 +1,43 @@ + + + + + + + deleted employee List + + + +

Deleted Employees List

+ + <% if (deletions && deletions.length > 0) { %> + + + + + + + + + + + + + <% deletions.forEach(employee => { %> + + + + + + + + <% }); %> + +
NameEmailSalaryRoleEmployee Number
<%= employee.name %><%= employee.email %><%= employee.salary %><%= employee.role %><%= employee.employeeNumber %>
+ <% } else { %> +

No Deleted Employees found.

+ <% } %> + + + + diff --git a/views/employee.ejs b/views/employee.ejs index 3686187..d32550e 100644 --- a/views/employee.ejs +++ b/views/employee.ejs @@ -19,6 +19,7 @@ Salary Role Employee Number + @@ -28,6 +29,7 @@ <%= employee.salary %> <%= employee.role %> <%= employee.employeeNumber %> + Delete... diff --git a/views/employees.ejs b/views/employees.ejs index 9bc5467..2e0da4e 100644 --- a/views/employees.ejs +++ b/views/employees.ejs @@ -20,6 +20,7 @@ Role Employee Number + @@ -32,6 +33,7 @@ <%= employee.role %> <%= employee.employeeNumber %> View + Delete... <% }); %>