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

Expand All @@ -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) {
Expand Down
34 changes: 34 additions & 0 deletions employees.json
Original file line number Diff line number Diff line change
@@ -0,0 +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": "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"
}
]
19 changes: 19 additions & 0 deletions routes/employees.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
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 })
});
module.exports = router;
32 changes: 32 additions & 0 deletions services/employeeService.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
// 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();
}

// Get a employee by ID
getEmployeeById(id) {
const employee = this.readEmployees();
return employee.find(employee => employee.id === id);
}
}

module.exports = EmployeeService;
40 changes: 40 additions & 0 deletions views/employee.ejs
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
<!-- 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>
</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>
<% } %>


</body>
</html>
45 changes: 45 additions & 0 deletions views/employees.ejs
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
<!-- 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>

</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>
</tr>
<% }); %>
</tbody>
</table>
<% } else { %>
<p>No employees found.</p>
<% } %>


</body>
</html>