Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
66 changes: 33 additions & 33 deletions employees.json
Original file line number Diff line number Diff line change
@@ -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"
}
]
{
"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"
}
]
23 changes: 22 additions & 1 deletion routes/employees.js
Original file line number Diff line number Diff line change
Expand Up @@ -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;
51 changes: 51 additions & 0 deletions services/editEmployeeService.js
Original file line number Diff line number Diff line change
@@ -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;
21 changes: 21 additions & 0 deletions services/employeeService.js
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand All @@ -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;
43 changes: 43 additions & 0 deletions views/editEmployee.ejs
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
<!-- editEmployee.ejs -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Edit Employee</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<h1>Edit Employee</h1>

<% if (employee) { %>
<form action="/users/update/<%= user.id %>" method="post">
<table>
<tr>
<td>Name</td>
<td><input type="text" name="name" value="<%= employee.name %>"></td>
</tr>
<tr>
<td>Address</td>
<td><input type="text" name="address" value="<%= employee.address %>"></td>
</tr>
<tr>
<td>Salary</td>
<td><input type="number" name="salary" value="<%= employee.salary %>"></td>
</tr>
<tr>
<td>Role</td>
<td><input type="text" name="role" value="<%= employee.role %>"></td>
</tr>
<tr>
<td>Employee Number</td>
<td><input type="text" name="employeeNumber" value="<%= employee.employeeNumber %>" readonly></td>
</tr>
</table>
<button type="submit">Save Changes</button>
</form>
<% } else { %>
<p>No employee found.</p>
<% } %>
</body>
</html>
72 changes: 51 additions & 21 deletions views/employee.ejs
Original file line number Diff line number Diff line change
Expand Up @@ -8,29 +8,59 @@
<link rel="stylesheet" href="style.css">
</head>
<body>
<h1> Employee Information</h1>

<% if (employee) { %>
<table>
<thead>
<tr>
<th>Name</th>
<th>Email</th>
<th>Salary</th>
<th>Role</th>
<th>Employee Number</th>
</tr>
</thead>
<tbody>
<tr>
<td><%= employee.name %></td>
<td><%= employee.email %></td>
<td><%= employee.salary %></td>
<td><%= employee.role %></td>
<td><%= employee.employeeNumber %></td>
</tr>
</tbody>
</table>
<% if (editMode) { %>
<h1>Edit Employee</h1>
<form action="/employees/<%= employee.id %>/edit" method="POST">
<table>
<tr>
<td>Name</td>
<td><input type="text" name="name" value="<%= employee.name %>" required></td>
</tr>
<tr>
<td>Email</td>
<td><input type="email" name="email" value="<%= employee.email %>" required></td>
</tr>
<tr>
<td>Salary</td>
<td><input type="number" name="salary" value="<%= employee.salary %>" required></td>
</tr>
<tr>
<td>Role</td>
<td><input type="text" name="role" value="<%= employee.role %>" required></td>
</tr>
<tr>
<td>Employee Number</td>
<td><input type="text" name="employeeNumber" value="<%= employee.employeeNumber %>" readonly></td>
</tr>
</table>
<button type="submit">Save Changes</button>
</form>
<% } else { %>
<h1> Employee Information</h1>
<table>
<thead>
<tr>
<th>Name</th>
<th>Email</th>
<th>Salary</th>
<th>Role</th>
<th>Employee Number</th>
</tr>
</thead>
<tbody>
<tr>
<td><%= employee.name %></td>
<td><%= employee.email %></td>
<td><%= employee.salary %></td>
<td><%= employee.role %></td>
<td><%= employee.employeeNumber %></td>
</tr>
</tbody>
</table>
<a href="/employees/<%= employee.id %>/edit"><button>Edit</button></a>
<% } %>
<% } else { %>
<p>No Employee found.</p>
<% } %>
Expand Down
1 change: 1 addition & 0 deletions views/employees.ejs
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@
<td><%= employee.role %></td>
<td><%= employee.employeeNumber %></td>
<td><a href="/employees/<%= employee.id %>">View</a></td>
<td><a href="/employees/<%= employee.id %>/edit">Edit</a></td>
</tr>
<% }); %>
</tbody>
Expand Down