오늘의 과정 목록
- bord 프로젝트
Bord 프로젝트
패키지 양식
com.회사명.프로젝트명
레이어(구역)
controller (입 출력 / 입출력에 대한 검증)
service (실제 비즈니스 로직(연산담당))
repository (데이터베이스(DBS) 접근)
구역간의 데이터 이동 개체. 관리하고자 하는 물체를 정의해 놓은 것.
ex) 회원을 정하는 것, 게시물을 정하는 것.
dto (client - controller - service 간의 데이터 전송)
entity (service - repository - database 간의 데이터 전송)
동작. 제공한다, 작업한다, 필터링한다.
Provider (데이터 제공)
Handler (이벤트 발생시 대처 혹은 작업)
Filter (서비스 이용 필터링)
common / Utill ((연산. 특정단어 저장. 단순한 용도. 잡종. )기타등등)
기능에 대한 이름
회원가입 기능 (사용자가 입력해야 하는 정보) (SignUpRequestDto)
이메일 주소
비밀번호
비밀번호 확인
닉네임
핸드폰 번호
주소
상세주소
개인정보동의 여부
- SignUpResponseDto
- 회원가입 성공
회원가입 실패
이메일 미입력
이메일 주소 포맷
중복된 이메일
비밀번호 길이 8자 이하일 때 (미만 아닐..까?)
비밀번호 불일치
빈 닉네임
휴대폰 번호 미입력
휴대폰 번호 숫자가 아님
우편번호 입력하지 않았을 때
개인정도 동의 미체크
로직상 문제
휴대폰 번호 중복
(닉네임 중복)
데이터베이스 오류
-회원 (User)
이메일 / 비밀번호 / 닉네임 / 휴대전화번호 / 주소 / 상세주소 / 개인정보동의 여부 / 프로필 사진
게시물 (Board)
게시물 번호 / 제목 / 내용 / 작성일 / 작성자 이메일 / [작성자 닉네임] / 작성자 프로필 사진 / 댓글 / 좋아요 / 조회수 / 게시물 이미지(여러개) / [좋아요한 사용자의 이메일] / 좋아요한 사용자의 닉네임 / 좋아요한 사용자의 프로필 사진 / 댓글 작성자의 프로필 사진 / 댓글 작성 시간 / 댓글 작성자의 닉네임 / 댓글 내용
검색어 (누적로그에 대한 개념) (SearchWord)
검색어 / 이전 검색어 / 다음 검색어 /
로그인 기능
이메일 주소
비밀번호
{
이메일: 문자열
비밀번호: 문자열
}
성공
유저 정보 반환
{
상태: 정수
메세지: 문자열
이메일: 문자열
닉네임: 문자열
프로필사진: 문자열
}
실패
로그인 정보불일치
필수 데이터 미입력
데이터베이스 에러
{
상태: 정수
메세지: 문자열
}
com.yhj.board
package com.yhj.board;
import java.util.Scanner;
import com.yhj.board.controller.UserController;
import com.yhj.board.controller.implement.UserControllerImplement;
import com.yhj.board.dto.request.SignInRequestDto;
import com.yhj.board.dto.request.SignUpRequestDto;
import com.yhj.board.dto.response.ResponseEntity;
import com.yhj.board.dto.response.SignInResponseDto;
import com.yhj.board.dto.response.SignUpResponseDto;
import com.yhj.board.repository.UserRepository;
import com.yhj.board.repository.implement.UserRepositoryImplement;
import com.yhj.board.service.UserService;
import com.yhj.board.service.implement.UserServiceImplement;
public class BoardApplication {
static UserRepository userRepository = new UserRepositoryImplement();
static UserService userService = new UserServiceImplement(userRepository);
static UserController userController = new UserControllerImplement(userService);
public static void main(String[] args) {
while (true) {
Scanner scanner = new Scanner(System.in);
System.out.println("작업 : ");
String method = scanner.nextLine();
if(method.equals("end")) break;
if(method.equals("POST /sign-up")) signUp();
if(method.equals("POST /sign-in")) signIn();
}
}
static void signUp() {
Scanner scanner = new Scanner(System.in);
SignUpRequestDto dto = new SignUpRequestDto();
try {
System.out.println("이메일 : ");
dto.setEmail(scanner.nextLine());
System.out.println("비밀번호 : ");
dto.setPassword(scanner.nextLine());
System.out.println("비밀번호 확인 : ");
dto.setPasswordCheck(scanner.nextLine());
System.out.println("닉네임 : ");
dto.setNickname(scanner.nextLine());
System.out.println("전화번호 : ");
dto.setTelNumber(scanner.nextLine());
System.out.println("주소 : ");
dto.setAddress(scanner.nextLine());
System.out.println("상세 주소 : ");
dto.setAddressDetail(scanner.nextLine());
System.out.println("개인정보 처리 동의 : ");
dto.setAgreedPersonal(scanner.nextBoolean());
} catch (Exception exception) {
System.out.println("입력 중 오류 발생!");
return;
}
ResponseEntity<SignUpResponseDto> result = userController.signUp(dto);
System.out.println(result.toString());
}
static void signIn() {
Scanner scanner = new Scanner(System.in);
SignInRequestDto dto = new SignInRequestDto();
try {
System.out.println("이메일 : ");
dto.setEmail(scanner.nextLine());
System.out.println("비밀번호 : ");
dto.setPassword(scanner.nextLine());
} catch (Exception exception) {
System.out.println("입력 중 오류 발생!");
return;
}
ResponseEntity<SignInResponseDto> result = userController.signIn(dto);
System.out.println(result.toString());
}
}
com.yhj.board.common
package com.yhj.board.common;
public class BoardIndex {
public static int index = 1;
}
package com.yhj.board.common;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class PatternValidator {
// 아이디@공급자/회사명.com(.net/.co.kr/.og.kr/ 등등) 정규식은 이러한 패턴을 정리할 때 특수한 패턴을 가질 때 사용한다.
public static final String EMAIL_REGEX =
"^[a-zA-Z0-9_+&*-]+(?:\\." +
"[a-zA-Z0-9_+&*-]+)*@" +
"(?:[a-zA-Z0-9-]+\\.)+[a-z" +
"A-Z]{2,7}$";
public static final String TEL_NUMBER_REGEX = "^[0-9]{11,12}$";
public static boolean isValideEmail(String email) {
Pattern pattern = Pattern.compile(EMAIL_REGEX);
Matcher matcher = pattern.matcher(email);
boolean emailCheck = matcher.matches();
return emailCheck;
}
public static boolean isValideTelNumber(String telNumber) {
Pattern pattern = Pattern.compile(TEL_NUMBER_REGEX);
Matcher matcher = pattern.matcher(telNumber);
boolean telNumberCheck = matcher.matches();
return telNumberCheck;
}
}
package com.yhj.board.common;
public interface ResponseMessage {
String SUCCESS = "성공입니다.";
String NOT_VALID_VALUE = "올바르지 않은 입력입니다.";
String EXISTED_EMAIL = "이미 존재하는 이메일입니다.";
String EXISTED_TEL_NUMBER = "이미 존재하는 전화번호입니다.";
String EXISTED_NICKNAME = "이미 존재하는 닉네임입니다.";
String SIGN_IN_FAILED = "로그인 정보가 일치하지 않습니다.";
String DATABASE_ERROR = "데이터베이스 오류입니다.";
}
com.yhj.board.controller
package com.yhj.board.controller;
import com.yhj.board.dto.request.SignInRequestDto;
import com.yhj.board.dto.request.SignUpRequestDto;
import com.yhj.board.dto.response.ResponseEntity;
import com.yhj.board.dto.response.SignInResponseDto;
import com.yhj.board.dto.response.SignUpResponseDto;
public interface UserController {
// public abstract - 굳이 적지 않아도 되지만 알고는 있자.
ResponseEntity<SignUpResponseDto> signUp(SignUpRequestDto requestDto);
ResponseEntity<SignInResponseDto> signIn(SignInRequestDto requestDto); // 업캐스팅으로 자동으로 반환된다. -> 받는 부분에서 문제가 발생한다.
}
// ResponseDto : int status, String message
// SignUpRequestDto : int status, String message, String email, String nickname, String profileImage
/*
* ResponseDto라고 했지만 SignUpRequestDto 인스턴스를 사용할 수 있다.
* 다운 캐스팅이 필요하지만 코드가 불안정해질 수 있다.
* 제너릭을 사용하여 확장에 대한 개념을 이어간다.
*/
board.controller.implement
package com.yhj.board.controller.implement;
import com.yhj.board.controller.UserController;
import com.yhj.board.dto.request.SignInRequestDto;
import com.yhj.board.dto.request.SignUpRequestDto;
import com.yhj.board.dto.response.ResponseEntity;
import com.yhj.board.dto.response.SignInResponseDto;
import com.yhj.board.dto.response.SignUpResponseDto;
import com.yhj.board.service.UserService;
public class UserControllerImplement implements UserController {
private final UserService userService;
public UserControllerImplement(UserService userService) {
this.userService = userService;
}
@Override
public ResponseEntity<SignUpResponseDto> signUp(SignUpRequestDto requestDto) {
boolean isValid = requestDto.valid();
if(!isValid) return ResponseEntity.badRequest();
ResponseEntity<SignUpResponseDto> result = userService.signUp(requestDto);
return result;
}
@Override
public ResponseEntity<SignInResponseDto> signIn(SignInRequestDto requestDto) {
boolean isValid = requestDto.valid();
if(!isValid) return ResponseEntity.badRequest();
ResponseEntity<SignInResponseDto> result = userService.signIn(requestDto);
return result;
}
}
com.yhj.board.dto.request
package com.yhj.board.dto.request;
public class SignInRequestDto {
private String email;
private String password;
public SignInRequestDto() {}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public boolean valid() {
if(email == null || password == null) return false;
if(email.isBlank() || password.isBlank()) return false;
return true;
}
}
package com.yhj.board.dto.request;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import com.yhj.board.common.PatternValidator;
// 닉네임 / 핸드폰 번호 / 주소 / 상세주소 / 개인정보동의 여부
public class SignUpRequestDto {
private String email;
private String password;
private String passwordCheck;
private String nickname;
private String telNumber;
private String address;
private String addressDetail;
private boolean agreedPersonal;
public SignUpRequestDto() {
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getPasswordCheck() {
return passwordCheck;
}
public void setPasswordCheck(String passwordCheck) {
this.passwordCheck = passwordCheck;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
public String getTelNumber() {
return telNumber;
}
public void setTelNumber(String telNumber) {
this.telNumber = telNumber;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
public String getAddressDetail() {
return addressDetail;
}
public void setAddressDetail(String addressDetail) {
this.addressDetail = addressDetail;
}
public boolean isAgreedPersonal() {
return agreedPersonal;
}
public void setAgreedPersonal(boolean agreedPersonal) {
this.agreedPersonal = agreedPersonal;
}
public boolean valid() {
if(email == null || password == null || passwordCheck == null ||
nickname == null || telNumber == null || address == null ||
!agreedPersonal) {
return false;
}
if(email.isBlank() || password.isBlank() || passwordCheck.isBlank() ||
nickname.isBlank() || telNumber.isBlank() || address.isBlank()) {
return false;
}
if(password.length() < 8) {
return false;
}
if(!password.equals(passwordCheck)) {
return false;
}
boolean emailCheck = PatternValidator.isValideEmail(email);
if(!emailCheck) {
return false;
}
boolean telNumberCheck = PatternValidator.isValideTelNumber(telNumber);
if(!telNumberCheck) {
return false;
}
return true;
}
}
com.yhj.board.dto.response
package com.yhj.board.dto.response;
import com.yhj.board.common.ResponseMessage;
public class ResponseEntity<D> {
private int status;
private String message;
private D data;
public ResponseEntity(int status, String message, D data) {
this.status = status;
this.message = message;
this.data = data;
}
@Override
public String toString() {
return "[status=" + status + ", message=" + message + ", data=" + data + "]";
}
public static <D> ResponseEntity<D> ok() {
return new ResponseEntity<D>(200, ResponseMessage.SUCCESS, null);
}
public static <D> ResponseEntity<D> ok(D data) {
return new ResponseEntity<D>(200, ResponseMessage.SUCCESS, data);
}
public static <D> ResponseEntity<D> badRequest() {
return new ResponseEntity<D>(400, ResponseMessage.NOT_VALID_VALUE, null);
}
public static <D> ResponseEntity<D> badRequest(String message) {
return new ResponseEntity<D>(400, message, null);
}
public static <D> ResponseEntity<D> unauthorized() {
return new ResponseEntity<D>(401, ResponseMessage.SIGN_IN_FAILED, null);
}
public static <D> ResponseEntity<D> internalServerError(String message) {
return new ResponseEntity<D>(500, message, null);
}
}
package com.yhj.board.dto.response;
import com.yhj.board.entity.User;
public class SignInResponseDto {
private String email;
private String nickname;
private String profileImage;
public SignInResponseDto (User user) {
this.email = user.getEmail();
this.nickname = user.getNickname();
this.profileImage = user.getProfileImage();
}
@Override
public String toString() {
return "[email=" + email + ", nickname=" + nickname + ", profileImage=" + profileImage + "]";
}
}
package com.yhj.board.dto.response;
public class SignUpResponseDto {
}
com.yhj.board.entity
package com.yhj.board.entity;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import com.yhj.board.common.BoardIndex;
// 게시물 번호 / 제목 / 내용 / 작성일 /
// [작성자 이메일] / 작성자 닉네임 / 작성자 프로필 사진 /
// 댓글 / 좋아요 수 / 조회 수 / 게시물 이미지(여러개)
public class Board {
// private static int index = 1; // 도 가능
private int boardNumber;
private String title;
private String contents;
private String writeDatetime;
private String writeEmail;
private String writeNickname;
private String writeProfileImage;
private int viewCount;
private List<String> imageList;
private List<Liky> likeList;
private List<Comment> commentList;
public Board(String title, String contents, String writeEmail, String writeNickname, String writeProfileImage,
List<String> imageList) {
Date now = new Date();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy. MM. dd. hh:mm:ss");
this.boardNumber = BoardIndex.index++;
this.title = title;
this.contents = contents;
this.writeDatetime = simpleDateFormat.format(now);
this.writeEmail = writeEmail;
this.writeNickname = writeNickname;
this.writeProfileImage = writeProfileImage;
this.viewCount = 0;
this.imageList = imageList;
this.likeList = new ArrayList<Liky>();
this.commentList = new ArrayList<Comment>();
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getContents() {
return contents;
}
public void setContents(String contents) {
this.contents = contents;
}
public String getWriteNickname() {
return writeNickname;
}
public void setWriteNickname(String writeNickname) {
this.writeNickname = writeNickname;
}
public String getWriteProfileImage() {
return writeProfileImage;
}
public void setWriteProfileImage(String writeProfileImage) {
this.writeProfileImage = writeProfileImage;
}
public int getViewCount() {
return viewCount;
}
public void setViewCount(int viewCount) {
this.viewCount = viewCount;
}
public int getBoardNumber() {
return boardNumber;
}
public String getWriteDatetime() {
return writeDatetime;
}
public String getWriteEmail() {
return writeEmail;
}
public List<String> getImageList() {
return imageList;
}
public List<Liky> getLikeList() {
return likeList;
}
public List<Comment> getCommentList() {
return commentList;
}
}
package com.yhj.board.entity;
//댓글 작성자의 프로필 사진 / 댓글 작성자의 닉네임 / 댓글 작성 시간 / 댓글 내용
public class Comment {
private String writerProfileImage;
private String writerNickname;
private String writerDatetime;
private String contents;
public Comment(String writerProfileImage, String writerNickname, String writerDatetime, String contents) {
this.writerProfileImage = writerProfileImage;
this.writerNickname = writerNickname;
this.writerDatetime = writerDatetime;
this.contents = contents;
}
public String getWriterProfileImage() {
return writerProfileImage;
}
public void setWriterProfileImage(String writerProfileImage) {
this.writerProfileImage = writerProfileImage;
}
public String getWriterNickname() {
return writerNickname;
}
public void setWriterNickname(String writerNickname) {
this.writerNickname = writerNickname;
}
public String getWriterDatetime() {
return writerDatetime;
}
public String getContents() {
return contents;
}
}
package com.yhj.board.entity;
//좋아요한 사용자의 프로필 사진 / [좋아요한 사용자의 이메일] / 좋아요한 사용자의 닉네임
public class Liky {
private String userProfileImage;
private String userEmail;
private String userNickname;
public Liky(String userProfileImage, String userEmail, String userNickname) {
this.userProfileImage = userProfileImage;
this.userEmail = userEmail;
this.userNickname = userNickname;
}
public String getUserProfileImage() {
return userProfileImage;
}
public void setUserProfileImage(String userProfileImage) {
this.userProfileImage = userProfileImage;
}
public String getUserNickname() {
return userNickname;
}
public void setUserNickname(String userNickname) {
this.userNickname = userNickname;
}
public String getUserEmail() {
return userEmail;
}
}
package com.yhj.board.entity;
// 검색어 / 이전 검색어 / 다음 검색어
public class SearchWord {
private String word;
private String preWord;
private String nextWord;
public SearchWord(String word, String preWord, String nextWord) {
this.word = word;
this.preWord = preWord;
this.nextWord = nextWord;
}
public String getWord() {
return word;
}
public String getPreWord() {
return preWord;
}
public String getNextWord() {
return nextWord;
}
}
package com.yhj.board.entity;
import com.yhj.board.dto.request.SignUpRequestDto;
//이메일 / 비밀번호 / 닉네임 / 휴대전화번호 / 주소 / 상세주소 / 개인정보동의 여부 / 프로필 사진
public class User {
private String email;
private String password;
private String nickname;
private String telNumber;
private String address;
private String addressDetail;
private boolean agreedPersonal;
private String profileImage;
public User(String email, String password, String nickname, String telNumber, String address, String addressDetail,
boolean agreedPersonal) {
this.email = email;
this.password = password;
this.nickname = nickname;
this.telNumber = telNumber;
this.address = address;
this.addressDetail = addressDetail;
this.agreedPersonal = agreedPersonal;
}
public User(SignUpRequestDto dto) {
this.email = dto.getEmail();
this.password = dto.getPassword();
this.nickname = dto.getNickname();
this.telNumber = dto.getTelNumber();
this.address = dto.getAddress();
this.addressDetail = dto.getAddressDetail();
this.agreedPersonal = dto.isAgreedPersonal();
this.profileImage = null;
}
public String getNickname() {
return nickname;
}
public void setNickname(String nickname) {
this.nickname = nickname;
}
public String getProfileImage() {
return profileImage;
}
public void setProfileImage(String profileImage) {
this.profileImage = profileImage;
}
public String getEmail() {
return email;
}
public String getPassword() {
return password;
}
public String getTelNumber() {
return telNumber;
}
public String getAddress() {
return address;
}
public String getAddressDetail() {
return addressDetail;
}
public boolean isAgreedPersonal() {
return agreedPersonal;
}
public boolean isCreateValid() {
if(email == null ||password == null || nickname == null ||
telNumber == null || address == null) {
return false;
}
if(email.isBlank() || password.isBlank() || nickname.isBlank() ||
telNumber.isBlank() || address.isBlank() || !agreedPersonal) {
return false;
}
return true;
}
}
com.yhj.board.repository
package com.yhj.board.repository;
import java.util.ArrayList;
import java.util.List;
import com.yhj.board.entity.Board;
public interface BoardRepository extends Repository<Board, Integer> {
// 게시물 정보를 저장할 Board Entity List
public static final List<Board> BOARDS = new ArrayList<Board>();
}
package com.yhj.board.repository;
public interface Repository<E, K> {
// 데이터 생성 (저장) : CREATE
boolean create(E entity);
// 데이터 읽기 (검색) : READ
E read(K key);
// 데이터 수정 (수정) : UPDATE
boolean update(E entity);
// 데이터 삭제 (삭제) : DELETE
boolean delete(K key);
}
package com.yhj.board.repository;
import java.util.ArrayList;
import java.util.List;
import com.yhj.board.entity.User;
public interface UserRepository extends Repository<User, String> {
// 유저 정보를 저장할 User Entity List
public static final List<User> USERS = new ArrayList<User>();
// USERS = new ArrayList<User>(); 주소가 바뀌기 때문에 이렇게 사용할 수 없음.
public abstract boolean existsByEmail(String email);
public abstract boolean existsByTelNumber(String telNumber);
public abstract boolean existsByNickname(String nickname);
}
com.yhj.board.repository.implement
package com.yhj.board.repository.implement;
import com.yhj.board.entity.User;
import com.yhj.board.repository.UserRepository;
public class UserRepositoryImplement implements UserRepository {
@Override
public boolean create(User entity) {
// entity가 null 인지
if(entity == null) return false;
// 필수 값이 모두 입력되었는지
if(!entity.isCreateValid()) return false;
USERS.add(entity);
return true;
}
@Override
public User read(String key) {
User result = null;
if(key == null) return result;
for(User user: USERS) {
String email = user.getEmail();
if(email.equals(key)) {
result = user;
break;
}
}
return result;
}
@Override
public boolean update(User entity) {
if(entity == null) return false;
String email = entity.getEmail();
if(email == null) return false;
for(int index = 0; index < USERS.size(); index++) {
User user = USERS.get(index);
String findEmail = user.getEmail();
if(email.equals(findEmail)) {
USERS.set(index, entity);
break;
}
}
return true;
}
@Override
public boolean delete(String key) {
if(key == null) return false;
for(int index = 0; index < USERS.size(); index++) {
User user = USERS.get(index);
String email = user.getEmail();
if(key.equals(email)) {
USERS.remove(index);
break;
}
}
return true;
}
@Override
public boolean existsByEmail(String email) {
boolean result = false;
for(User user : USERS) {
if(user.getEmail().equals(email)) {
result = true;
break;
}
}
return result;
}
@Override
public boolean existsByTelNumber(String telNumber) {
boolean result = false;
for(User user : USERS) {
if(user.getEmail().equals(telNumber)) {
result = true;
break;
}
}
return result;
}
@Override
public boolean existsByNickname(String nickname) {
boolean result = false;
for(User user : USERS) {
if(user.getEmail().equals(nickname)) {
result = true;
break;
}
}
return result;
}
}
com.yhj.board.service
package com.yhj.board.service;
import com.yhj.board.dto.request.SignInRequestDto;
import com.yhj.board.dto.request.SignUpRequestDto;
import com.yhj.board.dto.response.ResponseEntity;
import com.yhj.board.dto.response.SignInResponseDto;
import com.yhj.board.dto.response.SignUpResponseDto;
public interface UserService {
ResponseEntity<SignUpResponseDto> signUp(SignUpRequestDto dto);
ResponseEntity<SignInResponseDto> signIn(SignInRequestDto dto);
// Map<?, ?> signUp(SignUpRequestDto dto);
// 편하지만 나중에 안 좋음. 유지보수, 사용하는 사람은 상당히 불편하다.
}
com.yhj.board.service.implement
package com.yhj.board.service.implement;
import com.yhj.board.common.ResponseMessage;
import com.yhj.board.dto.request.SignInRequestDto;
import com.yhj.board.dto.request.SignUpRequestDto;
import com.yhj.board.dto.response.ResponseEntity;
import com.yhj.board.dto.response.SignInResponseDto;
import com.yhj.board.dto.response.SignUpResponseDto;
import com.yhj.board.entity.User;
import com.yhj.board.repository.UserRepository;
import com.yhj.board.repository.implement.UserRepositoryImplement;
import com.yhj.board.service.UserService;
public class UserServiceImplement implements UserService {
// UserRepository에 의존하게 되어버림.
// private final UserRepository userRepository = new UserRepositoryImplement();
// 변수를 외부에서 받아오는 일반적인 방법.
private final UserRepository userRepository;
public UserServiceImplement(UserRepository userRepository) {
this.userRepository = userRepository;
}
@Override
public ResponseEntity<SignUpResponseDto> signUp(SignUpRequestDto dto) {
String eamil = dto.getEmail();
String telNumber = dto.getTelNumber();
String nickname = dto.getNickname();
// 이메일 중복 확인
boolean hasEmail = userRepository.existsByEmail(eamil);
if(hasEmail) return ResponseEntity.badRequest(ResponseMessage.EXISTED_EMAIL);
// 전화번호 중복 확인
boolean hasTelNumber = userRepository.existsByTelNumber(telNumber);
if(hasTelNumber) return ResponseEntity.badRequest(ResponseMessage.EXISTED_TEL_NUMBER);
// 닉네임 중복 확인
boolean hasNickname = userRepository.existsByNickname(nickname);
if(hasNickname) return ResponseEntity.badRequest(ResponseMessage.EXISTED_NICKNAME);
// Entity 생성
User user = new User(dto);
// Entity 저장
boolean result = userRepository.create(user);
if(!result) return ResponseEntity.internalServerError(ResponseMessage.DATABASE_ERROR);
return ResponseEntity.ok();
}
@Override
public ResponseEntity<SignInResponseDto> signIn(SignInRequestDto dto) {
String email = dto.getEmail();
String password = dto.getPassword();
// 이메일로 유저정보 찾기
User user = userRepository.read(email);
if(user == null) return ResponseEntity.unauthorized();
// 입력한 비밀번호가 저장된 비밀번호와 같은지 비교
if(!password.equals(user.getPassword())) return ResponseEntity.unauthorized();
SignInResponseDto data = new SignInResponseDto(user);
return ResponseEntity.ok(data);
}
}