diff --git a/employees.json b/employees.json index 195a51d..3151809 100644 --- a/employees.json +++ b/employees.json @@ -1,34 +1,34 @@ [ - { - "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": 1, + "name": "Shaun", + "email": "shaun@test.com", + "salary": "500000", + "role": "Software Engineer", + "employeeNumber": "EZ01" + }, + { + "id": 2, + "name": "Pete J", + "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/employees.js b/routes/employees.js index eb52dc8..265cdef 100644 --- a/routes/employees.js +++ b/routes/employees.js @@ -14,6 +14,27 @@ router.get('/', (req, res) => { 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 }) + res.render('employee', { employee: employee, editMode: false }); }); + + // View edit form for an employee +router.get('/:id/edit', (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, editMode: true }); + }); + + // Update an employee +router.post('/:id/edit', (req, res) => { + const updatedEmployee = { + name: req.body.name, + email: req.body.email, + salary: req.body.salary, + role: req.body.role + }; + const employee = employeeService.updateEmployee(parseInt(req.params.id), updatedEmployee); + if (!employee) return res.status(404).send('Employee not found'); + res.redirect(`/employees/${req.params.id}`); + }); + module.exports = router; \ No newline at end of file diff --git a/services/editEmployeeService.js b/services/editEmployeeService.js new file mode 100644 index 0000000..b922459 --- /dev/null +++ b/services/editEmployeeService.js @@ -0,0 +1,51 @@ +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 []; + } + } + + // Helper function to write Employees to JSON file + writeEmployees(employees) { + try { + fs.writeFileSync(this.filePath, JSON.stringify(employees, null, 2), 'utf8'); + } catch (err) { + console.error('Error writing Employees:', err); + } + } + + // Get all Employees + getAllEmployees() { + return this.readEmployees(); + } + + // Get a employee by ID + getEmployeeById(id) { + const employees = this.readEmployees(); + return employees.find(employee => employee.id === id); + } + + // Update an employee by ID + updateEmployee(id, updatedEmployee) { + const employees = this.readEmployees(); + const employeeIndex = employees.findIndex(employee => employee.id === id); + if (employeeIndex === -1) return null; + + employees[employeeIndex] = { ...employees[employeeIndex], ...updatedEmployee }; + this.writeEmployees(employees); + return employees[employeeIndex]; + } +} + +module.exports = EmployeeService; diff --git a/services/employeeService.js b/services/employeeService.js index b62e03a..14cec06 100644 --- a/services/employeeService.js +++ b/services/employeeService.js @@ -17,6 +17,15 @@ class EmployeeService { } } + // Helper function to write Employees to JSON file + writeEmployees(employees) { + try { + fs.writeFileSync(this.filePath, JSON.stringify(employees, null, 2), 'utf8'); + } catch (err) { + console.error('Error writing Employees:', err); + } + } + // Get all Employees getAllEmployees() { return this.readEmployees(); @@ -27,6 +36,18 @@ class EmployeeService { const employee = this.readEmployees(); return employee.find(employee => employee.id === id); } + + // Update an employee by ID + updateEmployee(id, updatedEmployee) { + const employees = this.readEmployees(); + const employeeIndex = employees.findIndex(employee => employee.id === id); + if (employeeIndex === -1) return null; + + employees[employeeIndex] = { ...employees[employeeIndex], ...updatedEmployee }; + this.writeEmployees(employees); + return employees[employeeIndex]; + } + } module.exports = EmployeeService; \ No newline at end of file diff --git a/views/editEmployee.ejs b/views/editEmployee.ejs new file mode 100644 index 0000000..3ea29ab --- /dev/null +++ b/views/editEmployee.ejs @@ -0,0 +1,43 @@ + + + +
+ + +No employee found.
+ <% } %> + + \ No newline at end of file diff --git a/views/employee.ejs b/views/employee.ejs index 3686187..bdf3299 100644 --- a/views/employee.ejs +++ b/views/employee.ejs @@ -8,29 +8,59 @@ -| Name | -Salary | -Role | -Employee Number | -|
|---|---|---|---|---|
| <%= employee.name %> | -<%= employee.email %> | -<%= employee.salary %> | -<%= employee.role %> | -<%= employee.employeeNumber %> | -
| Name | +Salary | +Role | +Employee Number | +|
|---|---|---|---|---|
| <%= employee.name %> | +<%= employee.email %> | +<%= employee.salary %> | +<%= employee.role %> | +<%= employee.employeeNumber %> | +
No Employee found.
<% } %> diff --git a/views/employees.ejs b/views/employees.ejs index 9bc5467..2030552 100644 --- a/views/employees.ejs +++ b/views/employees.ejs @@ -32,6 +32,7 @@