From 948de0b716acbdf5c787d0799ccdcbbda3cb963e Mon Sep 17 00:00:00 2001 From: Bart Chou <bart@beehex.com> Date: Sat, 5 Nov 2022 10:53:18 -0400 Subject: [PATCH] finish profile --- .../controllers/UserController.java | 16 +++++ .../SwitchRoom/services/UserService.java | 27 +++++++- .../src/components/ProfilePage.vue | 63 +++++++++++++------ .../switch-room/src/services/UserService.ts | 12 +++- 4 files changed, 97 insertions(+), 21 deletions(-) diff --git a/BackendFolder/SwitchRoom/src/main/java/vt/CS5934/SwitchRoom/controllers/UserController.java b/BackendFolder/SwitchRoom/src/main/java/vt/CS5934/SwitchRoom/controllers/UserController.java index 16e71453..f6fb157f 100644 --- a/BackendFolder/SwitchRoom/src/main/java/vt/CS5934/SwitchRoom/controllers/UserController.java +++ b/BackendFolder/SwitchRoom/src/main/java/vt/CS5934/SwitchRoom/controllers/UserController.java @@ -134,4 +134,20 @@ public class UserController { return response; } + + @GetMapping("/profile") + public ResponseModel getProfile( + @CookieValue(value = "userId", required = false) String userId, + @CookieValue(value = "token", required = false) String token) { + ResponseModel response = new ResponseModel(); + + if (userId == null || token == null || !userService.checkLoginSession(userId, token)) { + response.setMessage("Login session expired or invalid"); + response.setStatus(HttpStatus.FORBIDDEN); + return response; + } + + response = userService.getProfile(userId); + return response; + } } diff --git a/BackendFolder/SwitchRoom/src/main/java/vt/CS5934/SwitchRoom/services/UserService.java b/BackendFolder/SwitchRoom/src/main/java/vt/CS5934/SwitchRoom/services/UserService.java index fe034308..50032ddb 100644 --- a/BackendFolder/SwitchRoom/src/main/java/vt/CS5934/SwitchRoom/services/UserService.java +++ b/BackendFolder/SwitchRoom/src/main/java/vt/CS5934/SwitchRoom/services/UserService.java @@ -2,6 +2,7 @@ package vt.CS5934.SwitchRoom.services; import com.fasterxml.jackson.core.JsonProcessingException; import com.fasterxml.jackson.databind.ObjectMapper; +import net.bytebuddy.implementation.bytecode.Throw; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -15,7 +16,9 @@ import vt.CS5934.SwitchRoom.repositories.UserRepository; import javax.transaction.Transactional; import java.security.NoSuchAlgorithmException; +import java.util.LinkedHashMap; import java.util.List; +import java.util.Map; @Service public class UserService { @@ -90,7 +93,7 @@ public class UserService { UserModel existUser = userRepository.findByUserId(Integer.parseInt(userId)); if (existUser == null) { - logger.error("checkLoginSession: FORBIDDEN (user not found)"); + logger.warn("checkLoginSession: FORBIDDEN (user not found)"); return false; } ObjectMapper mapper = new ObjectMapper(); @@ -113,4 +116,26 @@ public class UserService { } } + public ResponseModel getProfile(String userId) { + ResponseModel response = new ResponseModel(); + UserModel existUser = userRepository.findByUserId(Integer.parseInt(userId)); + + if (existUser == null) { + logger.warn("getProfile: FORBIDDEN (user not found)"); + response.setMessage("user not found"); + response.setStatus(HttpStatus.FORBIDDEN); + return response; + } + + Map<String, String> profile = new LinkedHashMap<>(); + profile.put("username", existUser.getUsername()); + profile.put("email", existUser.getEmail()); + profile.put("firstName", existUser.getFirstname()); + profile.put("lastName", existUser.getLastname()); + + response.setData(profile); + response.setStatus(HttpStatus.OK); + + return response; + } } diff --git a/FrontendFolder/switch-room/src/components/ProfilePage.vue b/FrontendFolder/switch-room/src/components/ProfilePage.vue index cc4fc1d9..7bfbf2f5 100644 --- a/FrontendFolder/switch-room/src/components/ProfilePage.vue +++ b/FrontendFolder/switch-room/src/components/ProfilePage.vue @@ -8,21 +8,25 @@ <div class="row clearfix"> <div class=""> <div class="form"> - <label for="user-oldPassword" style="padding-top: 13px"> - Username - </label> + <div class="profile-label"> + <div> Username</div> + <div>{{profile.username}} </div> + </div> <div class="form-border"></div> - <label for="user-newPassword" style="padding-top: 13px"> - Email - </label> + <div class="profile-label"> + <div> Email</div> + <div>{{profile.email}} </div> + </div> <div class="form-border"></div> - <label for="user-newPassword" style="padding-top: 13px"> - First Name - </label> + <div class="profile-label"> + <div> First Name</div> + <div>{{profile.firstName}} </div> + </div> <div class="form-border"></div> - <label for="user-newPassword" style="padding-top: 13px"> - Last Name - </label> + <div class="profile-label"> + <div> Last Name</div> + <div>{{profile.lastName}} </div> + </div> <div class="form-border"></div> <button id="submit-btn" @click.prevent="onClickResetPassword" type="submit" value="Submit"> Reset Password @@ -35,16 +39,30 @@ </template> <script setup lang="ts"> -import { ref, reactive } from "vue"; -import * as UserService from "../services/UserService"; +import { ref, reactive, onMounted } from "vue"; import { useRouter } from "vue-router"; -import { User } from "@/type/types"; +import {getProfile} from "../services/UserService"; const router = useRouter(); -const userInformation = reactive({ - oldPassword: "", - newPassword: "" +const profile = reactive({ + username: "", + email: "", + firstName: "", + lastName: "", }); - +onMounted(async () => { + await getProfile() + .then((response) => { + if (response.status == "OK") { + const data = response.data + profile.username = data["username"] + profile.email = data["email"] + profile.firstName = data["firstName"] + profile.lastName = data["lastName"] + } else { + alert(response.message) + } + }) +}) const onClickResetPassword = () => { router.push("/resetpassword"); }; @@ -100,6 +118,13 @@ body { width: 100%; } +.profile-label { + padding-top: 13px; + display: flex; + flex-direction: row; + justify-content: space-between; +} + #submit-btn { background: #2ec06f; border: none; diff --git a/FrontendFolder/switch-room/src/services/UserService.ts b/FrontendFolder/switch-room/src/services/UserService.ts index 5e10fac9..77fed4b4 100644 --- a/FrontendFolder/switch-room/src/services/UserService.ts +++ b/FrontendFolder/switch-room/src/services/UserService.ts @@ -19,5 +19,15 @@ function resetPassword(userData: any) { const urlPath = "/resetPassword"; return serverHttpService.Post(baseUrl + urlPath, JSON.parse(userData)); } +function getProfile() { + const urlPath = "/profile"; + return serverHttpService.Get(baseUrl + urlPath); +} -export { postUserDataToServer, loginUser, checkLoginSession, resetPassword }; +export { + postUserDataToServer, + loginUser, + checkLoginSession, + resetPassword, + getProfile +}; -- GitLab