diff --git a/app.js b/app.js index ff3080d..6505b45 100644 --- a/app.js +++ b/app.js @@ -7,6 +7,8 @@ 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(); @@ -22,6 +24,8 @@ 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 new file mode 100644 index 0000000..1b7dfe9 --- /dev/null +++ b/employees.json @@ -0,0 +1,26 @@ +[ + { + "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 new file mode 100644 index 0000000..03ef571 --- /dev/null +++ b/routes/employees.js @@ -0,0 +1,39 @@ +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 }) + }); + + // 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 }) + }); + + // 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 new file mode 100644 index 0000000..f5623d0 --- /dev/null +++ b/services/employeeService.js @@ -0,0 +1,84 @@ +// EmployeeService.js +const fs = require('fs'); + +class EmployeeService { + constructor() { + this.filePath = "employees.json"; + this.deletedFilePath = "employee_deletions.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 []; + } + } + // 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 @@ + + + +
+ + +| Name | +Salary | +Role | +Employee Number | +|
|---|---|---|---|---|
| <%= employee.name %> | +<%= employee.email %> | +<%= employee.salary %> | +<%= employee.role %> | +<%= employee.employeeNumber %> | +
No Employee found.
+ <% } %> + + + 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 @@ + + + + + + +| Name | +Salary | +Role | +Employee Number | + +|
|---|---|---|---|---|
| <%= employee.name %> | +<%= employee.email %> | +<%= employee.salary %> | +<%= employee.role %> | +<%= employee.employeeNumber %> | +
No Deleted Employees found.
+ <% } %> + + + + diff --git a/views/employee.ejs b/views/employee.ejs new file mode 100644 index 0000000..d32550e --- /dev/null +++ b/views/employee.ejs @@ -0,0 +1,42 @@ + + + + + + +| Name | +Salary | +Role | +Employee Number | ++ | |
|---|---|---|---|---|---|
| <%= employee.name %> | +<%= employee.email %> | +<%= employee.salary %> | +<%= employee.role %> | +<%= employee.employeeNumber %> | +Delete... | +
No Employee found.
+ <% } %> + + + + diff --git a/views/employees.ejs b/views/employees.ejs new file mode 100644 index 0000000..2e0da4e --- /dev/null +++ b/views/employees.ejs @@ -0,0 +1,47 @@ + + + + + + +| Name | +Salary | +Role | +Employee Number | ++ | + + | |
|---|---|---|---|---|---|---|
| <%= employee.name %> | +<%= employee.email %> | +<%= employee.salary %> | +<%= employee.role %> | +<%= employee.employeeNumber %> | +View | +Delete... | +
No employees found.
+ <% } %> + + + +