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
90 changes: 57 additions & 33 deletions employees.json
Original file line number Diff line number Diff line change
@@ -1,34 +1,58 @@
[
{
"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": "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"
},
{
"name": "ash",
"email": "ash@email.com",
"salary": "1000000",
"role": "software engineer",
"employeeNumber": "12345",
"id": 5
},
{
"name": "ash",
"email": "ashna@email.com",
"salary": "10000000",
"role": "software engineer",
"employeeNumber": "39275982",
"id": 6
},
{
"name": "Dan",
"email": "",
"salary": "",
"role": "",
"employeeNumber": "",
"id": 7
}
]
15 changes: 15 additions & 0 deletions routes/employees.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,18 @@ var router = express.Router();
const EmployeeService = require('../services/employeeService');
const employeeService = new EmployeeService();

// Create a new employee form
router.get('/add', (req, res) => {
res.render('addEmployee')
});

// Create a new employee submit
router.post('/add', (req, res) => {
const newEmployee = req.body;
const createdEmployee = employeeService.createEmployee(newEmployee);
res.redirect('/employees/' + createdEmployee.id)
});

// Read all employees
router.get('/', (req, res) => {
const employees = employeeService.getAllEmployees();
Expand All @@ -16,4 +28,7 @@ router.get('/:id', (req, res) => {
if (!employee) return res.status(404).send('Employee not found');
res.render('employee', {employee:employee })
});



module.exports = router;
18 changes: 18 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,15 @@ class EmployeeService {
const employee = this.readEmployees();
return employee.find(employee => employee.id === id);
}

// Create a new employee
createEmployee(newEmployee) {
const employees = this.readEmployees();
newEmployee.id = employees.length ? employees[employees.length - 1].id + 1 : 1;
employees.push(newEmployee);
this.writeEmployees(employees);
return newEmployee;
}
}

module.exports = EmployeeService;
18 changes: 18 additions & 0 deletions users.json
Original file line number Diff line number Diff line change
Expand Up @@ -4,5 +4,23 @@
"name": "Shaun",
"email": "shaun@test.com",
"role": "Software Engineer"
},
{
"name": "James",
"email": "james@test.com",
"role": "Marketing",
"id": 2
},
{
"name": "Tina",
"email": "tina@test.com",
"role": "Finance",
"id": 3
},
{
"name": "Brian",
"email": "brian@test.com",
"role": "Finance",
"id": 4
}
]
32 changes: 32 additions & 0 deletions views/addEmployee.ejs
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
<!-- index.ejs -->
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Add New Employee</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<h1>Add New Employee</h1>

<form action="/employees/add" method="post">
<label for="name" >Name:</label><br>
<input type="name" id="name" name="name" required><br>

<label for="email" >Email:</label><br>
<input type="email" id="email" name="email" required><br>

<label for="salary" >Salary:</label><br>
<input type="salary" id="salary" name="salary"required><br>

<label for="role" >Role:</label><br>
<input type="role" id="role" name="role" required><br>

<label for="employeeNumber" >Employee Number:</label><br>
<input type="employeeNumber" id="employeeNumber" name="employeeNumber" required><br>

<input type="submit" value="Submit">
</form>
</body>
</html>
4 changes: 4 additions & 0 deletions views/employees.ejs
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,10 @@
<p>No employees found.</p>
<% } %>

<form action="/employees/add" method="get">
<input type="submit" value="Create New Employee">
</form>


</body>
</html>