From 3391569294d755cbbcd93224de7ac23c409afa86 Mon Sep 17 00:00:00 2001 From: James Clulow <40301000@ads.qub.ac.uk> Date: Fri, 24 Jan 2025 13:34:53 +0000 Subject: [PATCH 1/2] This is finally working!!! --- services/readDeleteUser.js | 31 ++++++++++++++++++ services/readWriteUser.js | 27 +++++++++++++++ users.json | 22 +++++++++++++ views/addUser.ejs | 62 ++++++++++++++++++++++++++++------- views/deleteUser.ejs | 4 +-- views/index.ejs | 2 +- views/updateUser.ejs | 2 +- views/user.ejs | 2 +- views/users.ejs | 2 +- views/viewDesign.css | 67 ++++++++++++++++++++++++++++++++++++++ 10 files changed, 203 insertions(+), 18 deletions(-) create mode 100644 services/readDeleteUser.js create mode 100644 services/readWriteUser.js create mode 100644 views/viewDesign.css diff --git a/services/readDeleteUser.js b/services/readDeleteUser.js new file mode 100644 index 0000000..16d16ba --- /dev/null +++ b/services/readDeleteUser.js @@ -0,0 +1,31 @@ +const fs = require('fs'); + +class readDeleteUser { + constructor() { + this.filePath = "users.json"; + } + + // Helper function to read users from JSON file + readUsers() { + try { + const data = fs.readFileSync(this.filePath, 'utf8'); + return JSON.parse(data); + } catch (err) { + console.error('Error reading users:', err); + return []; + } + } + + // Delete a user by ID + deleteUser(id) { + const users = this.readUsers(); + const userIndex = users.findIndex(user => user.id === id); + if (userIndex === -1) return null; + + const deletedUser = users.splice(userIndex, 1); + this.writeUsers(users); + return deletedUser[0]; + } +} + +module.exports = readDeleteUser; diff --git a/services/readWriteUser.js b/services/readWriteUser.js new file mode 100644 index 0000000..4ff3729 --- /dev/null +++ b/services/readWriteUser.js @@ -0,0 +1,27 @@ +const fs = require('fs'); + +class readWriteUser { + constructor() { + this.filePath = "users.json"; + } + + // Helper function to write users to JSON file + writeUsers(users) { + try { + fs.writeFileSync(this.filePath, JSON.stringify(users, null, 2), 'utf8'); + } catch (err) { + console.error('Error writing users:', err); + } + } + + // Create a new user + createUser(newUser) { + const users = this.readUsers(); + newUser.id = users.length ? users[users.length - 1].id + 1 : 1; + users.push(newUser); + this.writeUsers(users); + return newUser; + } +} + +module.exports = readWriteUser; diff --git a/users.json b/users.json index c3b48ae..0e915c6 100644 --- a/users.json +++ b/users.json @@ -4,5 +4,27 @@ "name": "Shaun", "email": "shaun@test.com", "role": "Software Engineer" + }, + { + "name": "James", + "email": "kqhkdhwjhw@fhwh.com", + "role": "Employee", + "id": 2 + }, + { + "name": "James Clulow", + "address": "14 Malone Road", + "salary": "100000", + "role": "Senior Software Engineer", + "employeenumber": "123456", + "id": 3 + }, + { + "name": "James", + "address": "14 Malone Road", + "salary": "100000", + "role": "Senior Software Engineer", + "employeenumber": "123456", + "id": 4 } ] \ No newline at end of file diff --git a/views/addUser.ejs b/views/addUser.ejs index 3f556f6..31cb9a5 100644 --- a/views/addUser.ejs +++ b/views/addUser.ejs @@ -1,26 +1,64 @@ + Add New User - + + -

Add New User

-
-
-
+
+
+ kainos_logo +
+ + + + +
+

Add New User

+
+ +
+ +
+
+ +
+
-
-
+
+
-
-
+
+
- - +
+
+ +
+
+ + + + + +
+ + + +
- + + \ No newline at end of file diff --git a/views/deleteUser.ejs b/views/deleteUser.ejs index 4da5af6..7650c78 100644 --- a/views/deleteUser.ejs +++ b/views/deleteUser.ejs @@ -5,12 +5,12 @@ Delete User - +

Delete User

-
+

Are you sure you want to delete <%= user.name %>?

diff --git a/views/index.ejs b/views/index.ejs index 7b7a1d6..68b0543 100644 --- a/views/index.ejs +++ b/views/index.ejs @@ -2,7 +2,7 @@ <%= title %> - +

<%= title %>

diff --git a/views/updateUser.ejs b/views/updateUser.ejs index 6132846..cc516a0 100644 --- a/views/updateUser.ejs +++ b/views/updateUser.ejs @@ -5,7 +5,7 @@ Update User - +

Update User

diff --git a/views/user.ejs b/views/user.ejs index 2a8df0d..08be78e 100644 --- a/views/user.ejs +++ b/views/user.ejs @@ -5,7 +5,7 @@ User Information - +

User Information

diff --git a/views/users.ejs b/views/users.ejs index f323c63..5e16f44 100644 --- a/views/users.ejs +++ b/views/users.ejs @@ -5,7 +5,7 @@ User List - +

User List

diff --git a/views/viewDesign.css b/views/viewDesign.css new file mode 100644 index 0000000..93977d8 --- /dev/null +++ b/views/viewDesign.css @@ -0,0 +1,67 @@ +.adduserpage { + width: 100%; + } + + body { + background-image: url("https://media.istockphoto.com/id/1390799493/vector/turquoise-gradation-background.jpg?s=612x612&w=0&k=20&c=7CgX9ySU7SkuZ-idIZh3xNuvYqokFuJCA3i7hN7rmVY="); + display: flex; + flex-direction: row; + justify-content: center; + background-repeat: no-repeat; + background-size: 2000px 2000px; + font-family: Verdana, Geneva, Tahoma, sans-serif; + } + + .infoboxes { + display: flex; + flex-wrap: wrap; + justify-content: center; + margin-bottom: 25px; + } + + .addnewuser { + display: flex; + flex-wrap: wrap; + justify-content: center; + } + + .spacebelowinfo { + margin-bottom: 25px; + } + + nav a { + display: flex; + color: black; + text-decoration: none; + padding-bottom: 15px; + width: 200px; + padding-left: 100px; + } + + a :hover { + color: blue; + } + + nav { + width: auto; + display: flex; + justify-content: center; + } + + .logoimage { + margin-left: 370px; + } + + footer { + font-size: small; + display: flex; + justify-content: center; + background-color: #1e1342; + color: white; + width: 100%; + } + + footer p { + margin-left: 20px; + margin-right: 20px; + } \ No newline at end of file From f7ea59d575eea8b80311edb80795b7bc5adf9c6b Mon Sep 17 00:00:00 2001 From: James Clulow <40301000@ads.qub.ac.uk> Date: Fri, 24 Jan 2025 14:15:46 +0000 Subject: [PATCH 2/2] The completed logic, this was presented, obviously changes can be made but it works and that's MVP --- users.json | 28 +++++++++++++++--- views/addUser.ejs | 17 +++++++++-- .../Kainos 800x250 Logo (Transparent BG).png | Bin 0 -> 21738 bytes views/media/favicon.png | Bin 0 -> 11102 bytes views/users.ejs | 2 +- 5 files changed, 39 insertions(+), 8 deletions(-) create mode 100644 views/media/Kainos 800x250 Logo (Transparent BG).png create mode 100644 views/media/favicon.png diff --git a/users.json b/users.json index 3ac2a5b..7b10e8a 100644 --- a/users.json +++ b/users.json @@ -5,7 +5,6 @@ "email": "shaun@test.com", "role": "Software Engineer", "salary": "40,000" - }, { "id": 2, @@ -34,7 +33,28 @@ "email": "noah@test.com", "role": "DevOps Engineer", "salary": "48,000" + }, + { + "name": "John Doe", + "address": "14 Malone Road", + "salary": "46000", + "role": "Employee", + "employeenumber": "46582", + "id": 6 + }, + { + "name": "Dave Smith", + "address": "24 Street Street", + "salary": "39000", + "role": "", + "employeenumber": "1234567", + "id": 7 + }, + { + "name": "James Clulow", + "address": "14 Malone Road", + "salary": "100000", + "employeenumber": "678786", + "id": 8 } -] - - +] \ No newline at end of file diff --git a/views/addUser.ejs b/views/addUser.ejs index 31cb9a5..bf8f723 100644 --- a/views/addUser.ejs +++ b/views/addUser.ejs @@ -6,6 +6,7 @@ Add New User + @@ -38,9 +39,19 @@

-
-
- +
+
+ + +
+

diff --git a/views/media/Kainos 800x250 Logo (Transparent BG).png b/views/media/Kainos 800x250 Logo (Transparent BG).png new file mode 100644 index 0000000000000000000000000000000000000000..0dff4eb9a5a73f88a8f7acbfee8120a8617a63be GIT binary patch literal 21738 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 k5 - +