인터페이스 6일차 (회원가입 및 중복여부확인 Create, Read)
2023. 1. 10. 12:41ㆍ코딩배움일지/인터페이스 구현
UserController
package com.jingu.board.controller;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.jingu.board.dto.response.ResponseDto;
import com.jingu.board.dto.user.PostUserDto;
import com.jingu.board.dto.user.PostUserResponseDto;
import com.jingu.board.service.UserService;
@RestController
@RequestMapping("api/user/") // post 로 요청을 보낸다.
public class UserController { // 회원가입 프로세스
@Autowired UserService userService; // ; 찍으면 저장해라 가만두지 않겠다.
@PostMapping("")
public ResponseDto<PostUserResponseDto> postUser(@RequestBody PostUserDto requestBody){
return userService.postUser(requestBody);
}
}
User Service
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.jingu.board.dto.response.ResponseDto;
import com.jingu.board.dto.user.PostUserDto;
import com.jingu.board.dto.user.PostUserResponseDto;
import com.jingu.board.entity.MemberEntity;
import com.jingu.board.repository.MemberRepository;
@Service
public class UserService {
@Autowired MemberRepository memberRepository;
public ResponseDto<PostUserResponseDto> postUser(PostUserDto dto){ //모든 메소드는 검증 해야한다.
String password = dto.getPassword();
String password2 = dto.getPassword2();
if(!password.equals(password2)) return ResponseDto.setFailed("비밀번호가 서로 다릅니다.");
MemberEntity member = MemberEntity //MemberEntity 를 통해서
.builder() //빌드를 하고 실제 Entity 가 만들어진다.
.email(dto.getEmail())
.password(dto.getPassword())
.nickname(dto.getNickname())
.telNumber(dto.getTelNumber())
.address(dto.getAddress() + " " + dto.getAddressDetail())
.build();
memberRepository.save(member); // DB 에 save
return ResponseDto.setSuccess("회원가입에 성공했습니다.", new PostUserResponseDto(true));
}
}
// JpaRepository.save(Entity) 메서드
// 해당 Entity Id가 데이터베이스 테이블에 존재하지 않으면!
// Entity INSERT 작업을 수행
// 하지만!!!
// 해당 Entity Id가 데이터베이스 테이블에 존재하면!
// 존재하는 Entity UPDATE 작업을 수행
중복이 일어나면 Failed Response 를 해야한다.
String email = dto.getEmail();
MemberEntity member = memberRepository.findById(email).get();
member = MemberEntity //MemberEntity 를 통해서 //MemberEntity member = MemberEntity 오류남
package com.jingu.board.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.jingu.board.dto.response.ResponseDto;
import com.jingu.board.dto.user.PostUserDto;
import com.jingu.board.dto.user.PostUserResponseDto;
import com.jingu.board.entity.MemberEntity;
import com.jingu.board.repository.MemberRepository;
@Service
public class UserService {
@Autowired MemberRepository memberRepository;
public ResponseDto<PostUserResponseDto> postUser(PostUserDto dto){ //모든 메소드는 검증 해야한다.
// 데이터베이스에 해당 이메일이 존재하는지 체크
// 존재한다면 Failed Response 를 반환
// Select * From m Where email =?
//결과가 존재하느냐? 존재하지 않으면 중복되지 않는다. 그래서 존재하면 중복되지 않게해야함
String email = dto.getEmail();
MemberEntity member = memberRepository.findById(email).get();
String password = dto.getPassword();
String password2 = dto.getPassword2();
if(!password.equals(password2)) return ResponseDto.setFailed("비밀번호가 서로 다릅니다.");
member = MemberEntity //MemberEntity 를 통해서 //MemberEntity member = MemberEntity 오류남
.builder() //빌드를 하고 실제 Entity 가 만들어진다.
.email(dto.getEmail())
.password(dto.getPassword())
.nickname(dto.getNickname())
.telNumber(dto.getTelNumber())
.address(dto.getAddress() + " " + dto.getAddressDetail())
.build();
// JpaRepository.save(Entity) 메서드
// 해당 Entity Id가 데이터베이스 테이블에 존재하지 않으면!
// Entity INSERT 작업을 수행
// 하지만!!!
// 해당 Entity Id가 데이터베이스 테이블에 존재하면!
// 존재하는 Entity UPDATE 작업을 수행
memberRepository.save(member); // DB 에 save
return ResponseDto.setSuccess("회원가입에 성공했습니다.", new PostUserResponseDto(true));
}
}
try {
MemberEntity member = memberRepository.findById(email).get();
}catch(Exception e){
return ResponseDto.setFailed("이미 존재하는 이메일 입니다.");
}
// 이렇게 하면
MemberEntity member = MemberEntity //MemberEntity 를 통해서 //MemberEntity member = MemberEntity 오류남
.builder() //빌드를 하고 실제 Entity 가 만들어진다.
.email(dto.getEmail())
.password(dto.getPassword())
.nickname(dto.getNickname())
.telNumber(dto.getTelNumber())
.address(dto.getAddress() + " " + dto.getAddressDetail())
.build();
//이렇게 하던가
//
//이렇게 하던가
try {
if(memberRepository.existsById(email))
return ResponseDto.setFailed("이미 존재하는 이메일 입니다.");
}catch(Exception e){
return ResponseDto.setFailed("데이터베이스 오류 입니다.");
}
///////////////////////
package com.jingu.board.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.jingu.board.dto.response.ResponseDto;
import com.jingu.board.dto.user.PostUserDto;
import com.jingu.board.dto.user.PostUserResponseDto;
import com.jingu.board.entity.MemberEntity;
import com.jingu.board.repository.MemberRepository;
@Service
public class UserService {
@Autowired MemberRepository memberRepository;
public ResponseDto<PostUserResponseDto> postUser(PostUserDto dto){ //모든 메소드는 검증 해야한다.
// 데이터베이스에 해당 이메일이 존재하는지 체크
// 존재한다면 Failed Response 를 반환
// Select * From m Where email =?
//결과가 존재하느냐? 존재하지 않으면 중복되지 않는다. 그래서 존재하면 중복되지 않게해야함
String email = dto.getEmail();
//if(memberRepository.existsById(email))
// return ResponseDto.setFailed("이미 존재하는 이메일 입니다."); 이렇게해도 된다만
// try catch 문 안에 넣어야 한다.
try {
if(memberRepository.existsById(email))
return ResponseDto.setFailed("이미 존재하는 이메일 입니다.");
}catch(Exception e){
return ResponseDto.setFailed("데이터베이스 오류 입니다.");
}
// try {
// MemberEntity member = memberRepository.findById(email).get();
// }catch(Exception e){
// return ResponseDto.setFailed("이미 존재하는 이메일 입니다.");
// }
String password = dto.getPassword();
String password2 = dto.getPassword2();
if(!password.equals(password2)) return ResponseDto.setFailed("비밀번호가 서로 다릅니다.");
MemberEntity member = MemberEntity //MemberEntity 를 통해서 //MemberEntity member = MemberEntity 오류남
.builder() //빌드를 하고 실제 Entity 가 만들어진다.
.email(dto.getEmail())
.password(dto.getPassword())
.nickname(dto.getNickname())
.telNumber(dto.getTelNumber())
.address(dto.getAddress() + " " + dto.getAddressDetail())
.build();
// JpaRepository.save(Entity) 메서드
// 해당 Entity Id가 데이터베이스 테이블에 존재하지 않으면!
// Entity INSERT 작업을 수행
// 하지만!!!
// 해당 Entity Id가 데이터베이스 테이블에 존재하면!
// 존재하는 Entity UPDATE 작업을 수행
memberRepository.save(member); // DB 에 save
return ResponseDto.setSuccess("회원가입에 성공했습니다.", new PostUserResponseDto(true));
}
}
Auth Service
public ResponseDto<LoginDto> login(AuthPostDto dto){
// 입력받은 email 으로 데이터베이스에서 검색
String email = dto.getEmail();
MemberEntity member;
// 존재하지 않는다면 없는 아이디 "로그인 실패" 반환
try {
member = memberRepository.findById(email).get();
} catch(Exception e) {
return ResponseDto.setFailed("Login info is not matched");
}
// 존재한다면 입력받은 패스워드와 받아온 패스워드와 동일한지 검사
// 동일하지 않다면 " 로그인 실패" 반환
String password = dto.getPassword();
String dbPassword = member.getPassword();
if(!password.equals(dbPassword))
return ResponseDto.setFailed("Login Failed");
// 토큰 생성후 토큰 및 만료시간 반환
LoginDto result = new LoginDto("JWT",3600000);
return ResponseDto.setSuccess("", result);
}
}
/////////////////////////////////////////////////////////////
package com.jingu.board.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.jingu.board.dto.auth.GetUserResponseDto;
import com.jingu.board.dto.response.ResponseDto;
import com.jingu.board.dto.user.PostUserDto;
import com.jingu.board.dto.user.PostUserResponseDto;
import com.jingu.board.entity.MemberEntity;
import com.jingu.board.repository.MemberRepository;
@Service
public class UserService { // C, R 을 했다.
@Autowired
MemberRepository memberRepository;
public ResponseDto<GetUserResponseDto> getUser(String email) {
// 해당 이메일을 데이터베이스에서 검색
MemberEntity member;
try {
member = memberRepository.findById(email).get();
}
// 존재하지 않으면 "Not Exist User" 메세지를 포함한 Failed Response 반환
catch (Exception e) {
return ResponseDto.setFailed("Not Exist User");
}
// 존재하면 User정보 반환
return ResponseDto.setSuccess("Get User Success", new GetUserResponseDto(member));
}
//////////////////////////////////////////////////////////////////////
// 존재하면 User정보 반환
//1
// GetUserResponseDto responseData = new GetUserResponseDto();
// responseData.setEmail(member.getEmail());
// responseData.setNickName(member.getNickname());
// responseData.setProfile(member.getProfile());
// responseData.setTelNumber(member.getTelNumber());
// responseData.setAddress(member.getAddress());
//
// return ResponseDto.setSuccess("Get User Success", responseData);
//2 GetUserResponseDto 에 builder 가 있어야 한다.
// GetUserResponseDto responseData =
// GetUserResponseDto
// .builder()
// .email(member.getEmail())
// .nickName(member.getNickname())
// .profile(member.getProfile())
// .telNumber(member.getTelNumber())
// .address(member.getAddress())
// .build();
// return ResponseDto.setSuccess("Get User Success", responseData);
//3
// return ResponseDto.setSuccess("Get User Success",
// new GetUserResponseDto(
// member.getEmail(),
// member.getNickname(),
// member.getProfile(),
// member.getTelNumber(),
// member.getAddress()
// )
// );
GetUserResponse
package com.jingu.board.dto.auth;
import com.jingu.board.entity.MemberEntity;
import lombok.AllArgsConstructor;
//import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@NoArgsConstructor
@AllArgsConstructor
//@Builder
public class GetUserResponseDto { //생성자 get set constructor 만드는 대신 annotation
private String email;
private String nickName;
private String profile;
private String telNumber;
private String address;
public GetUserResponseDto(MemberEntity member) { // 생성자 필요한 형태로 가져다 쓴다.
this.email = member.getEmail();
this.nickName = member.getNickname();
this.profile = member.getProfile();
this.telNumber = member.getTelNumber();
this.address = member.getAddress();
}
}
실제로는 이렇게 안한다.
'코딩배움일지 > 인터페이스 구현' 카테고리의 다른 글
인터페이스 7일차 (Delete) (0) | 2023.01.11 |
---|---|
인터페이스 7일차 (Update) (0) | 2023.01.11 |
인터페이스 5일차(Repository) (0) | 2023.01.09 |
인터페이스 5일차 (Service, Autowired, JPA, ORM) (0) | 2023.01.09 |
유효성검사 (0) | 2023.01.09 |