diff --git a/BackendFolder/SwitchRoom/src/main/java/vt/CS5934/SwitchRoom/controllers/InteractiveController.java b/BackendFolder/SwitchRoom/src/main/java/vt/CS5934/SwitchRoom/controllers/InteractiveController.java index 69cdebbb0350f335eddcdfdf807d0cd98f69d068..0100193ace9d67cbde1de6c8323e9d8129e7cc00 100644 --- a/BackendFolder/SwitchRoom/src/main/java/vt/CS5934/SwitchRoom/controllers/InteractiveController.java +++ b/BackendFolder/SwitchRoom/src/main/java/vt/CS5934/SwitchRoom/controllers/InteractiveController.java @@ -5,10 +5,7 @@ import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.web.bind.annotation.*; -import vt.CS5934.SwitchRoom.models.InteractionModel; -import vt.CS5934.SwitchRoom.models.MatchedWishlistRecordModel; -import vt.CS5934.SwitchRoom.models.ResponseModel; -import vt.CS5934.SwitchRoom.models.UserOfferModel; +import vt.CS5934.SwitchRoom.models.*; import vt.CS5934.SwitchRoom.services.InteractionService; import vt.CS5934.SwitchRoom.services.MatchedWishlistRecordService; import vt.CS5934.SwitchRoom.utility.LookupTables; @@ -106,7 +103,8 @@ public class InteractiveController { public ResponseModel getInteraction(@PathVariable Integer userId) { logger.info("You reached the getInteraction() function."); try{ - InteractionModel[] tranBack = interactionService.findAllInteractionsFromDB(userId); +// InteractionModel[] tranBack = interactionService.findAllInteractionsFromDB(userId); + InteractionCombinedModel tranBack = interactionService.findAllInteractionsFromDB(userId); return new ResponseModel( "This is a Interaction array response", HttpStatus.OK, 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 3b6d2f02fc48768bcc2177cc5197a80ad6ba406f..2706941b5114dd1d69a587f61347145ae9e710d0 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 @@ -8,6 +8,7 @@ import org.springframework.data.repository.query.Param; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; +import vt.CS5934.SwitchRoom.models.InteractionCombinedModel; import vt.CS5934.SwitchRoom.models.ResponseModel; import vt.CS5934.SwitchRoom.models.UserModel; import vt.CS5934.SwitchRoom.services.Token; @@ -238,4 +239,22 @@ public class UserController { return response; } + + @GetMapping("/{userId}") + public ResponseModel getSpecificUser(@PathVariable Integer userId) { + logger.info("You reached the getSpecificUser() function."); + System.out.println("this is the specific user id " + userId); + try{ + UserModel back = userService.findSpecificUser(userId); + return new ResponseModel( + "This is a Interaction array response", + HttpStatus.OK, + back); + }catch (Exception e){ + return new ResponseModel( + "Error occur on get All ExampleModels, Error info is: " + e, + HttpStatus.OK, + null); + } + } } diff --git a/BackendFolder/SwitchRoom/src/main/java/vt/CS5934/SwitchRoom/models/InteractionCombinedModel.java b/BackendFolder/SwitchRoom/src/main/java/vt/CS5934/SwitchRoom/models/InteractionCombinedModel.java new file mode 100644 index 0000000000000000000000000000000000000000..99d5f9ee3dcdda5c8c5b0d39e7b19e5319750904 --- /dev/null +++ b/BackendFolder/SwitchRoom/src/main/java/vt/CS5934/SwitchRoom/models/InteractionCombinedModel.java @@ -0,0 +1,51 @@ +package vt.CS5934.SwitchRoom.models; + +public class InteractionCombinedModel { + + private InteractionModel[] list1; + + private InteractionModel[] list2; + + private UserModel[] user1; + + private UserModel[] user2; + + public InteractionCombinedModel(InteractionModel[] list1, InteractionModel[] list2, UserModel[] user1, UserModel[] user2) { + this.list1 = list1; + this.list2 = list2; + this.user1 = user1; + this.user2 = user2; + } + + public InteractionModel[] getList1() { + return list1; + } + + public void setList1(InteractionModel[] list1) { + this.list1 = list1; + } + + public InteractionModel[] getList2() { + return list2; + } + + public void setList2(InteractionModel[] list2) { + this.list2 = list2; + } + + public UserModel[] getUser1() { + return user1; + } + + public void setUser1(UserModel[] user1) { + this.user1 = user1; + } + + public UserModel[] getUser2() { + return user2; + } + + public void setUser2(UserModel[] user2) { + this.user2 = user2; + } +} diff --git a/BackendFolder/SwitchRoom/src/main/java/vt/CS5934/SwitchRoom/repositories/MatchedWishlistRecordRepository.java b/BackendFolder/SwitchRoom/src/main/java/vt/CS5934/SwitchRoom/repositories/MatchedWishlistRecordRepository.java index 8e067f3c602b651c33e0dd12e1dc02115a4104c3..063ee7f04e668eff916c1edf8f5dedbdfffb062d 100644 --- a/BackendFolder/SwitchRoom/src/main/java/vt/CS5934/SwitchRoom/repositories/MatchedWishlistRecordRepository.java +++ b/BackendFolder/SwitchRoom/src/main/java/vt/CS5934/SwitchRoom/repositories/MatchedWishlistRecordRepository.java @@ -44,7 +44,7 @@ public interface MatchedWishlistRecordRepository extends JpaRepository<MatchedWi void deleteMatchedWishlistRecordModelByOfferIdAndWishlistItemId(Long offerId, Long wishlistItemId); - List<MatchedWishlistRecordModel> findAllByOfferIdAndOfferResultAndWishlistResult(Long offerId, LookupTables.MATCHING_RECORD_USER_RESULT offerResult, LookupTables.MATCHING_RECORD_USER_RESULT wishlistResult); + List<MatchedWishlistRecordModel> findAllByOfferIdAndOfferResult(Long offerId, LookupTables.MATCHING_RECORD_USER_RESULT offerResult); - List<MatchedWishlistRecordModel> findAllByWishlistItemIdAndWishlistResultAndOfferResult(Long wishlistItemId, LookupTables.MATCHING_RECORD_USER_RESULT offerResult, LookupTables.MATCHING_RECORD_USER_RESULT wishlistResult); + List<MatchedWishlistRecordModel> findAllByWishlistItemIdAndWishlistResult(Long wishlistItemId, LookupTables.MATCHING_RECORD_USER_RESULT wishlistResult); } diff --git a/BackendFolder/SwitchRoom/src/main/java/vt/CS5934/SwitchRoom/services/DealWithWishlist.java b/BackendFolder/SwitchRoom/src/main/java/vt/CS5934/SwitchRoom/services/DealWithWishlist.java index 1b7b8e878775e2a97f1e4c6a379cd75a4bb39039..21a64ff514225d5106d9c5012d31b44058594268 100644 --- a/BackendFolder/SwitchRoom/src/main/java/vt/CS5934/SwitchRoom/services/DealWithWishlist.java +++ b/BackendFolder/SwitchRoom/src/main/java/vt/CS5934/SwitchRoom/services/DealWithWishlist.java @@ -28,7 +28,7 @@ public class DealWithWishlist { List<MatchedWishlistRecordModel> finalAns = new ArrayList<>(); for(int i = 0; i < list.size(); i++) { // System.out.println(list.get(i).getWishlistItemId() + " come on"); - List<MatchedWishlistRecordModel> ans = matchedWishlistRecordRepository.findAllByWishlistItemIdAndWishlistResultAndOfferResult(list.get(i).getWishlistItemId(), LookupTables.MATCHING_RECORD_USER_RESULT.Waiting, LookupTables.MATCHING_RECORD_USER_RESULT.Waiting); + List<MatchedWishlistRecordModel> ans = matchedWishlistRecordRepository.findAllByWishlistItemIdAndWishlistResult(list.get(i).getWishlistItemId(), LookupTables.MATCHING_RECORD_USER_RESULT.Waiting); // System.out.println(ans); finalAns.addAll(ans); } diff --git a/BackendFolder/SwitchRoom/src/main/java/vt/CS5934/SwitchRoom/services/InteractionService.java b/BackendFolder/SwitchRoom/src/main/java/vt/CS5934/SwitchRoom/services/InteractionService.java index 2b8268d0d6b78f85f2e8ad53bbce15de519af435..ebc32f66f730242fb32c554a25b330720232ce5c 100644 --- a/BackendFolder/SwitchRoom/src/main/java/vt/CS5934/SwitchRoom/services/InteractionService.java +++ b/BackendFolder/SwitchRoom/src/main/java/vt/CS5934/SwitchRoom/services/InteractionService.java @@ -4,6 +4,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import vt.CS5934.SwitchRoom.models.InteractionCombinedModel; import vt.CS5934.SwitchRoom.models.InteractionModel; import vt.CS5934.SwitchRoom.models.UserModel; import vt.CS5934.SwitchRoom.repositories.InteractionRepository; @@ -24,6 +25,9 @@ public class InteractionService { @Autowired InteractionRepository interactionRepository; + @Autowired + UserRepository userRepository; + public InteractionModel addDataToDB(Integer userId1, Integer userId2, String phone1, String phone2, Boolean judgement, String offerId, String wishlistId){ logger.info("Reached addNewExampleModelToDB()"); @@ -43,14 +47,26 @@ public class InteractionService { return updateData; } - public InteractionModel[] findAllInteractionsFromDB(Integer userId) { + public InteractionCombinedModel findAllInteractionsFromDB(Integer userId) { InteractionModel[] res1 = interactionRepository.findInteractionModelsByUserId1(userId); InteractionModel[] res2 = interactionRepository.findInteractionModelsByUserId2(userId); - int fal = res1.length; - int sal = res2.length; - InteractionModel[] res = new InteractionModel[fal + sal]; - System.arraycopy(res1, 0, res, 0, fal); - System.arraycopy(res2, 0, res, fal, sal); + UserModel[] user1 = new UserModel[res1.length]; + UserModel[] user2 = new UserModel[res2.length]; + for(int i = 0; i < res1.length; i++) { + UserModel user = userRepository.findByUserId(res1[i].getUserId2()); + user1[i] = user; + } + for(int j = 0; j < res2.length; j++) { + UserModel user = userRepository.findByUserId(res2[j].getUserId1()); + user2[j] = user; + } + + InteractionCombinedModel res = new InteractionCombinedModel(res1, res2, user1, user2); +// int fal = res1.length; +// int sal = res2.length; +// InteractionModel[] res = new InteractionModel[fal + sal]; +// System.arraycopy(res1, 0, res, 0, fal); +// System.arraycopy(res2, 0, res, fal, sal); return res; } } diff --git a/BackendFolder/SwitchRoom/src/main/java/vt/CS5934/SwitchRoom/services/MatchedWishlistRecordService.java b/BackendFolder/SwitchRoom/src/main/java/vt/CS5934/SwitchRoom/services/MatchedWishlistRecordService.java index 63c5974f48a0f77a71994404debe6745c134428d..2e1ba4bc06da20f46432235c0cf0d31ca1c11c9c 100644 --- a/BackendFolder/SwitchRoom/src/main/java/vt/CS5934/SwitchRoom/services/MatchedWishlistRecordService.java +++ b/BackendFolder/SwitchRoom/src/main/java/vt/CS5934/SwitchRoom/services/MatchedWishlistRecordService.java @@ -43,7 +43,7 @@ public class MatchedWishlistRecordService { public List<MatchedWishlistRecordModel> getOfferListWithIDFromDB(long id){ logger.info("Reached getOfferListIDFromDB()"); - return matchedWishlistRecordRepository.findAllByOfferIdAndOfferResultAndWishlistResult(id, LookupTables.MATCHING_RECORD_USER_RESULT.Waiting, LookupTables.MATCHING_RECORD_USER_RESULT.Waiting); + return matchedWishlistRecordRepository.findAllByOfferIdAndOfferResult(id, LookupTables.MATCHING_RECORD_USER_RESULT.Waiting); } public MatchedWishlistRecordModel getHistoryFromDB(Long offerId, Long wishlistItemId) { 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 a18e76906a062494723cc4a705d92c64f58ad03a..0a5eb36685a7b0f196191e5cc5b768f82b0be2d5 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 @@ -217,4 +217,9 @@ public class UserService { return false; } } + + public UserModel findSpecificUser(int userId) { + UserModel specificUser = userRepository.findByUserId(userId); + return specificUser; + } } diff --git a/FrontendFolder/switch-room/src/components/ResultCard.vue b/FrontendFolder/switch-room/src/components/ResultCard.vue index ad26c94cf3a440dd9d43e8d888933bbb158655d0..af3e78b248fdbb3cceab64910344b5a2e7d07669 100644 --- a/FrontendFolder/switch-room/src/components/ResultCard.vue +++ b/FrontendFolder/switch-room/src/components/ResultCard.vue @@ -1,10 +1,13 @@ <template> <div class="card"> <div class="container"> - <h3>Please use the phone number here to contact with another resident</h3> + <h3> + Please use the following information to contact with another resident + </h3> <div v-if="interaction.judgement"> - <p>Phone Number 1: {{ interaction.phone1 }}</p> - <p>Phone Number 2: {{ interaction.phone2 }}</p> + <p>Name: {{ user1.firstname }} {{ user1.lastname }}</p> + <p>Email: {{ user1.email }}</p> + <p>Phone: {{ interaction.phone2 }}</p> </div> <div v-else> <p>Another resident don't want to switch with you.</p> @@ -14,10 +17,17 @@ </template> <script setup lang="ts"> -import { defineProps } from "vue"; +import { defineProps, watch } from "vue"; import { InteractionModel } from "@/models/InteractionModel"; +import { useRoute } from "vue-router"; +import { UserModel } from "@/models/UserModel"; +import { inject } from "vue"; +const route = useRoute(); + const props = defineProps<{ interaction: InteractionModel; + // specificUser: UserModel; + user1: UserModel; }>(); </script> diff --git a/FrontendFolder/switch-room/src/components/ResultCardSecond.vue b/FrontendFolder/switch-room/src/components/ResultCardSecond.vue new file mode 100644 index 0000000000000000000000000000000000000000..3876d6a4d763b161d8895db82a193faa49f3ebbb --- /dev/null +++ b/FrontendFolder/switch-room/src/components/ResultCardSecond.vue @@ -0,0 +1,45 @@ +<template> + <div class="card"> + <div class="container"> + <h3> + Please use the following information to contact with another resident + </h3> + <div v-if="interaction.judgement"> + <p>Name: {{ user2.firstname }} {{ user2.lastname }}</p> + <p>Email: {{ user2.email }}</p> + <p>Phone: {{ interaction.phone1 }}</p> + </div> + <div v-else> + <p>Another resident don't want to switch with you.</p> + </div> + </div> + </div> +</template> + +<script setup lang="ts"> +import { defineProps, watch } from "vue"; +import { InteractionModel } from "@/models/InteractionModel"; +import { UserModel } from "@/models/UserModel"; +const props = defineProps<{ + interaction: InteractionModel; + user2: UserModel; +}>(); +</script> + +<style scoped> +.card { + /* Add shadows to create the "card" effect */ + box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2); + transition: 0.3s; +} + +/* On mouse-over, add a deeper shadow */ +.card:hover { + box-shadow: 0 8px 16px 0 rgba(0, 0, 0, 0.2); +} + +/* Add some padding inside the card container */ +.container { + padding: 2px 16px; +} +</style> diff --git a/FrontendFolder/switch-room/src/services/UserService.ts b/FrontendFolder/switch-room/src/services/UserService.ts index 1d0d97acefd82c879d3d1b4a275b27e7743b9527..c3d3eb7db7f1c1405199734cf23fa3ac562d3fb5 100644 --- a/FrontendFolder/switch-room/src/services/UserService.ts +++ b/FrontendFolder/switch-room/src/services/UserService.ts @@ -32,6 +32,11 @@ function getProfile() { return serverHttpService.Get(baseUrl + urlPath); } +function getSpecificProfile(userId: any) { + const urlPath = "/" + userId; + return serverHttpService.Get(baseUrl + urlPath); +} + export { postUserDataToServer, loginUser, @@ -39,5 +44,6 @@ export { resetPassword, forgotPassword, forgotPasswordCreateNew, - getProfile + getProfile, + getSpecificProfile, }; diff --git a/FrontendFolder/switch-room/src/views/ResultsView.vue b/FrontendFolder/switch-room/src/views/ResultsView.vue index 604458e34c35df7a196b9d7b5a917fe6e0e00527..c88491d12a95ece73c35780bcdd2ce42952b2d78 100644 --- a/FrontendFolder/switch-room/src/views/ResultsView.vue +++ b/FrontendFolder/switch-room/src/views/ResultsView.vue @@ -1,20 +1,34 @@ <template> <h1>Result List</h1> <h2><b>You can find the results here</b></h2> - <div v-for="interaction in interactions"> - <result-card :interaction="interaction"></result-card> + <div v-for="(interaction, index) in interaction1" :key="index"> + <result-card :interaction="interaction" :user1="user1[index]"></result-card> + </div> + <div v-for="(interaction, index) in interaction2"> + <result-card-second + :interaction="interaction" + :user2="user2[index]" + ></result-card-second> </div> </template> <script setup lang="ts"> import ResultCard from "@/components/ResultCard.vue"; +import ResultCardSecond from "@/components/ResultCardSecond.vue"; import { ref, watch } from "vue"; import { useRoute } from "vue-router"; import * as PhoneService from "@/services/PhoneService"; +import * as UserService from "@/services/UserService"; import { InteractionModel } from "@/models/InteractionModel"; +import { UserModel } from "@/models/UserModel"; +import { provide } from "vue"; const route = useRoute(); -const interactions = ref([] as InteractionModel[]); +const interaction1 = ref([] as InteractionModel[]); +const interaction2 = ref([] as InteractionModel[]); +const user1 = ref([] as UserModel[]); +const user2 = ref([] as UserModel[]); + function getCookie(userId: string) { const value = `; ${document.cookie}`; const parts: string[] = value.split(`; ${userId}=`); @@ -22,16 +36,31 @@ function getCookie(userId: string) { } async function fetchInteraction(userId: number) { const response = await PhoneService.fetchFromServer(userId); - interactions.value = response.data; + // interactions.value = response.data; + interaction1.value = response.data.list1; + interaction2.value = response.data.list2; + user1.value = response.data.user1; + user2.value = response.data.user2; console.log("what happened"); console.log(response.data); } + +// async function fetchSpecificUsers() { +// for (let i = 0; i < interaction1.value.length; i++) { +// const specificUserId = interaction1.value[i].userId2; +// const response = await UserService.getSpecificProfile(specificUserId); +// await specificUsers.value.push(await response.data); +// } +// console.log("what happened"); +// console.log(specificUsers.value); +// } watch( () => route.name, (values) => { const userIdString: string = getCookie("userId"); let userIdNumber = +userIdString; fetchInteraction(userIdNumber); + // await fetchSpecificUsers(); }, { immediate: true } );