회원 정보 수정 다이어그램.drawio.png

회원 정보 수정 다이어그램.drawio

MemberController

	// 프로필 사진 업로드
	@ResponseBody
	@RequestMapping(value = "/memberProfileImageUpload.do", method = RequestMethod.POST, produces = "application/json; charset=utf8")
	public String memberProfileImageLoad(@RequestParam("file") MultipartFile multipartFile, HttpServletRequest request,
			HttpSession session) throws Exception {

		// 아이디 가져오기
		// 세션에서 아이디 가져오기
		MemberDomain memberDomain = (MemberDomain) session.getAttribute("member");
		String memberId = memberDomain.getMemberId();
		System.out.println("memberId야 들어왔니? " + memberId);

		JsonObject jsonObject = new JsonObject();

// 	    String fileRoot = request.getSession().getServletContext().getRealPath("/resources/images/board/");  // 내부경로 저장
		String fileRoot = "C:\\\\gami\\\\memberProfileImage\\\\" + memberId + "\\\\"; // 외부 경로 저장
		String originalFileName = multipartFile.getOriginalFilename(); // 원래 파일명
		System.out.println(originalFileName);
		String extension = originalFileName.substring(originalFileName.lastIndexOf(".")); // 파일 확장자 확인
		System.out.println(extension);

		if (!Arrays.asList(ALLOW_EXTENSION).contains(extension)) {
			jsonObject.addProperty("responseCode", "extension");
			String check = jsonObject.toString();
			System.out.println(check);
			return check;
		}

		String savedFileName = UUID.randomUUID() + extension;  // 파일 이름 새로 부여 : UUID
		File targetFile = new File(fileRoot + savedFileName);
		try {
			InputStream fileStream = multipartFile.getInputStream();

			FileUtils.copyInputStreamToFile(fileStream, targetFile);

			// 파일 저장
// 	        jsonObject.addProperty("url", fileRoot + savedFileName); // contextroot + resources + 저장할 내부 폴더명
			System.out.println(fileRoot + savedFileName);
			System.out.println("떠라 제발 : " + memberId + savedFileName);
			jsonObject.addProperty("fileName", "\\\\" + memberId + "\\\\" + savedFileName); // 톰켓 서버.xml에서 경로 설정해줬기에 게시글
																							// 번호 폴더명과 파일명을 같이 넘겨야함.

			jsonObject.addProperty("responseCode", "success");
			jsonObject.addProperty("fileName", savedFileName);

		} catch (IOException e) {
			FileUtils.deleteQuietly(targetFile); // 업로드 실패 시 하위 파일 및 폴더 삭제
			jsonObject.addProperty("responseCode", "error");
			e.printStackTrace();
		}

		String check = jsonObject.toString();
		return check;
	}

