Spring Projcect/학습 관리 시스템 & 백오피스 구축

Chapter 11. 회원 상세 및 상태 처리

계란💕 2022. 8. 21. 20:11

11.1 회원 상세 목록 구현

 

  Ex) 아이디 눌렀을 때 상세 화면으로 이동 - 모자이크 부분은 이메일

  Note) 실행 결과

 

 

  Ex) 상세 페이지 만들기

    - detail

html
열기

 

    - param 에 추가

String userId;

 

    - detail 수정 - 모자이크는 이메일

 

    - adminMemberCont  메서드

java
열기

 

  Note) 실행 결과

 

      - 회원관리 탭 누르면?

 

 

  Ex)

    - detail()

MemberDto detail(String userId);

 

    - 목록을 가져올 때 마이바티스 쿼리 매퍼를 이용해서 가져왔다. '페이징'이 복잡, 쿼리가 복잡하면 마이바티스 사용

    - detail 파일은 JPA가 빠르고 편하다. 심플한 쿼리 => JPA

 

 

    - Dto에 메서드 of() 추가

java
열기

 

    - 임플  -detail (멤버의 상세 정보를 가져오는 메서드)

java
열기

 

    - 컨트롤러

java
열기

 

 

 =================오류 =======================

 

 

    ================= 오류 ==================

    - 오류: SQL문을 건드리지 않았는데 다음과 같은 오류가 났다.

    - 원인: DTO 클래스를 빌드 하기 위해서 @NoArgs, @AllArgs 를 붙여야 한다.

 

  Note) 실행 결과

   - 이제 이 데이터를 표로 만들자

 

  Ex) 테이블로 만들기

html
열기

 

  Note) 실행 결과

 

  Ex) CSS - 표 테두리

java
열기

  Note) 실행 결과

 

 

11.2 회원 상태 및 비밀번호 초기화 구현

 

  Ex) 회원이 로그인 가능한지 아닌지 파악

 

     - 엔티티

private String userStatus;

 

    - 멤버코드 인터페이스

java
닫기
<hide?>
package com.zerobase.fastlms.member.entity;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import javax.persistence.Entity;
import javax.persistence.Id;
import java.time.LocalDateTime;
public interface MemberCode {

    String MEMBER_STATUS_ING = "ING";
    String MEMBER_STATUS_STOP = "STOP";
   
}

 

      - 방금 생성한 변수가 테이블에 나오게 하려면?

 

 

    - 임플 - register()에 추가한다. -  회원 가입 중일 때는 멤버 코드가 요청 중이다.

      -> emailAuth() 에서 이메일 인증을 한 다음에 회원이 되도록 구현

java
열기

 

    - emailAuth() => ING를 넣어줘야 이용 가능한 회원이 된다.

java
열기

 

    - 임플 클래스 loadUserBuUsername

java
열기

 

    - 새로운 예외 클래스

java
열기

 

 

  Ex)  Status 테스트

 

    - 회원가입 후, db

 

    - 이메일 활성화하지 않고 로그인 하면?

 

    - 활성화 하고 나면 상태가 ING로 바뀐다.

 

 

  Ex) 회원 정지

 

    - DTO 클래스에도 추가해야 detail페이지에서 userStatus를 사용 가능하다.

String userStatus;

 

   - of()

java
열기

 

  Note) 방금 가입하면 회원 상태 정보에 데이터가 들어가서 볼 수 있다.

 

 

   Ex) 회원 상태 변경하기

 

    - detail

html
열기

 

    - 관리자가 옵션을 선택해서 변경 가능하도록 구현한다.

 

 

    - 상태 변경 버튼을 누르면 서버로 전송되게끔 <form> 으로 감싼다.

      -> 상태만 전송하면 안되니까 <input> 으로 아이디도 함께 보낸다.

html
열기

 

    - 컨트롤러에서 주소를 만든다.

 

    - MemberStatusInput' 

java
열기

 

    - 컨트롤러

      -> redirect 로 주소를 직접 이동시킨다. 페이지 직접 이동

java
열기

 

    - 멤버서비스: updateStatus()

/**
 * 회원 상태 변경
 */

boolean updateStatus(String userId, String userStatus);

 

    - 임플 클래스에 위 메서드 구현

 

 

    - 기존 화면

    - 정지 중 선택

 

 

    - 상태 변경 클릭

 

========================오류 ========================

    - 오류:  상태변경을 클릭하면 로그인 페이지로 이동한다.

    - 원인: impl클래스에서 updateStatus()의 반환값을 false로 뒀다 틀림, .. 말고도 다른 원인이 있다.

      -> detail 파일의 <input>태그를 잘못 작성했다. 아래처럼 수정하면 된다.

<input th:value="${member.userId}" type="hidden" name="userId"/>

 

 

  Ex) 비밀번호 초기화

    - 사용자 아이디를 가지고 비밀번호를 초기화 하도록한다.

java
열기

 

   - 멤버 컨트롤러

java
열기

 

    - admin에 모델 패키지를 하나 만든다. (멤버에도 이름이 같은 패키지가 있다.)

java
열기

 

     - 컨트롤러

java
열기

 

    - updatePassword()

java
열기

    - 비번 초기화

 

  Note) 실행 결과 - 정상