diff --git a/src/main/client/index.html b/src/main/client/index.html
new file mode 100644
index 000000000..e55ca2640
--- /dev/null
+++ b/src/main/client/index.html
@@ -0,0 +1,53 @@
+
+
+
+
+
+ YouAreEll Client
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/main/client/js/index.js b/src/main/client/js/index.js
new file mode 100644
index 000000000..d4de26ab9
--- /dev/null
+++ b/src/main/client/js/index.js
@@ -0,0 +1,83 @@
+import MessageService from "./message-service.js";
+
+let userId = "Tester";
+const messageService = new MessageService();
+
+window.addEventListener("load", function () {
+ //document.getElementById("greeting").innerHTML = `Welcome ${userId}`;
+ createFormListener();
+ messageService.getAllMessages().then(successCallback, errorCallback);
+});
+
+function successCallback(response) {
+ // This data comes from the resolve method
+ populateThread(response);
+ console.log(response);
+}
+
+function errorCallback(response) {
+ // This data comes from the reject method
+ console.log(response);
+}
+
+function populateThread(messages) {
+ messages.forEach(message => {
+ addMessageToThread(message);
+ })
+}
+
+function addMessageToThread(message) {
+ const messageListItem = document.createElement("div");
+ messageListItem.className = "message";
+
+ const messageHead = document.createElement("div");
+ messageHead.className = "message-head";
+
+ const userIdContent = document.createElement("div");
+ userIdContent.className = "message-sender";
+ userIdContent.innerHTML = message.fromid;
+ messageHead.appendChild(userIdContent);
+
+ const timeContent = document.createElement("div");
+ timeContent.className = "message-time";
+ timeContent.innerHTML = message.timestamp;
+ messageHead.appendChild(timeContent);
+
+ const messageBody = document.createElement("div");
+ messageBody.innerHTML = message.message;
+
+ messageListItem
+ .appendChild(messageHead)
+ .appendChild(messageBody);
+ document.getElementById("message-container").appendChild(messageListItem);
+}
+
+function createFormListener() {
+ const input = document.getElementById("message-text-box-input");
+
+ input.onkeydown = function (event) {
+ // stop the regular form submission
+ if (event.key === 'Enter') {
+ event.preventDefault();
+
+ const data = {
+ fromid: userId,
+ message: input.value
+ };
+ input.value = "";
+
+ messageService.createNewMessage(data)
+ .then(successCallback, errorCallback);
+
+ function successCallback(response) {
+ // This data comes from the resolve method
+ addMessageToThread(response);
+ }
+
+ function errorCallback(response) {
+ // This data comes from the reject method
+ console.log(response);
+ }
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/main/client/js/message-service.js b/src/main/client/js/message-service.js
new file mode 100644
index 000000000..9b9f952d2
--- /dev/null
+++ b/src/main/client/js/message-service.js
@@ -0,0 +1,56 @@
+export default class MessageService {
+
+ getAllMessages() {
+ const request = new XMLHttpRequest();
+
+ return new Promise(function (resolve, reject) {
+ // Setup our listener to process compeleted requests
+ request.onload = function () {
+ // Process the response
+ if (request.status >= 200 && request.status < 300) {
+ // If successful
+ const threads = JSON.parse(request.responseText);
+ // this data is passed to the success callback
+ resolve(threads);
+ } else {
+ // this data is passed to the failure callback
+ reject({
+ status: request.status,
+ statusText: request.statusText
+ });
+ }
+ };
+
+ request.open("GET", "http://zipcode.rocks:8085/messages");
+
+ request.send();
+ })
+ }
+
+
+ createNewMessage(message) {
+ const request = new XMLHttpRequest();
+
+ return new Promise(function (resolve, reject) {
+ // Setup our listener to process compeleted requests
+ request.onload = function () {
+ // Process the response
+ if (request.status >= 200 && request.status < 300) {
+ // If successful
+ resolve(JSON.parse(request.responseText));
+ } else {
+ reject({
+ status: request.status,
+ statusText: request.statusText
+ });
+ }
+ };
+
+ request.open("POST", `http://zipcode.rocks:8085/ids/${message.fromid}/messages`);
+
+ request.send(JSON.stringify(message));
+ });
+ }
+
+
+}
\ No newline at end of file
diff --git a/src/main/client/styles.css b/src/main/client/styles.css
new file mode 100644
index 000000000..7026e163b
--- /dev/null
+++ b/src/main/client/styles.css
@@ -0,0 +1,119 @@
+body {
+ overflow: hidden;
+}
+
+input:focus {
+ outline-width: 0;
+}
+
+#actions {
+ position: absolute;
+ top: 0;
+ left: 0;
+ width: 100px;
+ height: 100vh;
+ background: #35373f;
+}
+
+#sidebar {
+ position: absolute;
+ top: 0;
+ left: 100px;
+ width: 300px;
+ height: 100vh;
+ background: #35373f;
+}
+
+#hub {
+ position: absolute;
+ top: 0;
+ left: 400px;
+ width: calc(100vw - 400px);
+ height: 100vh;
+ background: #36383f;
+}
+
+.topNav {
+ overflow: hidden;
+ position: relative;
+ top: 0;
+ left: 0;
+ width: 100%;
+ height: 50px;
+ border-bottom: 1px solid #202225;
+}
+.hub-actions h3 {
+ color: #fff;
+ width: 90%;
+ margin: 15px auto;
+}
+
+.sidebar-search input {
+ width: 240px;
+ height: 25px;
+ margin: 11px auto;
+ display: block;
+ border: none;
+ border-radius: 3px;
+ background: #1f2225;
+ color: #72767d;
+ padding: 1px 10px;
+ font-size: 14px;
+}
+
+
+
+.chat {
+ color: #fff;
+ width: 90%;
+ margin: 15px auto;
+}
+
+
+
+.messages {
+ width: 90%;
+ margin: auto;
+ height: calc(100% - 120px);
+ overflow: scroll;
+}
+.message {
+ padding: 10px 0px;
+ border-bottom: 1px solid #42454a;
+ color: #DCDDDE;
+}
+.message .message-head .message-sender {
+ display: inline-block;
+ color: #FFFFFF;
+ font-size: 18px;
+}
+.message .message-head .message-time {
+ display: inline-block;
+ padding-left: 10px;
+ font-size: 10px;
+ color: #72767d;
+}
+
+.message-text-box {
+ bottom: 0;
+ width: 100%;
+ height: 70px;
+}
+.message-text-box .input-wrapper {
+ width: 90%;
+ margin: auto;
+ border-top: 1px solid #42454a;
+ overflow: hidden;
+}
+.message-text-box input {
+ width: calc(100% - 20px);
+ height: 25px;
+ margin: 13px auto;
+ display: block;
+ border: none;
+ border-radius: 5px;
+ background: #1f2225;
+ color: #72767d;
+ padding: 9px 10px;
+ font-size: 14px;
+}
\ No newline at end of file
diff --git a/src/main/java/com/groupfour/chatapp/chatapp/user/User.java b/src/main/java/com/groupfour/chatapp/chatapp/user/User.java
index bdf8b9cac..c12658f88 100644
--- a/src/main/java/com/groupfour/chatapp/chatapp/user/User.java
+++ b/src/main/java/com/groupfour/chatapp/chatapp/user/User.java
@@ -19,27 +19,30 @@ public class User {
private Long userId;
private String userName;
-
private String password;
-
private String email;
- private Date timeStamp;
+ private Date timeStamp = new Date();
+ private Integer activeStatus = 0;
@OneToMany
private Set messages;
- private Integer activeStatus;
-
public User() {
}
+ public User(String userName, String password, String email) {
+ this.userName = userName;
+ this.password = password;
+ this.email = email;
+ }
+
+
public Long getUserId() {
return userId;
}
-
public String getUserName() {
return userName;
}
diff --git a/src/main/java/com/groupfour/chatapp/chatapp/user/UserController.java b/src/main/java/com/groupfour/chatapp/chatapp/user/UserController.java
index f7db9b730..aa733c6f5 100644
--- a/src/main/java/com/groupfour/chatapp/chatapp/user/UserController.java
+++ b/src/main/java/com/groupfour/chatapp/chatapp/user/UserController.java
@@ -2,15 +2,45 @@
import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.web.bind.annotation.RestController;
+import org.springframework.http.HttpStatus;
+import org.springframework.http.ResponseEntity;
+import org.springframework.web.bind.annotation.*;
@RestController
public class UserController {
private UserService userService;
+ private UserRepository userRepository;
@Autowired
- public UserController(UserService userService) {
+ public UserController(UserRepository userRepository, UserService userService) {
+ this.userRepository = userRepository;
this.userService = userService;
}
+
+ @GetMapping("/user/{userId}")
+ public ResponseEntity getUser(@PathVariable Long userId) {
+ User user = userRepository.findById(userId).get();
+ return new ResponseEntity<>(user, HttpStatus.OK);
+ }
+
+ @PostMapping("/user")
+ public ResponseEntity createUser(@RequestBody User user) {
+ return new ResponseEntity<>(userRepository.save(user), HttpStatus.CREATED);
+ }
+
+ @PutMapping("/user/{userId}")
+ public ResponseEntity updateUser(@PathVariable Long userId, @RequestBody User user) {
+ User existingUser = userRepository.findById(userId).get();
+ existingUser.setEmail(user.getEmail());
+ existingUser.setPassword(user.getPassword());
+ return new ResponseEntity<>(userRepository.save(existingUser), HttpStatus.CREATED);
+ }
+
+ @DeleteMapping("/user/{userId}")
+ public ResponseEntity deleteUser(@PathVariable Long userId) {
+ userRepository.deleteById(userId);
+ return new ResponseEntity<>(true, HttpStatus.OK);
+ }
+
}