// 회원 정보 수정
// 맵으로 받는 걸로 수정할까?
	@RequestMapping(value = "/memberUpdate.do", method = RequestMethod.POST)
	public ResponseEntity memberUpdate(@RequestParam("memberNickName") String memberNickName,
			@RequestParam("memberEmail1") String memberEmail1, @RequestParam("memberEmail2") String memberEmail2,
			@RequestParam("memberPhone1") String memberPhone1, @RequestParam("memberPhone2") String memberPhone2,
			@RequestParam("memberPhone3") String memberPhone3, @RequestParam("memberZip1") String memberZip1,
			@RequestParam("memberZip2") String memberZip2, @RequestParam("memberZip3") String memberZip3,
			@RequestParam("memberImage") String memberImage,HttpServletRequest request) throws Exception{
		// 들어왔나 확인.
		System.out.println("수정 memberNickName 들어왔니? " + memberNickName);
		System.out.println("수정 memberEmail1 들어왔니? " + memberEmail1);
		System.out.println("수정 memberEmail2 들어왔니? " + memberEmail2);
		System.out.println("수정 memberPhone1 들어왔니? " + memberPhone1);
		System.out.println("수정 memberPhone2 들어왔니? " + memberPhone2);
		System.out.println("수정 memberPhone3 들어왔니? " + memberPhone3);
		System.out.println("수정 memberZip1 들어왔니? " + memberZip1);
		System.out.println("수정 memberZip2 들어왔니? " + memberZip2);
		System.out.println("수정 memberZip3 들어왔니? " + memberZip3);
		System.out.println("수정 memberImage 들어왔니? " + memberImage);
		
		memberDomain.setMemberNickname(memberNickName);
		memberDomain.setMemberEmail1(memberEmail1);
		memberDomain.setMemberEmail2(memberEmail2);
		memberDomain.setMemberPhone1(memberPhone1);
		memberDomain.setMemberPhone2(memberPhone2);
		memberDomain.setMemberPhone3(memberPhone3);
		memberDomain.setMemberZip1(memberZip1);
		memberDomain.setMemberZip2(memberZip2);
		memberDomain.setMemberZip3(memberZip3);
		
		if(memberImage!="") {
		memberDomain.setMemberImage(memberImage);
		}
		
		System.out.println("일로 왔니? " + memberImage);
		System.out.println("memberDomain.getMemberImage(); : " + memberDomain.getMemberImage());
		
		
		try {
		memberService.updateMember(memberDomain);
		
		if(memberImage!="") {
		
		String imageRoot = "C:\\\\gami\\\\memberProfileImage\\\\" + memberDomain.getMemberId() + "\\\\";

		System.out.println(imageRoot);
		
		// 이미지 경로로 파일 객체 생성
		File imageDir = new File(imageRoot);

		// 이미지 파일 목록을 배열에 담음.
		if (imageDir.exists()) {
		    String[] imageList = imageDir.list();
		    

		    // for문을 돌려서 이미지 파일이 포함되었나 확인
		    for (String imageName : imageList) {
		        System.out.println(imageName);
		        boolean check = memberDomain.getMemberImage().equals(imageName);
		        System.out.println("이름이 같은지 : " + check);

		        // 폴더에 해당 파일이랑 다른 파일들은 삭제
		        if (!check) {
		            String filePath = imageRoot + imageName;
		            File fileToDelete = new File(filePath);
		            FileUtils.deleteQuietly(fileToDelete);
		        }
		    }
		}
		}
		
		}catch(Exception e){
			e.printStackTrace();
			System.out.println("수정 및 파일 삭제 실패");
			
		}
		ResponseEntity res = null;
		String msg = "<script>";
		msg += " alert('회원 정보가 수정되었습니다.');";
		msg += " location.href='" + request.getContextPath() + "/member/memberModifyForm.do'; ";
		msg += " </script>";
		HttpHeaders responseHeaders = new HttpHeaders();
		responseHeaders.add("Content-Type", "text/html; charset=utf-8");
		res = new ResponseEntity(msg, responseHeaders, HttpStatus.CREATED);
		return res;

	}

MemberServiceImpl

// 회원 정보 수정
	@Override
	public void updateMember(MemberDomain memberDomain) throws Exception {
		memberDAO.updateMember(memberDomain);
	}

MemberDAOImpl

	@Override
	public void updateMember(MemberDomain memberDomain) throws DataAccessException {
		sqlSession.update("mapper.member.updateMember", memberDomain);
	} 

member.xml

    <!-- 회원 정보 수정 -->
    <update id="updateMember" parameterType="memberDomain">
    	<![CDATA[
    		UPDATE member
    		set memberPhone1= #{memberPhone1}, memberPhone2= #{memberPhone2},
    		memberPhone3= #{memberPhone3}, memberNickname= #{memberNickname},
    		memberEmail1= #{memberEmail1}, memberEmail2= #{memberEmail2},
    		memberZip1= #{memberZip1}, memberZip2= #{memberZip2},
    		memberZip3= #{memberZip3}, memberImage= #{memberImage},
    		memberUpdated = sysdate
    		where memberId= #{memberId}
     	]]>
    </update>

memberModifyForm.jsp

//중복확인용 변수
var msg1; // document.getElement 쓰기 위함
var msg2; // document.getElement 쓰기 위함
var usable; // '사용가능' 문자 넣기 위함
var not_usable; // '사용불가능' 문자 넣기 위함
var de_check_requirement = new Array();
var check_requirement = new Array();

var result1 = "true"; // ajax - /member/nickNameCheck.do 메서드랑 연관있음 / 닉네임 상태
var InputMemberNameStatusCheck = true; // memberName 입력 상태
var InputEmail1StatusCheck = true; // email1 입력 상태
var InputEmail2StatusCheck = true; // email2 입력 상태
var InputPwdStatusCheck = true; // 비밀번호 입력 상태
var doubleCheckPwd = true; // 비밀번호확인 입력 상태
var checkZip = true; // 우편번호 입력 상태

