링크 : 프로젝트파일 보기(GitHub)
관심사, 위치기반 모임 서비스 Meet-Meet
앞서 진행했던 프로젝트들에서 큰 틀만 잡고 진행을 하다 생긴 문제들이 많았다. 그래서 이번에는 더 세세한 계획을 세우고 프로젝트를 진행하기로 결정했다. 순서는 다음과 같다.
프로젝트 기획
웹사이트 설계


디자인 제작
웹사이트 개발
여러 테이블이 계정(account) 테이블을 참조하는 형태로 DB를 구성했다.

나머지 생략...

이번 팀프로젝트에서 친구기능을 주로 담당했기에 친구기능에 대해서만 간단하게 설명한다.

/* 자바스크립트용 전역변수 선언 */
var User = "?"; // 세션에서 받은 id 저장할 변수
var Username = "?"; // 세션에서 받은 nickname 저장할 변수
var targetFriendId = "?"; // 친구목록에서 현재 선택된 친구id를 저장할 변수
/* 서버단 세션에서 id,nickname 받아오기*/
axios
.post("getsession")
.then(
function(response) {
User = response.data[0];
Username = response.data[1];
showMe();
showFriends();
});
function showFriends(){
const xhttp = new XMLHttpRequest();
xhttp.onload = function() {
let res_data = this.responseText;
let data = JSON.parse(res_data);
// 출력 화면 코드 //
}
xhttp.open("get", `friendlist/findFriendListById1?id1=${User}`, true);
xhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded;charset=UTF-8");
xhttp.send();
}
@ResponseBody
@PostMapping("/getsession")
public String[] getSession(HttpSession session) {
return new String[] { session.getAttribute("accountId").toString(),
session.getAttribute("nickName").toString() };
}
@Query("SELECT fl.id, fl.id2.accountId, fl.id2.nickName FROM FriendList fl WHERE fl.id1.accountId=:id1")
public abstract List<List<String>> findId2ById1AccountId(String id1);
var friendsNum = 0;
var perPage = 12;
var pageNum = 0;
var tempData = 0;
var div = 0;
///// 1. 친구를 검색하는 함수 생성 //////
function findFriend() {
const findUser = document.getElementById("findUser").value;
const xhttp = new XMLHttpRequest();
///// 3.받아온 정보로 화면 구성 ////////
xhttp.onload = function() {
let res_data = this.responseText;
let data = JSON.parse(res_data);
// 화면 구성 생략 //
}
///// 2.서버에서 원하는 정보 비동기로 요청 ////////
xhttp.open("get", `searchUser?searching=${findUser}&id=${User}`, true);
xhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded;charset=UTF-8");
xhttp.send();
}
</script>
/// 1.친구신청하는 함수 생성 ///
function addFriend(v) {
const findUser = v;
const xhttp = new XMLHttpRequest();
/// 3.받아온 정보를 알람으로 출력 ////
xhttp.onload = function() {
let res_data = this.responseText;
alert(res_data);
}
/// 2.서버에 정보 비동기로 넘겨주고 결과요청 ///
xhttp.open("post", `friendlist/post?id1=${User}&id2=${findUser}`, true);
xhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded;charset=UTF-8");
xhttp.send();
}
public interface AccountRepository extends CrudRepository<Account, String>{
public List<Account> findByNickNameContainingAndAccountIdNot(String searching,String id);
}
// 1.닉네임으로 해당 Account 검색
Optional<Account> result1 = accountRepository.findById(id1);
Optional<Account> result2 = accountRepository.findById(id2);
// 2.검색된 Account로 친구목록에 존재하는지 검사
@Query("SELECT fl FROM FriendList fl WHERE fl.id1.accountId=:id1 AND fl.id2.accountId=:id2")
public abstract Optional<FriendList> findMyFunction(String id1, String id2);
// 3.모든 검사를 마치면 친구요청목록에 저장
friendRequestRepository.save(modelMapper.map(result, FriendRequest.class));
// 1.친구요청 목록을 보여주는 함수 생성 //
function showRequest(){
const xhttp = new XMLHttpRequest();
// 3. 받아온 정보로 화면구성 //
xhttp.onload = function() {
let res_data = this.responseText;
let data = JSON.parse(res_data);
// 화면 구성 생략 //
}
// 2.서버에 정보 비동기로 요청 ///
xhttp.open("get", `friendrequest/findFriendRequestByRequestedId?requestedId=${User}`, true);
xhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded;charset=UTF-8");
xhttp.send();
}
function acceptRequest(v1,v2,v3){
const request1 = v1;
const request2 = v2;
const request3 = v3;
const xhttp = new XMLHttpRequest();
xhttp.onload = function() {
let res_data = this.responseText;
alert(res_data);
showRequest();
}
xhttp.open("delete", `friendrequest/accept?id=${request1}&id1=${request2}&id2=${request3}`, true);
xhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded;charset=UTF-8");
xhttp.send();
}
function deleteRequest(v){
const request = v;
const xhttp = new XMLHttpRequest();
xhttp.onload = function() {
let res_data = this.responseText;
alert(res_data);
showRequest();
}
xhttp.open("delete", `friendrequest/delete?id=${request}`, true);
xhttp.setRequestHeader("Content-type","application/x-www-form-urlencoded;charset=UTF-8");
xhttp.send();
}
Optional<Account> result1 = accountRepository.findById(id1);
Optional<Account> result2 = accountRepository.findById(id2);
AccountDTO result3 = null;
AccountDTO result4 = null;
if (result1.isPresent()) {
result3 = modelMapper.map(result1.get(), AccountDTO.class);
}
if (result2.isPresent()) {
result4 = modelMapper.map(result2.get(), AccountDTO.class);
}
FriendListDTO result = FriendListDTO.builder().id1(result3).id2(result4).build();
friendListRepository.save(modelMapper.map(result, FriendList.class));
FriendListDTO resultt = FriendListDTO.builder().id2(result3).id1(result4).build();
friendListRepository.save(modelMapper.map(resultt, FriendList.class));
friendRequestRepository.deleteById(id2);