My page에서 회원정보를 변경할 때, ID도 변경할 수 있게 만들었다.
여기서 예기치 못한 문제가 발생했는데 회원 ID가 변경될 때, 해당 회원이 활동한 내역에 적용되지 않는다는 것이다.
다시 말하자면,
abc123이라는 ID를 cba321로 변경했는데
게시글, 댓글, 세미나실 예약정보에 저장된 ID는 변경되지 않고
abc123 을 유지 하고 있다는 것이다.
이렇게 되면 ID가 변경되었을 경우 게시글, 댓글이 삭제되지 않으며 세미나실 예약정보 또한 확인,취소가 불가능해진다.
그래서 Service단을 수정해서 ID정보가 변경될 때, 해당 ID의 모든 활동도 변경시켰다.
Service
try {} 안에 else문을 보자.
ID가 변경된 경우, 회원의 활동 내역들을 조사하여 변경하는 sql을 호출한다.
@Override
@Transactional
public HashMap<String,String> changeMemberInfo(MemberTO memberTO,HttpSession session){
HashMap<String, String> map = new HashMap<>();
map.put("errorCd", "N");
map.put("errorMsg", "성공");
//변경저장요청은 들어왔지만, 변경사항된 회원정보가 없을경우
if(memberTO.getId().isEmpty()&&memberTO.getBirth()==0&&memberTO.getPassword().isEmpty()&&memberTO.getName().isEmpty()) {
map.put("errorCd", "Y");
map.put("errorMsg", "변경할 데이터가 없습니다.");
return map;
}
try {
//회원 정보변경
myPageMapper.updateMemberInfo(memberTO);
//회원ID가 변경되지 않은 경우 session에 있는 회원 ID를 가져온다.
if(memberTO.getId().isEmpty() || memberTO.getId()==""){
memberTO.setId((String) session.getAttribute("memberId"));
}else{//회원ID가 변경된 경우 회원이 활동 내역 찾아서 ID 변경
myPageMapper.updateBoardInfo(memberTO);
myPageMapper.updateBoardCmtInfo(memberTO);
myPageMapper.updateRoomBookInfo(memberTO);
}
//memberTO.setId(memberTO.getId());
//회원 ID를담은 TO를 회원정보조회 메서드로 보내 변경된 회원정보를 가져온다.
memberTO=retrieveMemberInfo(memberTO);
//변경된 회원정보를 session에 담아준다.
SessionController.loginSession(session, memberTO);
}catch (Exception e) {
map.put("errorCd", "Y");
map.put("errorMsg", "정보변경 중 데이터 에러발생");
e.printStackTrace();
}
return map;
}
Mapper
테이블 BOARD, BOARD_COMMENT, ROOM_BOOK 에 변경 이전 ID 로 활동한 기록이 있으면
새로운 ID로 전부 변경시킨다.
<update id="updateBoardInfo" parameterType="com.helper.study.stuhel.member.to.MemberTO">
UPDATE BOARD
SET WRITER = #{id}
WHERE WRITER = #{sessionId}
</update>
<update id="updateBoardCmtInfo" parameterType="com.helper.study.stuhel.member.to.MemberTO">
UPDATE BOARD_COMMENT
SET WRITER = #{id}
WHERE WRITER = #{sessionId}
</update>
<update id="updateRoomBookInfo" parameterType="com.helper.study.stuhel.member.to.MemberTO">
UPDATE ROOM_BOOK
SET USER_ID = #{id}
WHERE USER_ID = #{sessionId}
</update>