//닉네임 중복확인 (실시간)
function nickNameCheck(){
   
   var nickName = document.getElementsByName("memberNickName")[0].value;
   
   msg1 = document.getElementById('nickMsg1');
   msg2 = document.getElementById('nickMsg2');
   
   if(nickName.length < 2 || nickName.length > 10){
      msg1.innerText = '2 ~ 10 글자만 가능합니다.';
      msg2.innerText = "";
      result1 = "false";
   } else{ 
      $.ajax({
         url: '${contextPath}/member/nickNameCheck.do',
         method: 'post',
         data: {'nickName':nickName},
         dataType: 'json',
         success: function(data){
            result1 = data.result;
            usable = '사용가능한 닉네임입니다.';
            not_usable = '중복되는 닉네임입니다.';
            if(result1 == "false"){
               msg2.innerText = "";
               msg1.innerText = not_usable;
               result1 = "false";
            }else{
               msg1.innerText = "";
               msg2.innerText = usable;
               result1 = "true";
            }
         },error: function(data){
            alert('error');
         }
      });
   }
};

//입력란 기호에 안맞는 문자 입력 필터
function deInputKo(e){
	
   if(!(e.keyCode >= 37 && e.keyCode <= 40)){
      
      document.getElementById('emailMsg1').innerText = ""; // 재입력 시 경고 메시지 안뜨게
      document.getElementById('emailMsg2').innerText = "";   
      
      var inputEmail = document.getElementsByName("memberEmail1")[0].value;
      var inputEmail2 = document.getElementsByName("memberEmail2")[0].value;
      
      var check = /[ㄱ-ㅎ|ㅏ-ㅣ|가-힣]/; // 한글
      var check1 = /[~!@#$%";'^,&*()_+|</>=>`?:{[\\}]/g; // 특수문자
      var check2 = /\\s+/g; // 중간중간 공백 검사
      // var check2 = /^\\s+|\\s+$/g // 얘는 문자 양쪽 끝만 확인
      
      if(check.test(inputEmail) || check1.test(inputEmail) || check2.test(inputEmail)){
         InputEmail1StatusCheck = false;
         document.getElementById('emailMsg1').innerText = "영문/숫자만 입력해주세요.";
      }
      if(check.test(inputEmail2) || check2.test(inputEmail2)){
         InputEmail2StatusCheck = false;
         document.getElementById('emailMsg1').innerText = "공백 및 한글을 제외한 입력이 감지되었습니다.";
      }
   }
};

//이메일 도메인 선택/직접입력
function choiceEmail(value){
   if(value === '직접입력'){
      document.getElementsByName("memberEmail2")[0].value = "";
      document.getElementsByName("memberEmail2")[0].disabled = false;
   } else {
      document.getElementsByName("memberEmail2")[0].value = value;      
      document.getElementsByName("memberEmail2")[0].disabled = true;
      document.getElementById('emailMsg1').innerText = ""; // 도메인 선택했으면 경고메시지 초기화
      document.getElementById('emailMsg2').innerText = "";      
   }
   if(document.getElementsByName("memberEmail2")[0].value != ""){InputEmail2StatusCheck = true;}
   else{InputEmail2StatusCheck = false;}
};

//우편번호 검색 API
function execDaumPostcode() {
	
     new daum.Postcode({
       oncomplete: function(data) {
         // 팝업에서 검색결과 항목을 클릭했을때 실행할 코드를 작성하는 부분.

         // 도로명 주소의 노출 규칙에 따라 주소를 조합한다.
         // 내려오는 변수가 값이 없는 경우엔 공백('')값을 가지므로, 이를 참고하여 분기 한다.
         var fullRoadAddr = data.roadAddress; // 도로명 주소 변수
         var extraRoadAddr = ''; // 도로명 조합형 주소 변수

         // 법정동명이 있을 경우 추가한다. (법정리는 제외)
         // 법정동의 경우 마지막 문자가 "동/로/가"로 끝난다.
         if(data.bname !== '' && /[동|로|가]$/g.test(data.bname)){
           extraRoadAddr += data.bname;
         }
         // 건물명이 있고, 공동주택일 경우 추가한다.
         if(data.buildingName !== '' && data.apartment === 'Y'){
           extraRoadAddr += (extraRoadAddr !== '' ? ', ' + data.buildingName : data.buildingName);
         }
         // 도로명, 지번 조합형 주소가 있을 경우, 괄호까지 추가한 최종 문자열을 만든다.
         if(extraRoadAddr !== ''){
           extraRoadAddr = ' (' + extraRoadAddr + ')';
         }
         // 도로명, 지번 주소의 유무에 따라 해당 조합형 주소를 추가한다.
         if(fullRoadAddr !== ''){
           fullRoadAddr += extraRoadAddr;
         }
         
         // 우편번호와 주소 정보를 해당 필드에 넣는다.
         document.getElementById('memberZip1').value = data.zonecode; //5자리 새우편번호 사용
         document.getElementById('memberZip2').value = fullRoadAddr;
         
         checkZip = true;
         
       }
     }).open();
     
};

// 최종 확인
function updateMember() {
    const form = document.getElementsByTagName('form')[0];

    form.onsubmit = function() {

        if (InputEmail1StatusCheck && result1 == "true") {
            alert('다 입력함');
            return true;
            
        } else {
            alert('다시 확인');
            var location;
            var tagId;
            
            // 입력 문제 있는 곳 가는거
            if (!InputEmail1StatusCheck) {
                tagId = document.getElementById('email');
                tagId.scrollIntoView({ behavior: "smooth" });
            } else if (!InputEmail2StatusCheck) {
                tagId = document.getElementById('email');
                tagId.scrollIntoView({ behavior: "smooth" });
            } else if (!checkZip) {
                tagId = document.getElementById('zip');
                tagId.scrollIntoView({ behavior: "smooth" });
            }

            // 입력 문제 있는거 * 표시 해주는거
            if (!InputEmail1StatusCheck) { tagId = document.getElementById('emailCheck'); tagId.innerText = ' *'; }
            else { tagId = document.getElementById('emailCheck'); tagId.innerText = ''; }

            if (!checkZip) { tagId = document.getElementById('zipCheck'); tagId.innerText = ' *'; }
            else { tagId = document.getElementById('zipCheck'); tagId.innerText = ''; }

            if (result1 == "false") { tagId = document.getElementById('nickNameCheck'); tagId.innerText = ' *'; }
            else { tagId = document.getElementById('nickNameCheck'); tagId.innerText = ''; }

            return false; // 폼 제출 방지
        }
    };
}

// 프로필 사진 변경 관련
function profileImage(){
    	if (confirm("프로필 사진을 변경하시겠습니까?") == true){  
    		$('#imagesButton').click();
    	 }else{
    		 return false;
    	 }
     }
     
     let data = {
    		    boardMyhomeArticleNo: `${selectMyHome.boardMyhomeArticleNo}`,
    		    memberId : `${member.memberId}`,
    		    isLogOn : `${isLogOn}`,
    		    member : `${member}`,    
    		};
     
// 이미지 업로드    (나중에 미리보기로 만들어볼까?)
document.addEventListener('DOMContentLoaded', function() {
	 document.getElementById("imagesButton").addEventListener("change", function() {
    	     if (this.files.length > 0) {
    	         var formData = new FormData();
    	         formData.append("file", this.files[0]);
    	         
    	         // 아이디 가져오기
    	         var memberId = data.memberId;
    	         
    	         // 경로 지정
    	         var src = '/memberProfileImage/' + memberId + '/';
    	         
    	         $.ajax({
    	     		 type: "POST",
    	              enctype: 'multipart/form-data',
    	              processData: false,
    	              contentType: false,
    	              url: "/gami/member/memberProfileImageUpload.do",
    	              data: formData,
    	              dataType: "json",
    	              success: function(fileName) {
    	                  alert('프로필 사진이 변경되었습니다.');
    	                  alert(fileName.fileName);
    	              var fileName = fileName.fileName;
    	              var image = src + fileName;
    	              alert(image);
    	              
    	              // img src 속성에 이미지 경로 넣어주기.
    	              $("#memberProfileImage2").attr("src","");
    	              $("#memberProfileImage").attr("src","");
    	              $("#memberProfileImage").attr("src",image);
    	              $("#memberProfileImage2").attr("src",image);
    	              $("#memberImage").val(fileName);
    	              },
    	              error: function(status) {
    	                  alert('사진 업로드 실패');
    	                  alert(status);
    	              }
    	          });
    	         
    	     } else {
    	         console.log("파일이 선택되지 않았습니다.");
    	     }
    	 });
    });