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
4 changes: 4 additions & 0 deletions app.js
Original file line number Diff line number Diff line change
Expand Up @@ -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();

Expand All @@ -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) {
Expand Down
26 changes: 26 additions & 0 deletions employee_deletions.json
Original file line number Diff line number Diff line change
@@ -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"
}
]
26 changes: 26 additions & 0 deletions employees.json
Original file line number Diff line number Diff line change
@@ -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"
}
]
13 changes: 13 additions & 0 deletions routes/deletions.js
Original file line number Diff line number Diff line change
@@ -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;
39 changes: 39 additions & 0 deletions routes/employees.js
Original file line number Diff line number Diff line change
@@ -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;
84 changes: 84 additions & 0 deletions services/employeeService.js
Original file line number Diff line number Diff line change
@@ -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;
44 changes: 44 additions & 0 deletions views/deleteEmployee.ejs
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
<!-- index.ejs -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Delete Employee</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<h1>Delete User</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>
<% } else { %>
<p>No Employee found.</p>
<% } %>
<form action="/employees/delete/<%= employee.id %>" method="post">
<h3>
Are you sure you want to delete <%= employee.name %>?
</h3>

<input type="submit" value="Submit">
</form>
</body>
</html>
43 changes: 43 additions & 0 deletions views/deletions.ejs
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
<!-- index.ejs -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>deleted employee List</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<h1>Deleted Employees List</h1>

<% if (deletions && deletions.length > 0) { %>
<table>
<thead>
<tr>
<th>Name</th>
<th>Email</th>
<th>Salary</th>
<th>Role</th>
<th>Employee Number</th>

</tr>
</thead>
<tbody>
<% deletions.forEach(employee => { %>
<tr>
<td><%= employee.name %></td>
<td><%= employee.email %></td>
<td><%= employee.salary %></td>
<td><%= employee.role %></td>
<td><%= employee.employeeNumber %></td>
</tr>
<% }); %>
</tbody>
</table>
<% } else { %>
<p>No Deleted Employees found.</p>
<% } %>


</body>
</html>
42 changes: 42 additions & 0 deletions views/employee.ejs
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
<!-- index.ejs -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>User Information</title>
<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>
<th></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>
<td><a href="/employees/delete/<%= employee.id %>">Delete...</a></td>
</tr>
</tbody>
</table>
<% } else { %>
<p>No Employee found.</p>
<% } %>


</body>
</html>
47 changes: 47 additions & 0 deletions views/employees.ejs
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
<!-- index.ejs -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>employee List</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<h1>Employees List</h1>

<% if (employees && employees.length > 0) { %>
<table>
<thead>
<tr>
<th>Name</th>
<th>Email</th>
<th>Salary</th>
<th>Role</th>
<th>Employee Number</th>
<th></th>
<th></th>

</tr>
</thead>
<tbody>
<% employees.forEach(employee => { %>
<tr>
<td><%= employee.name %></td>
<td><%= employee.email %></td>
<td><%= employee.salary %></td>
<td><%= employee.role %></td>
<td><%= employee.employeeNumber %></td>
<td><a href="/employees/<%= employee.id %>">View</a></td>
<td><a href="/employees/delete/<%= employee.id %>">Delete...</a></td>
</tr>
<% }); %>
</tbody>
</table>
<% } else { %>
<p>No employees found.</p>
<% } %>


</body>
</html>