From 0bb1ad252cf1b683a6d8a82317b19df13df1612f Mon Sep 17 00:00:00 2001 From: yyy9942 Date: Fri, 18 Oct 2019 18:03:28 +0900 Subject: [PATCH 1/5] =?UTF-8?q?Member=20Logout=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80,=20=EC=98=A4=ED=83=80=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../delfood/controller/MemberController.java | 55 +++++++++++++++++-- 1 file changed, 49 insertions(+), 6 deletions(-) diff --git a/src/main/java/com/delfood/controller/MemberController.java b/src/main/java/com/delfood/controller/MemberController.java index 6b36616..2b75ee7 100644 --- a/src/main/java/com/delfood/controller/MemberController.java +++ b/src/main/java/com/delfood/controller/MemberController.java @@ -41,6 +41,7 @@ * 스레드 환경 로깅이 필요하다면 Log4j2를 사용하는 것이 성능면에서 유리하다. 사용자 정의 로그레벨과 람다 표현식을 지원한다. Log4j2 자체적으로 직접 사용할 수는 * 있지만 일반적으로는 SLF4J와 함께 사용한다. *

+ * * @Log @Slf4j @Log4j2 등 어노테이션 적용시 자동으로 log 필드를 만들고 해당 클래스의 이름으로 로거 객체를 생성하여 할당한다. * * @author 정준 @@ -165,6 +166,25 @@ public ResponseEntity login(@RequestBody @NonNull MemberLoginRequ return responseEntity; } + /** + * 회원 로그아웃 메서드. + * @author jun + * @param session 현제 접속한 세션 + * @return 로그인 하지 않았을 시 401코드를 반환하고 result:NO_LOGIN 반환 + * 로그아웃 성공시 200 코드를 반환하고 result:SUCCESS 반환 + */ + public ResponseEntity logout(HttpSession session) { + String memberId = (String) session.getAttribute("LOGIN_MEMBER_ID"); + if (memberId == null) { + return new ResponseEntity(LogoutResponse.NO_LOGIN, + HttpStatus.UNAUTHORIZED); + } + + session.invalidate(); + return new ResponseEntity(LogoutResponse.SUCCESS, + HttpStatus.OK); + } + /** * 회원 비밀번호 변경 * @@ -274,7 +294,8 @@ public ResponseEntity updateMemberAddress( responseEntity = new ResponseEntity( UpdateMemberAddressResponse.NO_LOGIN, HttpStatus.UNAUTHORIZED); } else { - DMLOperationResult dmlResponse = memberService.updateMemberAddress(id, address, addressDetail); + DMLOperationResult dmlResponse = + memberService.updateMemberAddress(id, address, addressDetail); if (dmlResponse == DMLOperationResult.SUCCESS) { // 성공시 responseEntity = new ResponseEntity( @@ -303,24 +324,46 @@ public ResponseEntity updateMemberAddress( @AllArgsConstructor @RequiredArgsConstructor private static class LoginResponse { - enum LogInStatus { + enum LoginStatus { SUCCESS, FAIL, DELETED, ERROR } @NonNull - private LogInStatus result; + private LoginStatus result; private MemberDTO memberInfo; // success의 경우 memberInfo의 값을 set해줘야 하기 때문에 new 하도록 해준다. - private static final LoginResponse FAIL = new LoginResponse(LogInStatus.FAIL); - private static final LoginResponse DELETED = new LoginResponse(LogInStatus.DELETED); + private static final LoginResponse FAIL = new LoginResponse(LoginStatus.FAIL); + private static final LoginResponse DELETED = new LoginResponse(LoginStatus.DELETED); private static LoginResponse success(MemberDTO memberInfo) { - return new LoginResponse(LogInStatus.SUCCESS, memberInfo); + return new LoginResponse(LoginStatus.SUCCESS, memberInfo); } + } + + @Getter + @AllArgsConstructor + @RequiredArgsConstructor + private static class LogoutResponse { + enum LogoutStatus { + SUCCESS, FAIL, NO_LOGIN, ERROR + } + + @NonNull + private LogoutStatus result; + private MemberDTO memberInfo; + + // success의 경우 memberInfo의 값을 set해줘야 하기 때문에 new 하도록 해준다. + + private static final LogoutResponse FAIL = new LogoutResponse(LogoutStatus.FAIL); + private static final LogoutResponse NO_LOGIN = new LogoutResponse(LogoutStatus.NO_LOGIN); + private static final LogoutResponse SUCCESS = new LogoutResponse(LogoutStatus.SUCCESS); + + + } @Getter From acd4a29ac796a13fa096f531dc3589287f0cc5dd Mon Sep 17 00:00:00 2001 From: yyy9942 Date: Mon, 21 Oct 2019 10:03:07 +0900 Subject: [PATCH 2/5] =?UTF-8?q?=EB=A6=AC=EB=B7=B0=20=EB=B0=98=EC=98=81=20-?= =?UTF-8?q?=20DMLOperationResult=20->=20OperationResult=20-=20final?= =?UTF-8?q?=EC=9D=B4=20=EC=97=86=EB=8A=94=20=EB=B6=88=EB=B3=80=EA=B0=9D?= =?UTF-8?q?=EC=B2=B4=EB=A5=BC=20final=EB=A1=9C=20=EB=A7=8C=EB=93=A6=20-=20?= =?UTF-8?q?newShop=20->=20addShop=20-=20tab=20->=20space?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../delfood/controller/MemberController.java | 17 ++++--- .../delfood/controller/OwnerController.java | 10 ++--- .../delfood/controller/ShopController.java | 13 +++--- .../java/com/delfood/dto/MenuCategoryDTO.java | 5 --- ...rationResult.java => OperationResult.java} | 2 +- .../com/delfood/service/MemberService.java | 26 +++++------ .../com/delfood/service/OwnerService.java | 18 ++++---- .../java/com/delfood/service/ShopService.java | 4 +- src/main/resources/mybatis/mapper/member.xml | 44 +++++++++---------- 9 files changed, 67 insertions(+), 72 deletions(-) rename src/main/java/com/delfood/mapper/{DMLOperationResult.java => OperationResult.java} (81%) diff --git a/src/main/java/com/delfood/controller/MemberController.java b/src/main/java/com/delfood/controller/MemberController.java index 2b75ee7..b1c415e 100644 --- a/src/main/java/com/delfood/controller/MemberController.java +++ b/src/main/java/com/delfood/controller/MemberController.java @@ -1,7 +1,7 @@ package com.delfood.controller; import com.delfood.dto.MemberDTO; -import com.delfood.mapper.DMLOperationResult; +import com.delfood.mapper.OperationResult; import com.delfood.service.MemberService; import javax.servlet.http.HttpSession; import javax.validation.constraints.NotNull; @@ -219,8 +219,8 @@ public ResponseEntity updateMemberInfo(HttpSession new ResponseEntity(updateResponse, HttpStatus.BAD_REQUEST); } else { // 성공시 - DMLOperationResult dmlResponse = memberService.updateMemberPassword(id, newPassword); - if (dmlResponse == DMLOperationResult.SUCCESS) { + OperationResult dmlResponse = memberService.updateMemberPassword(id, newPassword); + if (dmlResponse == OperationResult.SUCCESS) { updateResponse = UpdateMemberPasswordResponse.SUCCESS; responseEntity = new ResponseEntity(updateResponse, HttpStatus.OK); @@ -251,8 +251,8 @@ public ResponseEntity deleteMemberInfo(HttpSession session responseEntity = new ResponseEntity(deleteResponse, HttpStatus.UNAUTHORIZED); } else { - DMLOperationResult dmlResponse = memberService.deleteMember(id); - if (dmlResponse == DMLOperationResult.SUCCESS) { + OperationResult dmlResponse = memberService.deleteMember(id); + if (dmlResponse == OperationResult.SUCCESS) { deleteResponse = DeleteMemberResponse.SUCCESS; // 회원 탈퇴시 로그아웃 시켜야 하기 때문에 세션 정보를 날린다 session.invalidate(); @@ -294,13 +294,13 @@ public ResponseEntity updateMemberAddress( responseEntity = new ResponseEntity( UpdateMemberAddressResponse.NO_LOGIN, HttpStatus.UNAUTHORIZED); } else { - DMLOperationResult dmlResponse = + OperationResult dmlResponse = memberService.updateMemberAddress(id, address, addressDetail); - if (dmlResponse == DMLOperationResult.SUCCESS) { + if (dmlResponse == OperationResult.SUCCESS) { // 성공시 responseEntity = new ResponseEntity( UpdateMemberAddressResponse.SUCCESS, HttpStatus.OK); - } else if (dmlResponse == DMLOperationResult.NONE_CHANGED) { + } else if (dmlResponse == OperationResult.NONE_CHANGED) { // 주소 변경이 되지 않았을 때 log.error("Member Address Update ERROR " + dmlResponse); throw new RuntimeException("Member Address Update ERROR"); @@ -356,7 +356,6 @@ enum LogoutStatus { private LogoutStatus result; private MemberDTO memberInfo; - // success의 경우 memberInfo의 값을 set해줘야 하기 때문에 new 하도록 해준다. private static final LogoutResponse FAIL = new LogoutResponse(LogoutStatus.FAIL); private static final LogoutResponse NO_LOGIN = new LogoutResponse(LogoutStatus.NO_LOGIN); diff --git a/src/main/java/com/delfood/controller/OwnerController.java b/src/main/java/com/delfood/controller/OwnerController.java index b77384b..3b33b1a 100644 --- a/src/main/java/com/delfood/controller/OwnerController.java +++ b/src/main/java/com/delfood/controller/OwnerController.java @@ -2,7 +2,7 @@ import com.delfood.dto.OwnerDTO; import com.delfood.dto.OwnerDTO.Status; -import com.delfood.mapper.DMLOperationResult; +import com.delfood.mapper.OperationResult; import com.delfood.service.OwnerService; import javax.servlet.http.HttpSession; import lombok.AllArgsConstructor; @@ -175,8 +175,8 @@ public ResponseEntity updateOwnerInfo( UpdateOwnerResponse.EMPTY_CONTENT, HttpStatus.BAD_REQUEST); } - DMLOperationResult dmlOperationError = ownerService.updateOwnerMailAndTel(id, mail, tel); - if (dmlOperationError == DMLOperationResult.SUCCESS) { + OperationResult dmlOperationError = ownerService.updateOwnerMailAndTel(id, mail, tel); + if (dmlOperationError == OperationResult.SUCCESS) { return new ResponseEntity( UpdateOwnerResponse.SUCCESS, HttpStatus.OK); } else { @@ -215,9 +215,9 @@ public ResponseEntity updatePassword( responseEntity = new ResponseEntity( UpdateOwnerResponse.PASSWORD_DUPLICATED, HttpStatus.CONFLICT); } else { - DMLOperationResult dmlOperationError = ownerService.updateOwnerPassword(id, newPassword); + OperationResult dmlOperationError = ownerService.updateOwnerPassword(id, newPassword); - if (DMLOperationResult.SUCCESS.equals(dmlOperationError)) { + if (OperationResult.SUCCESS.equals(dmlOperationError)) { responseEntity = new ResponseEntity( UpdateOwnerResponse.SUCCESS, HttpStatus.OK); } else { diff --git a/src/main/java/com/delfood/controller/ShopController.java b/src/main/java/com/delfood/controller/ShopController.java index 802f849..4d4d0ae 100644 --- a/src/main/java/com/delfood/controller/ShopController.java +++ b/src/main/java/com/delfood/controller/ShopController.java @@ -40,7 +40,7 @@ public ResponseEntity openShop(HttpSession session, return new ResponseEntity(OpenShopResponse.NO_LOGIN, HttpStatus.UNAUTHORIZED); } - + shopInfo.setOwnerId(ownerId); // 입력한 데이터 중 필수 데이터가 null일 경우 400 에러코드를 반환한다. @@ -49,7 +49,7 @@ public ResponseEntity openShop(HttpSession session, HttpStatus.BAD_REQUEST); } - shopService.newShop(shopInfo); + shopService.addShop(shopInfo); return new ResponseEntity(OpenShopResponse.SUCCESS, @@ -68,10 +68,11 @@ enum Result { @NonNull Result result; - - private static OpenShopResponse SUCCESS = new OpenShopResponse(Result.SUCCESS); - private static OpenShopResponse NO_LOGIN = new OpenShopResponse(Result.NO_LOGIN); - private static OpenShopResponse NULL_ARGUMENTS = new OpenShopResponse(Result.NULL_ARGUMENTS); + + private static final OpenShopResponse SUCCESS = new OpenShopResponse(Result.SUCCESS); + private static final OpenShopResponse NO_LOGIN = new OpenShopResponse(Result.NO_LOGIN); + private static final OpenShopResponse NULL_ARGUMENTS = + new OpenShopResponse(Result.NULL_ARGUMENTS); } } diff --git a/src/main/java/com/delfood/dto/MenuCategoryDTO.java b/src/main/java/com/delfood/dto/MenuCategoryDTO.java index b9cbb18..51578f6 100644 --- a/src/main/java/com/delfood/dto/MenuCategoryDTO.java +++ b/src/main/java/com/delfood/dto/MenuCategoryDTO.java @@ -9,11 +9,6 @@ @ToString public class MenuCategoryDTO { // 주력 메뉴 - // 한식, 분식, 카페, 일식, - // 치킨, 피자, 아시안, 양식, - // 중국집, 족발보쌈, 야식, 찜탕, - // 도시락, 패스트푸드, 프렌차이즈 - // KOREAN, SCHOOL_FOOD, CAFE, JAPANESE, // CHICKEN, PIZZA, ASIAN, WESTERN, // CHINESE, BOSSAM, MIDNIGHT_MEAL, SOUP, diff --git a/src/main/java/com/delfood/mapper/DMLOperationResult.java b/src/main/java/com/delfood/mapper/OperationResult.java similarity index 81% rename from src/main/java/com/delfood/mapper/DMLOperationResult.java rename to src/main/java/com/delfood/mapper/OperationResult.java index 383410a..4bc10ed 100644 --- a/src/main/java/com/delfood/mapper/DMLOperationResult.java +++ b/src/main/java/com/delfood/mapper/OperationResult.java @@ -1,6 +1,6 @@ package com.delfood.mapper; // SUCCESS 빼고 에러발생시 아래 내용을 포함하여 throw Exception -public enum DMLOperationResult { +public enum OperationResult { SUCCESS, NONE_CHANGED, TOO_MANY_CHANGED, EMPTY_RESULT } diff --git a/src/main/java/com/delfood/service/MemberService.java b/src/main/java/com/delfood/service/MemberService.java index 85524b6..c5b729e 100644 --- a/src/main/java/com/delfood/service/MemberService.java +++ b/src/main/java/com/delfood/service/MemberService.java @@ -1,7 +1,7 @@ package com.delfood.service; import com.delfood.dto.MemberDTO; -import com.delfood.mapper.DMLOperationResult; +import com.delfood.mapper.OperationResult; import com.delfood.mapper.MemberMapper; import com.delfood.utils.SHA256Util; import org.springframework.beans.factory.annotation.Autowired; @@ -62,15 +62,15 @@ public boolean isDuplicatedId(String id) { * @param password 변경할 비밀번호 * @return */ - public DMLOperationResult updateMemberPassword(String id, String password) { + public OperationResult updateMemberPassword(String id, String password) { String cryptoPassword = SHA256Util.encryptSHA256(password); int result = memberMapper.updateMemberPassword(id, cryptoPassword); if (result == 1) { - return DMLOperationResult.SUCCESS; // 원하는 1개의 데이터만 수정 + return OperationResult.SUCCESS; // 원하는 1개의 데이터만 수정 } else if (result == 0) { - return DMLOperationResult.NONE_CHANGED; // 데이터가 수정되지 않음. WHERE 조건 확인 필요 + return OperationResult.NONE_CHANGED; // 데이터가 수정되지 않음. WHERE 조건 확인 필요 } else { - return DMLOperationResult.TOO_MANY_CHANGED; // 데이터가 너무 많이 바뀜. WHERE 조건 확인 필요. + return OperationResult.TOO_MANY_CHANGED; // 데이터가 너무 많이 바뀜. WHERE 조건 확인 필요. } } @@ -81,14 +81,14 @@ public DMLOperationResult updateMemberPassword(String id, String password) { * @param id 탈퇴할 회원의 아이디 * @return */ - public DMLOperationResult deleteMember(String id) { + public OperationResult deleteMember(String id) { int result = memberMapper.deleteMember(id); if (result == 1) { - return DMLOperationResult.SUCCESS; // 원하는 1개의 데이터만 수정 + return OperationResult.SUCCESS; // 원하는 1개의 데이터만 수정 } else if (result == 0) { - return DMLOperationResult.NONE_CHANGED; // 데이터가 수정되지 않음. WHERE 조건 확인 필요 + return OperationResult.NONE_CHANGED; // 데이터가 수정되지 않음. WHERE 조건 확인 필요 } else { - return DMLOperationResult.TOO_MANY_CHANGED; // 데이터가 너무 많이 바뀜. WHERE 조건 확인 필요. + return OperationResult.TOO_MANY_CHANGED; // 데이터가 너무 많이 바뀜. WHERE 조건 확인 필요. } } @@ -100,14 +100,14 @@ public DMLOperationResult deleteMember(String id) { * @param addressDetail 변경할 상세 주소 * @return */ - public DMLOperationResult updateMemberAddress(String id, String address, String addressDetail) { + public OperationResult updateMemberAddress(String id, String address, String addressDetail) { int result = memberMapper.updateMemberAddress(id, address, addressDetail); if (result == 1) { - return DMLOperationResult.SUCCESS; // 원하는 1개의 데이터만 수정 + return OperationResult.SUCCESS; // 원하는 1개의 데이터만 수정 } else if (result == 0) { - return DMLOperationResult.NONE_CHANGED; // 데이터가 수정되지 않음. WHERE 조건 확인 필요 + return OperationResult.NONE_CHANGED; // 데이터가 수정되지 않음. WHERE 조건 확인 필요 } else { - return DMLOperationResult.TOO_MANY_CHANGED; // 데이터가 너무 많이 바뀜. WHERE 조건 확인 필요. 정상적인 상황에서는 발생하지 + return OperationResult.TOO_MANY_CHANGED; // 데이터가 너무 많이 바뀜. WHERE 조건 확인 필요. 정상적인 상황에서는 발생하지 // 않음. } } diff --git a/src/main/java/com/delfood/service/OwnerService.java b/src/main/java/com/delfood/service/OwnerService.java index 5102fa5..d7784b8 100644 --- a/src/main/java/com/delfood/service/OwnerService.java +++ b/src/main/java/com/delfood/service/OwnerService.java @@ -1,7 +1,7 @@ package com.delfood.service; import com.delfood.dto.OwnerDTO; -import com.delfood.mapper.DMLOperationResult; +import com.delfood.mapper.OperationResult; import com.delfood.mapper.OwnerMapper; import com.delfood.utils.SHA256Util; import lombok.extern.log4j.Log4j2; @@ -76,14 +76,14 @@ public OwnerDTO getOwner(String id) { * @return */ @Transactional(rollbackFor = RuntimeException.class) - public DMLOperationResult updateOwnerMailAndTel(String id, String mail, String tel) { + public OperationResult updateOwnerMailAndTel(String id, String mail, String tel) { int result = ownerMapper.updateMailAndTel(id, mail, tel); if (result == 1) { - return DMLOperationResult.SUCCESS; // 정상 수행 + return OperationResult.SUCCESS; // 정상 수행 } else if (result == 0) { - return DMLOperationResult.NONE_CHANGED; // 데이터가 변경되지 않음 + return OperationResult.NONE_CHANGED; // 데이터가 변경되지 않음 } else { - throw new RuntimeException("password update error : " + DMLOperationResult.TOO_MANY_CHANGED); + throw new RuntimeException("password update error : " + OperationResult.TOO_MANY_CHANGED); } } @@ -95,15 +95,15 @@ public DMLOperationResult updateOwnerMailAndTel(String id, String mail, String t * @return */ @Transactional(rollbackFor = RuntimeException.class) // runtimeException이 발생하면 rollback을 수행한다. - public DMLOperationResult updateOwnerPassword(String id, String password) { + public OperationResult updateOwnerPassword(String id, String password) { String cryptoPassword = SHA256Util.encryptSHA256(password); int result = ownerMapper.updatePassword(id, cryptoPassword); if (result == 1) { - return DMLOperationResult.SUCCESS; + return OperationResult.SUCCESS; } else if (result == 0) { - return DMLOperationResult.NONE_CHANGED; + return OperationResult.NONE_CHANGED; } else { - throw new RuntimeException("password update error : " + DMLOperationResult.TOO_MANY_CHANGED); + throw new RuntimeException("password update error : " + OperationResult.TOO_MANY_CHANGED); } } diff --git a/src/main/java/com/delfood/service/ShopService.java b/src/main/java/com/delfood/service/ShopService.java index 11ea140..e8f0779 100644 --- a/src/main/java/com/delfood/service/ShopService.java +++ b/src/main/java/com/delfood/service/ShopService.java @@ -1,7 +1,7 @@ package com.delfood.service; import com.delfood.dto.ShopDTO; -import com.delfood.mapper.DMLOperationResult; +import com.delfood.mapper.OperationResult; import com.delfood.mapper.ShopMapper; import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; @@ -19,7 +19,7 @@ public class ShopService { * @param shopInfo 삽입할 매장의 데이터 * @return */ - public void newShop(ShopDTO shopInfo) { + public void addShop(ShopDTO shopInfo) { int insertShop = shopMapper.insertShop(shopInfo); if (insertShop != 1) { log.error("insert ERROR - {}", shopInfo); diff --git a/src/main/resources/mybatis/mapper/member.xml b/src/main/resources/mybatis/mapper/member.xml index 2d0082a..1d2238b 100644 --- a/src/main/resources/mybatis/mapper/member.xml +++ b/src/main/resources/mybatis/mapper/member.xml @@ -1,8 +1,8 @@ - - + + - INSERT INTO MEMBER(id, password, name, tel, mail) - VALUES(#{id}, #{password}, #{name}, #{tel}, #{mail}) + INSERT INTO MEMBER(id, password, name, tel, mail) + VALUES(#{id}, #{password}, #{name}, #{tel}, #{mail}) - UPDATE MEMBER - SET password = #{password} - WHERE id=#{id} + UPDATE MEMBER + SET password = #{password} + WHERE id=#{id} - UPDATE MEMBER - SET status = 'DELETE' - WHERE id=#{id} + UPDATE MEMBER + SET status = 'DELETE' + WHERE id=#{id} - UPDATE MEMBER - SET address = #{address}, - address_detail = #{addressDetail} - WHERE id = #{id} + UPDATE MEMBER + SET address = #{address}, + address_detail = #{addressDetail} + WHERE id = #{id} From 1ad26ff65d9b7f2ff9e63cbc9d2285589bb99da2 Mon Sep 17 00:00:00 2001 From: yyy9942 Date: Mon, 21 Oct 2019 10:56:19 +0900 Subject: [PATCH 3/5] =?UTF-8?q?SessionUtil=20=EC=A0=81=EC=9A=A9=20-=20Memb?= =?UTF-8?q?er=EC=97=90=EC=84=9C=20session=EC=9D=84=20=EC=A7=81=EC=A0=91=20?= =?UTF-8?q?=EC=9E=91=EC=97=85=ED=95=98=EC=A7=80=20=EC=95=8A=EA=B3=A0,=20Se?= =?UTF-8?q?ssionUtil=EC=9D=84=20=ED=86=B5=ED=95=B4=20=EC=9E=91=EC=97=85?= =?UTF-8?q?=ED=95=98=EB=8F=84=EB=A1=9D=20=EB=B3=80=EA=B2=BD=20-=20Owner?= =?UTF-8?q?=EC=97=90=EC=84=9C=20session=EC=9D=84=20=EC=A7=81=EC=A0=91=20?= =?UTF-8?q?=EC=9E=91=EC=97=85=ED=95=98=EC=A7=80=20=EC=95=8A=EA=B3=A0,=20Se?= =?UTF-8?q?ssionUtil=EC=9D=84=20=ED=86=B5=ED=95=B4=20=EC=9E=91=EC=97=85?= =?UTF-8?q?=ED=95=98=EB=8F=84=EB=A1=9D=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../delfood/controller/MemberController.java | 32 +++---- .../delfood/controller/OwnerController.java | 29 ++++--- .../delfood/controller/ShopController.java | 3 +- .../java/com/delfood/utils/SessionUtil.java | 87 +++++++++++++++++++ 4 files changed, 121 insertions(+), 30 deletions(-) create mode 100644 src/main/java/com/delfood/utils/SessionUtil.java diff --git a/src/main/java/com/delfood/controller/MemberController.java b/src/main/java/com/delfood/controller/MemberController.java index b1c415e..35468c1 100644 --- a/src/main/java/com/delfood/controller/MemberController.java +++ b/src/main/java/com/delfood/controller/MemberController.java @@ -3,6 +3,7 @@ import com.delfood.dto.MemberDTO; import com.delfood.mapper.OperationResult; import com.delfood.service.MemberService; +import com.delfood.utils.SessionUtil; import javax.servlet.http.HttpSession; import javax.validation.constraints.NotNull; import lombok.AllArgsConstructor; @@ -63,7 +64,7 @@ public class MemberController { @GetMapping("myInfo") public ResponseEntity memberInfo(HttpSession session) { ResponseEntity responseEntity = null; - String id = (String) session.getAttribute("LOGIN_MEMBER_ID"); + String id = SessionUtil.getLoginMemberId(session); if (id == null) { responseEntity = new ResponseEntity(HttpStatus.UNAUTHORIZED); } else { @@ -131,8 +132,9 @@ public ResponseEntity signUp(@RequestBody @NotNull MemberDTO mem return responseEntity; } - /* - * 회원 로그인을 진행한다. Login 요청시 id, password가 NULL일 경우 NullPointerException을 throw한다. + /** + * 회원 로그인을 진행한다. + * Login 요청시 id, password가 NULL일 경우 NullPointerException을 throw한다. */ @PostMapping("login") public ResponseEntity login(@RequestBody @NonNull MemberLoginRequest loginRequest, @@ -151,7 +153,7 @@ public ResponseEntity login(@RequestBody @NonNull MemberLoginRequ } else if (MemberDTO.Status.DEFAULT.equals(memberInfo.getStatus())) { // 성공시 세션에 ID를 저장 loginResponse = LoginResponse.success(memberInfo); - session.setAttribute("LOGIN_MEMBER_ID", memberInfo.getId()); + SessionUtil.setLoginMemberId(session, id); responseEntity = new ResponseEntity(loginResponse, HttpStatus.OK); } else if (MemberDTO.Status.DELETED.equals(memberInfo.getStatus())) { // 삭제된 경우 @@ -173,20 +175,23 @@ public ResponseEntity login(@RequestBody @NonNull MemberLoginRequ * @return 로그인 하지 않았을 시 401코드를 반환하고 result:NO_LOGIN 반환 * 로그아웃 성공시 200 코드를 반환하고 result:SUCCESS 반환 */ + @GetMapping("logout") public ResponseEntity logout(HttpSession session) { String memberId = (String) session.getAttribute("LOGIN_MEMBER_ID"); if (memberId == null) { return new ResponseEntity(LogoutResponse.NO_LOGIN, HttpStatus.UNAUTHORIZED); + } else { + SessionUtil.logoutMember(session); } + - session.invalidate(); return new ResponseEntity(LogoutResponse.SUCCESS, HttpStatus.OK); } /** - * 회원 비밀번호 변경 + * 회원 비밀번호 변경. * * @param session 현재 로그인한 사용자의 세션 * @return @@ -196,7 +201,7 @@ public ResponseEntity updateMemberInfo(HttpSession @RequestBody @NotNull UpdateMemberPasswordRequest passwordRequest) { String password = passwordRequest.getPassword(); String newPassword = passwordRequest.getNewPassword(); - String id = (String) session.getAttribute("LOGIN_MEMBER_ID"); + String id = SessionUtil.getLoginMemberId(session); ResponseEntity responseEntity = null; UpdateMemberPasswordResponse updateResponse; @@ -245,7 +250,7 @@ public ResponseEntity updateMemberInfo(HttpSession public ResponseEntity deleteMemberInfo(HttpSession session) { ResponseEntity responseEntity = null; DeleteMemberResponse deleteResponse; - String id = (String) session.getAttribute("LOGIN_MEMBER_ID"); + String id = SessionUtil.getLoginMemberId(session); if (id == null) { deleteResponse = DeleteMemberResponse.NO_LOGIN; responseEntity = @@ -267,7 +272,7 @@ public ResponseEntity deleteMemberInfo(HttpSession session } /** - * 회원 주소 변경 + * 회원 주소 변경. * * @param memberInfo 회원 주소 정보 * @param session 현재 로그인한 고객의 세션 @@ -278,8 +283,8 @@ public ResponseEntity updateMemberAddress( ResponseEntity responseEntity = null; String address = memberInfo.getAddress(); String addressDetail = memberInfo.getAddressDetail(); - String id = (String) session.getAttribute("LOGIN_MEMBER_ID"); - + String id = SessionUtil.getLoginMemberId(session); + if (address == null || addressDetail == null) { // 요청한 주소가 null일 때 if (address == null) { @@ -345,19 +350,16 @@ private static LoginResponse success(MemberDTO memberInfo) { } @Getter - @AllArgsConstructor @RequiredArgsConstructor private static class LogoutResponse { enum LogoutStatus { - SUCCESS, FAIL, NO_LOGIN, ERROR + SUCCESS, NO_LOGIN, ERROR } @NonNull private LogoutStatus result; - private MemberDTO memberInfo; - private static final LogoutResponse FAIL = new LogoutResponse(LogoutStatus.FAIL); private static final LogoutResponse NO_LOGIN = new LogoutResponse(LogoutStatus.NO_LOGIN); private static final LogoutResponse SUCCESS = new LogoutResponse(LogoutStatus.SUCCESS); diff --git a/src/main/java/com/delfood/controller/OwnerController.java b/src/main/java/com/delfood/controller/OwnerController.java index 3b33b1a..c419d68 100644 --- a/src/main/java/com/delfood/controller/OwnerController.java +++ b/src/main/java/com/delfood/controller/OwnerController.java @@ -4,6 +4,7 @@ import com.delfood.dto.OwnerDTO.Status; import com.delfood.mapper.OperationResult; import com.delfood.service.OwnerService; +import com.delfood.utils.SessionUtil; import javax.servlet.http.HttpSession; import lombok.AllArgsConstructor; import lombok.Getter; @@ -93,7 +94,7 @@ public ResponseEntity login(@RequestBody OwnerLoginRequest l Status ownerStatus = ownerInfo.getStatus(); if (ownerStatus == Status.DEFAULT) { ownerLoginResponse = OwnerLoginResponse.success(ownerInfo); - session.setAttribute("LOGIN_OWNER_ID", ownerInfo.getId()); + SessionUtil.setLoginOwnerId(session, loginRequest.getId()); responseEntity = new ResponseEntity(ownerLoginResponse, HttpStatus.OK); } else { ownerLoginResponse = OwnerLoginResponse.DELETED; @@ -112,14 +113,14 @@ public ResponseEntity login(@RequestBody OwnerLoginRequest l * @return */ @GetMapping("logout") - public ResponseEntity logout(HttpSession session) { - String id = (String) session.getAttribute("LOGIN_OWNER_ID"); + public ResponseEntity logout(HttpSession session) { + String id = SessionUtil.getLoginOwnerId(session); if (id != null) { - session.invalidate(); - return new ResponseEntity(logoutResponse.SUCCESS, + SessionUtil.logoutOwner(session); + return new ResponseEntity(LogoutResponse.SUCCESS, HttpStatus.OK); } else { - return new ResponseEntity(logoutResponse.NO_LOGIN, + return new ResponseEntity(LogoutResponse.NO_LOGIN, HttpStatus.UNAUTHORIZED); } } @@ -134,7 +135,7 @@ public ResponseEntity logout(HttpSession session) { @GetMapping("myInfo") public ResponseEntity ownerInfo(HttpSession session) { ResponseEntity responseEntity = null; - String id = (String) session.getAttribute("LOGIN_OWNER_ID"); + String id = SessionUtil.getLoginOwnerId(session); if (id == null) { responseEntity = new ResponseEntity(HttpStatus.UNAUTHORIZED); } else { @@ -158,7 +159,7 @@ public ResponseEntity updateOwnerInfo( String mail = updateRequest.getMail(); String tel = updateRequest.getTel(); String password = updateRequest.getPassword(); - String id = (String) session.getAttribute("LOGIN_OWNER_ID"); + String id = SessionUtil.getLoginOwnerId(session); if (id == null) { // 로그인 상태가 아닌 경우 return new ResponseEntity( @@ -195,7 +196,7 @@ public ResponseEntity updateOwnerInfo( @PatchMapping("password") public ResponseEntity updatePassword( @RequestBody UpdateOwnerPasswordRequest passwordResquest, HttpSession session) { - String id = (String) session.getAttribute("LOGIN_OWNER_ID"); + String id = SessionUtil.getLoginOwnerId(session); String password = passwordResquest.getPassword(); String newPassword = passwordResquest.getNewPassword(); @@ -344,16 +345,16 @@ enum UpdateStatus { @Getter @RequiredArgsConstructor - private static class logoutResponse { - enum logoutStatus { + private static class LogoutResponse { + enum LogoutStatus { SUCCESS, NO_LOGIN } @NonNull - private logoutStatus result; + private LogoutStatus result; - private static final logoutResponse SUCCESS = new logoutResponse(logoutStatus.SUCCESS); - private static final logoutResponse NO_LOGIN = new logoutResponse(logoutStatus.NO_LOGIN); + private static final LogoutResponse SUCCESS = new LogoutResponse(LogoutStatus.SUCCESS); + private static final LogoutResponse NO_LOGIN = new LogoutResponse(LogoutStatus.NO_LOGIN); } diff --git a/src/main/java/com/delfood/controller/ShopController.java b/src/main/java/com/delfood/controller/ShopController.java index 4d4d0ae..898cbc3 100644 --- a/src/main/java/com/delfood/controller/ShopController.java +++ b/src/main/java/com/delfood/controller/ShopController.java @@ -2,6 +2,7 @@ import com.delfood.dto.ShopDTO; import com.delfood.service.ShopService; +import com.delfood.utils.SessionUtil; import javax.servlet.http.HttpSession; import lombok.Getter; import lombok.NonNull; @@ -33,7 +34,7 @@ public class ShopController { @PostMapping public ResponseEntity openShop(HttpSession session, @RequestBody ShopDTO shopInfo) { - String ownerId = (String) session.getAttribute("LOGIN_OWNER_ID"); + String ownerId = SessionUtil.getLoginOwnerId(session); // 로그인 하지 않았을 시 401코드를 반환한다. if (ownerId == null) { diff --git a/src/main/java/com/delfood/utils/SessionUtil.java b/src/main/java/com/delfood/utils/SessionUtil.java new file mode 100644 index 0000000..79db788 --- /dev/null +++ b/src/main/java/com/delfood/utils/SessionUtil.java @@ -0,0 +1,87 @@ +package com.delfood.utils; + +import javax.servlet.http.HttpSession; + +public class SessionUtil { + + private static final String LOGIN_MEMBER_ID = "LOGIN_MEMBER_ID"; + private static final String LOGIN_OWNER_ID = "LOGIN_OWNER_ID"; + + // 인스턴스화 방지 + private SessionUtil() {} + + /** + * 로그인한 고객의 아이디를 세션에서 꺼낸다. + * @author jun + * @param session 사용자의 세션 + * @return 로그인한 고객의 id 또는 null + */ + public static String getLoginMemberId(HttpSession session) { + return (String) session.getAttribute(LOGIN_MEMBER_ID); + } + + /** + * 로그인 한 고객의 id를 세션에 저장한다. + * @author jun + * @param session 사용자의 session + * @param id 로그인한 고객의 id + */ + public static void setLoginMemberId(HttpSession session, String id) { + session.setAttribute(LOGIN_MEMBER_ID, id); + } + + + + + /** + * 로그인한 사장님 id를 세션에서 꺼낸다. + * 로그인 하지 않았다면 null이 반환된다 + * @author jun + * @param session 사용자의 세션 + * @return 로그인한 사장님 id 또는 null + */ + public static String getLoginOwnerId(HttpSession session) { + return (String) session.getAttribute(LOGIN_OWNER_ID); + } + + /** + * 로그인한 사장님의 id를 세션에 저장한다. + * @author jun + * @param session 사용자의 세션 + * @param id 로그인한 사장님 id + */ + public static void setLoginOwnerId(HttpSession session, String id) { + session.setAttribute(LOGIN_OWNER_ID, id); + } + + + /** + * 해당 세션의 정보를 모두 삭제한다. + * @author jun + * @param session 사용자의 세션 + */ + public static void logoutAll(HttpSession session) { + session.invalidate(); + } + + /** + * 고객 로그인 정보를 삭제한다. + * @author jun + * @param session 사용자의 세션 + */ + public static void logoutMember(HttpSession session) { + session.removeAttribute(LOGIN_MEMBER_ID); + } + + /** + * 사장님 로그인 정보를 삭제한다. + * @author jun + * @param session 사용자의 세션 + */ + public static void logoutOwner(HttpSession session) { + session.removeAttribute(LOGIN_OWNER_ID); + } + + + +} From 2692670b33cdfb331b337cff148d0a86c4d3a175 Mon Sep 17 00:00:00 2001 From: yyy9942 Date: Tue, 22 Oct 2019 20:56:13 +0900 Subject: [PATCH 4/5] =?UTF-8?q?=EB=A7=A4=EC=9E=A5=20=EC=A1=B0=ED=9A=8C=20?= =?UTF-8?q?=EA=B8=B0=EB=8A=A5=20=EC=B6=94=EA=B0=80=201.=20=ED=8E=98?= =?UTF-8?q?=EC=9D=B4=EC=A7=95=20=EC=A0=81=EC=9A=A9=20-=20page=20=EA=B0=92?= =?UTF-8?q?=EC=9D=84=20=EC=A3=BC=EC=A7=80=20=EC=95=8A=EC=9D=84=EC=8B=9C=20?= =?UTF-8?q?=EC=9E=90=EB=8F=99=EC=9C=BC=EB=A1=9C=200=20=EA=B0=92=EC=9D=84?= =?UTF-8?q?=20=EC=A3=BC=EC=9E=85?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 2. 총 매장 개수를 같이 return하여 매장 개수를 알 수 있도록 만듦 --- .../delfood/controller/ShopController.java | 88 +++++++++++++++---- src/main/java/com/delfood/dto/ShopDTO.java | 5 +- .../java/com/delfood/mapper/ShopMapper.java | 21 ++++- .../java/com/delfood/service/ShopService.java | 20 +++++ src/main/resources/mybatis/mapper/shop.xml | 17 +++- 5 files changed, 127 insertions(+), 24 deletions(-) diff --git a/src/main/java/com/delfood/controller/ShopController.java b/src/main/java/com/delfood/controller/ShopController.java index 898cbc3..50021d9 100644 --- a/src/main/java/com/delfood/controller/ShopController.java +++ b/src/main/java/com/delfood/controller/ShopController.java @@ -1,20 +1,25 @@ package com.delfood.controller; -import com.delfood.dto.ShopDTO; -import com.delfood.service.ShopService; -import com.delfood.utils.SessionUtil; +import java.util.List; import javax.servlet.http.HttpSession; -import lombok.Getter; -import lombok.NonNull; -import lombok.RequiredArgsConstructor; -import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; +import org.springframework.lang.Nullable; +import org.springframework.web.bind.annotation.GetMapping; 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.delfood.dto.ShopDTO; +import com.delfood.service.ShopService; +import com.delfood.utils.SessionUtil; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NonNull; +import lombok.RequiredArgsConstructor; +import lombok.Setter; +import lombok.extern.log4j.Log4j2; @RestController @RequestMapping("/owners/shops/") @@ -32,13 +37,13 @@ public class ShopController { * @return */ @PostMapping - public ResponseEntity openShop(HttpSession session, + public ResponseEntity addShop(HttpSession session, @RequestBody ShopDTO shopInfo) { String ownerId = SessionUtil.getLoginOwnerId(session); // 로그인 하지 않았을 시 401코드를 반환한다. if (ownerId == null) { - return new ResponseEntity(OpenShopResponse.NO_LOGIN, + return new ResponseEntity(AddShopResponse.NO_LOGIN, HttpStatus.UNAUTHORIZED); } @@ -46,23 +51,44 @@ public ResponseEntity openShop(HttpSession session, // 입력한 데이터 중 필수 데이터가 null일 경우 400 에러코드를 반환한다. if (ShopDTO.hasNullDataBeforeCreate(shopInfo)) { - return new ResponseEntity(OpenShopResponse.NULL_ARGUMENTS, + return new ResponseEntity(AddShopResponse.NULL_ARGUMENTS, HttpStatus.BAD_REQUEST); } shopService.addShop(shopInfo); - return new ResponseEntity(OpenShopResponse.SUCCESS, + return new ResponseEntity(AddShopResponse.SUCCESS, HttpStatus.CREATED); } + /** + * 사장님이 가진 매장들을 불러온다. + * + * @param myShopsRequest 페이징 정보 + * @param session 사용자의 세션 + * @return 페이지에 따른 사장님 매장, 총 매장 개수 + */ + @GetMapping + public ResponseEntity myShops(MyShopsRequest myShopsRequest, + HttpSession session) { + String id = SessionUtil.getLoginOwnerId(session); + if (id == null) { + return new ResponseEntity(MyShopsResponse.NO_LOGIN, HttpStatus.UNAUTHORIZED); + } + + List myShops = shopService.getMyShops(id, myShopsRequest.getPage()); + long myShopCount = shopService.getMyShopCount(id); + return new ResponseEntity(MyShopsResponse.success(myShops, myShopCount), + HttpStatus.OK); + } + // Response 객체 @Getter @RequiredArgsConstructor - private static class OpenShopResponse { + private static class AddShopResponse { enum Result { SUCCESS, NO_LOGIN, NULL_ARGUMENTS } @@ -70,10 +96,40 @@ enum Result { @NonNull Result result; - private static final OpenShopResponse SUCCESS = new OpenShopResponse(Result.SUCCESS); - private static final OpenShopResponse NO_LOGIN = new OpenShopResponse(Result.NO_LOGIN); - private static final OpenShopResponse NULL_ARGUMENTS = - new OpenShopResponse(Result.NULL_ARGUMENTS); + private static final AddShopResponse SUCCESS = new AddShopResponse(Result.SUCCESS); + private static final AddShopResponse NO_LOGIN = new AddShopResponse(Result.NO_LOGIN); + private static final AddShopResponse NULL_ARGUMENTS = + new AddShopResponse(Result.NULL_ARGUMENTS); + } + + @Getter + @RequiredArgsConstructor + @AllArgsConstructor + private static class MyShopsResponse { + enum Result { + SUCCESS, NO_LOGIN + } + + @NonNull + Result result; + + List myShops; + + Long shopCount; + + private static final MyShopsResponse NO_LOGIN = new MyShopsResponse(Result.NO_LOGIN); + + public static MyShopsResponse success(List myShops, Long shopCount) { + return new MyShopsResponse(Result.SUCCESS, myShops, shopCount); + } + } + + // Request 객체 + @Getter + @Setter + private static class MyShopsRequest { + @Nullable + private Long page; } } diff --git a/src/main/java/com/delfood/dto/ShopDTO.java b/src/main/java/com/delfood/dto/ShopDTO.java index e70e074..1ebc105 100644 --- a/src/main/java/com/delfood/dto/ShopDTO.java +++ b/src/main/java/com/delfood/dto/ShopDTO.java @@ -116,7 +116,10 @@ public static boolean hasNullDataBeforeCreate(ShopDTO shopInfo) { || shopInfo.getBizNumber() == null || shopInfo.getInfo() == null || shopInfo.getMinOrderPrice() == null - || shopInfo.getOrderType() == null) { + || shopInfo.getOrderType() == null + || shopInfo.getTel() == null + || shopInfo.getAddress() == null + || shopInfo.getAddressDetail() == null) { return true; } return false; diff --git a/src/main/java/com/delfood/mapper/ShopMapper.java b/src/main/java/com/delfood/mapper/ShopMapper.java index 953ee8d..1e400a4 100644 --- a/src/main/java/com/delfood/mapper/ShopMapper.java +++ b/src/main/java/com/delfood/mapper/ShopMapper.java @@ -6,6 +6,12 @@ @Repository public interface ShopMapper { + /** + * 매장 입점 신청을 한다. + * @author jun + * @param shopInfo 입점 신청 매장 정보 + * @return + */ public int insertShop(ShopDTO shopInfo); /** @@ -41,11 +47,20 @@ public interface ShopMapper { public ShopDTO findById(Long id); /** - * 사장 id로 가지고 있는 매장을 모두 조회한다.
- * 한 사장당 많은 매장을 가지기는 어려우므로 페이징 처리를 따로 하지는 않았다. + * 사장 id로 가지고 있는 매장을 조회한다.
* @author jun * @param ownerId 매장을 가진 사장의 id + * @param page 페이지 * @return */ - public List findByOwnerId(String ownerId); + public List findByOwnerId(String ownerId, Long page); + + /** + * 사장 id로 가지고 있는 매장의 개수를 조회한다. + * @author jun + * @param ownerId 사장님 id + * @return 매장 개수 + */ + public long countByOwnerId(String ownerId); + } diff --git a/src/main/java/com/delfood/service/ShopService.java b/src/main/java/com/delfood/service/ShopService.java index e8f0779..0948e84 100644 --- a/src/main/java/com/delfood/service/ShopService.java +++ b/src/main/java/com/delfood/service/ShopService.java @@ -4,6 +4,7 @@ import com.delfood.mapper.OperationResult; import com.delfood.mapper.ShopMapper; import lombok.extern.log4j.Log4j2; +import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -26,4 +27,23 @@ public void addShop(ShopDTO shopInfo) { throw new RuntimeException("Shop insert ERROR"); } } + + /** + * 사장님 가게들의 정보를 불러오는 메서드. + * @param id 사장님 id + * @param page 페이지 정보 + * @return + */ + public List getMyShops(String id, Long page) { + return shopMapper.findByOwnerId(id, page); + } + + /** + * 사장님이 가진 총 가게 개수를 불러오는 메서드. + * @param id 사장님 아이디 + * @return + */ + public long getMyShopCount(String id) { + return shopMapper.countByOwnerId(id); + } } diff --git a/src/main/resources/mybatis/mapper/shop.xml b/src/main/resources/mybatis/mapper/shop.xml index 1f8c64d..d76ed1a 100644 --- a/src/main/resources/mybatis/mapper/shop.xml +++ b/src/main/resources/mybatis/mapper/shop.xml @@ -20,7 +20,7 @@ created_at createdAt, updated_at updatedAt, status, - oreder_type orderType, + order_type orderType, origin_info originInfo, work_condition workCondition FROM SHOP @@ -58,13 +58,15 @@ WHERE id = #{id} - - WHERE ownerId = #{ownerId} + WHERE owner_id = #{ownerId} + LIMIT 0,10 + #{page*10 + 1}, #{page*10 + 10} - WHERE id = #{id} @@ -92,4 +94,11 @@ WHERE id = #{id} + + + From 612409edde9ce1fab03162397388604114c867be Mon Sep 17 00:00:00 2001 From: yyy9942 Date: Wed, 23 Oct 2019 16:10:51 +0900 Subject: [PATCH 5/5] =?UTF-8?q?Code=20=EB=A6=AC=ED=8C=A9=ED=86=A0=EB=A7=81?= =?UTF-8?q?=20:=20=20=EB=B6=88=ED=95=84=EC=9A=94=ED=95=9C=20=EC=A1=B0?= =?UTF-8?q?=EA=B1=B4=EB=AC=B8=20=EC=A0=9C=EA=B1=B0,=20=ED=8A=B8=EB=9E=9C?= =?UTF-8?q?=EC=9E=AD=EC=85=98=20=EC=A0=81=EC=9A=A9=20=EB=93=B1=20-=20Opera?= =?UTF-8?q?tionResult=20enum=20=EC=A0=9C=EA=B1=B0=20-=20return=20Type?= =?UTF-8?q?=EC=9C=BC=EB=A1=9C=20=EC=A1=B4=EC=9E=AC=ED=95=98=EB=8D=98=20Opr?= =?UTF-8?q?ationResult=EB=8A=94=20=EB=AA=A8=EB=91=90=20void=EB=A1=9C=20?= =?UTF-8?q?=EC=A0=81=EC=9A=A9=20-=20DML=EB=AC=B8=EC=97=90=20Transactional?= =?UTF-8?q?=20=EC=A0=81=EC=9A=A9=20-=20=EC=98=88=EC=99=B8=20=EB=B0=9C?= =?UTF-8?q?=EC=83=9D=EC=8B=9C=20=EB=A1=9C=EA=B7=B8=EB=A5=BC=20=EB=82=A8?= =?UTF-8?q?=EA=B8=B0=EB=8F=84=EB=A1=9D=20=EC=A0=81=EC=9A=A9=20-=20LIMIT?= =?UTF-8?q?=EB=A1=9C=20=EC=9D=B8=ED=95=9C=20=EC=84=B1=EB=8A=A5=EC=A0=80?= =?UTF-8?q?=ED=95=98=EB=A5=BC=20=ED=94=BC=ED=95=98=EA=B8=B0=20=EC=9C=84?= =?UTF-8?q?=ED=95=B4=20=ED=8E=98=EC=9D=B4=EC=A7=95=20=EC=BF=BC=EB=A6=AC=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../delfood/controller/MemberController.java | 71 +++++++------------ .../delfood/controller/OwnerController.java | 25 ++----- .../delfood/controller/ShopController.java | 4 +- src/main/java/com/delfood/dto/OwnerDTO.java | 2 +- .../com/delfood/mapper/OperationResult.java | 6 -- .../java/com/delfood/mapper/ShopMapper.java | 4 +- .../com/delfood/service/MemberService.java | 49 ++++++------- .../com/delfood/service/OwnerService.java | 27 +++---- .../java/com/delfood/service/ShopService.java | 17 ++--- src/main/resources/mybatis/mapper/shop.xml | 4 +- 10 files changed, 79 insertions(+), 130 deletions(-) delete mode 100644 src/main/java/com/delfood/mapper/OperationResult.java diff --git a/src/main/java/com/delfood/controller/MemberController.java b/src/main/java/com/delfood/controller/MemberController.java index 35468c1..65c2745 100644 --- a/src/main/java/com/delfood/controller/MemberController.java +++ b/src/main/java/com/delfood/controller/MemberController.java @@ -1,7 +1,6 @@ package com.delfood.controller; import com.delfood.dto.MemberDTO; -import com.delfood.mapper.OperationResult; import com.delfood.service.MemberService; import com.delfood.utils.SessionUtil; import javax.servlet.http.HttpSession; @@ -17,6 +16,7 @@ import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.DeleteMapping; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PatchMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PutMapping; @@ -133,8 +133,7 @@ public ResponseEntity signUp(@RequestBody @NotNull MemberDTO mem } /** - * 회원 로그인을 진행한다. - * Login 요청시 id, password가 NULL일 경우 NullPointerException을 throw한다. + * 회원 로그인을 진행한다. Login 요청시 id, password가 NULL일 경우 NullPointerException을 throw한다. */ @PostMapping("login") public ResponseEntity login(@RequestBody @NonNull MemberLoginRequest loginRequest, @@ -170,10 +169,10 @@ public ResponseEntity login(@RequestBody @NonNull MemberLoginRequ /** * 회원 로그아웃 메서드. + * * @author jun * @param session 현제 접속한 세션 - * @return 로그인 하지 않았을 시 401코드를 반환하고 result:NO_LOGIN 반환 - * 로그아웃 성공시 200 코드를 반환하고 result:SUCCESS 반환 + * @return 로그인 하지 않았을 시 401코드를 반환하고 result:NO_LOGIN 반환 로그아웃 성공시 200 코드를 반환하고 result:SUCCESS 반환 */ @GetMapping("logout") public ResponseEntity logout(HttpSession session) { @@ -184,7 +183,7 @@ public ResponseEntity logout(HttpSession session) { } else { SessionUtil.logoutMember(session); } - + return new ResponseEntity(LogoutResponse.SUCCESS, HttpStatus.OK); @@ -196,7 +195,7 @@ public ResponseEntity logout(HttpSession session) { * @param session 현재 로그인한 사용자의 세션 * @return */ - @PutMapping("password") + @PatchMapping("password") public ResponseEntity updateMemberInfo(HttpSession session, @RequestBody @NotNull UpdateMemberPasswordRequest passwordRequest) { String password = passwordRequest.getPassword(); @@ -224,16 +223,10 @@ public ResponseEntity updateMemberInfo(HttpSession new ResponseEntity(updateResponse, HttpStatus.BAD_REQUEST); } else { // 성공시 - OperationResult dmlResponse = memberService.updateMemberPassword(id, newPassword); - if (dmlResponse == OperationResult.SUCCESS) { - updateResponse = UpdateMemberPasswordResponse.SUCCESS; - responseEntity = - new ResponseEntity(updateResponse, HttpStatus.OK); - } else { - // 정상적인 상황에서는 발생하지 않는 에러 - log.error("Member Password Update - ERROR!"); - throw new RuntimeException("Password update ERROR"); - } + memberService.updateMemberPassword(id, newPassword); + updateResponse = UpdateMemberPasswordResponse.SUCCESS; + responseEntity = + new ResponseEntity(updateResponse, HttpStatus.OK); } return responseEntity; @@ -256,17 +249,13 @@ public ResponseEntity deleteMemberInfo(HttpSession session responseEntity = new ResponseEntity(deleteResponse, HttpStatus.UNAUTHORIZED); } else { - OperationResult dmlResponse = memberService.deleteMember(id); - if (dmlResponse == OperationResult.SUCCESS) { - deleteResponse = DeleteMemberResponse.SUCCESS; - // 회원 탈퇴시 로그아웃 시켜야 하기 때문에 세션 정보를 날린다 - session.invalidate(); - responseEntity = new ResponseEntity(deleteResponse, HttpStatus.OK); - } else { - // 정상적인 상황에서는 발생하지 않는 에러 - log.error("Member Delete ERROR! \n" + responseEntity); - throw new RuntimeException("Member Delete ERROR! " + responseEntity); - } + memberService.deleteMember(id); + deleteResponse = DeleteMemberResponse.SUCCESS; + + // 회원 탈퇴시 로그아웃 시켜야 하기 때문에 세션 정보를 날린다 + SessionUtil.logoutAll(session); + responseEntity = new ResponseEntity(deleteResponse, HttpStatus.OK); + } return responseEntity; } @@ -277,14 +266,14 @@ public ResponseEntity deleteMemberInfo(HttpSession session * @param memberInfo 회원 주소 정보 * @param session 현재 로그인한 고객의 세션 */ - @PutMapping("address") + @PatchMapping("address") public ResponseEntity updateMemberAddress( @RequestBody @NotNull UpdateMemberAddressRequest memberInfo, HttpSession session) { ResponseEntity responseEntity = null; String address = memberInfo.getAddress(); String addressDetail = memberInfo.getAddressDetail(); String id = SessionUtil.getLoginMemberId(session); - + if (address == null || addressDetail == null) { // 요청한 주소가 null일 때 if (address == null) { @@ -299,22 +288,10 @@ public ResponseEntity updateMemberAddress( responseEntity = new ResponseEntity( UpdateMemberAddressResponse.NO_LOGIN, HttpStatus.UNAUTHORIZED); } else { - OperationResult dmlResponse = - memberService.updateMemberAddress(id, address, addressDetail); - if (dmlResponse == OperationResult.SUCCESS) { - // 성공시 - responseEntity = new ResponseEntity( - UpdateMemberAddressResponse.SUCCESS, HttpStatus.OK); - } else if (dmlResponse == OperationResult.NONE_CHANGED) { - // 주소 변경이 되지 않았을 때 - log.error("Member Address Update ERROR " + dmlResponse); - throw new RuntimeException("Member Address Update ERROR"); - } else { - // 너무 많은 주소가 변경되었을 때. 정상적인 상황에서는 발생하지 않는다. - log.error("Member Address Update ERROR " + dmlResponse); - throw new RuntimeException("Member Address Update ERROR"); - } - + // 모든 조건을 충족할 때 + memberService.updateMemberAddress(id, address, addressDetail); + responseEntity = new ResponseEntity( + UpdateMemberAddressResponse.SUCCESS, HttpStatus.OK); } return responseEntity; @@ -480,7 +457,7 @@ private static class MemberLoginRequest { @Setter @Getter - private class UpdateMemberAddressRequest { + private static class UpdateMemberAddressRequest { @NonNull private String address; @NonNull diff --git a/src/main/java/com/delfood/controller/OwnerController.java b/src/main/java/com/delfood/controller/OwnerController.java index c419d68..32baaff 100644 --- a/src/main/java/com/delfood/controller/OwnerController.java +++ b/src/main/java/com/delfood/controller/OwnerController.java @@ -2,7 +2,6 @@ import com.delfood.dto.OwnerDTO; import com.delfood.dto.OwnerDTO.Status; -import com.delfood.mapper.OperationResult; import com.delfood.service.OwnerService; import com.delfood.utils.SessionUtil; import javax.servlet.http.HttpSession; @@ -176,14 +175,9 @@ public ResponseEntity updateOwnerInfo( UpdateOwnerResponse.EMPTY_CONTENT, HttpStatus.BAD_REQUEST); } - OperationResult dmlOperationError = ownerService.updateOwnerMailAndTel(id, mail, tel); - if (dmlOperationError == OperationResult.SUCCESS) { - return new ResponseEntity( - UpdateOwnerResponse.SUCCESS, HttpStatus.OK); - } else { - log.error("Member mail and tel update ERROR : {}", updateRequest); - throw new RuntimeException("Member mail and tel update ERROR"); - } + ownerService.updateOwnerMailAndTel(id, mail, tel); + return new ResponseEntity( + UpdateOwnerResponse.SUCCESS, HttpStatus.OK); } /** @@ -216,16 +210,9 @@ public ResponseEntity updatePassword( responseEntity = new ResponseEntity( UpdateOwnerResponse.PASSWORD_DUPLICATED, HttpStatus.CONFLICT); } else { - OperationResult dmlOperationError = ownerService.updateOwnerPassword(id, newPassword); - - if (OperationResult.SUCCESS.equals(dmlOperationError)) { - responseEntity = new ResponseEntity( - UpdateOwnerResponse.SUCCESS, HttpStatus.OK); - } else { - log.error("Password Update Error {}", passwordResquest); - throw new RuntimeException("Password Update Error"); - } - + ownerService.updateOwnerPassword(id, newPassword); + responseEntity = new ResponseEntity( + UpdateOwnerResponse.SUCCESS, HttpStatus.OK); } return responseEntity; } diff --git a/src/main/java/com/delfood/controller/ShopController.java b/src/main/java/com/delfood/controller/ShopController.java index 50021d9..1b29939 100644 --- a/src/main/java/com/delfood/controller/ShopController.java +++ b/src/main/java/com/delfood/controller/ShopController.java @@ -77,7 +77,7 @@ public ResponseEntity myShops(MyShopsRequest myShopsRequest, return new ResponseEntity(MyShopsResponse.NO_LOGIN, HttpStatus.UNAUTHORIZED); } - List myShops = shopService.getMyShops(id, myShopsRequest.getPage()); + List myShops = shopService.getMyShops(id, myShopsRequest.getLastId()); long myShopCount = shopService.getMyShopCount(id); return new ResponseEntity(MyShopsResponse.success(myShops, myShopCount), HttpStatus.OK); @@ -129,7 +129,7 @@ public static MyShopsResponse success(List myShops, Long shopCount) { @Setter private static class MyShopsRequest { @Nullable - private Long page; + private Long lastId; } } diff --git a/src/main/java/com/delfood/dto/OwnerDTO.java b/src/main/java/com/delfood/dto/OwnerDTO.java index d4f2473..b6d4837 100644 --- a/src/main/java/com/delfood/dto/OwnerDTO.java +++ b/src/main/java/com/delfood/dto/OwnerDTO.java @@ -32,7 +32,7 @@ public enum Status { private LocalDateTime updatedAt; private Status status; /** - * 회원가입 전 null 정보 체크 메서드 + * 회원가입 전 null 정보 체크 메서드. * @author jun * @param ownerInfo nullCheck할 사장님 정보 * @return null이 존재할 시 true diff --git a/src/main/java/com/delfood/mapper/OperationResult.java b/src/main/java/com/delfood/mapper/OperationResult.java deleted file mode 100644 index 4bc10ed..0000000 --- a/src/main/java/com/delfood/mapper/OperationResult.java +++ /dev/null @@ -1,6 +0,0 @@ -package com.delfood.mapper; - -// SUCCESS 빼고 에러발생시 아래 내용을 포함하여 throw Exception -public enum OperationResult { - SUCCESS, NONE_CHANGED, TOO_MANY_CHANGED, EMPTY_RESULT -} diff --git a/src/main/java/com/delfood/mapper/ShopMapper.java b/src/main/java/com/delfood/mapper/ShopMapper.java index 1e400a4..fc4e84f 100644 --- a/src/main/java/com/delfood/mapper/ShopMapper.java +++ b/src/main/java/com/delfood/mapper/ShopMapper.java @@ -50,10 +50,10 @@ public interface ShopMapper { * 사장 id로 가지고 있는 매장을 조회한다.
* @author jun * @param ownerId 매장을 가진 사장의 id - * @param page 페이지 + * @param lastId 페이지 * @return */ - public List findByOwnerId(String ownerId, Long page); + public List findByOwnerId(String ownerId, Long lastId); /** * 사장 id로 가지고 있는 매장의 개수를 조회한다. diff --git a/src/main/java/com/delfood/service/MemberService.java b/src/main/java/com/delfood/service/MemberService.java index c5b729e..6c019b8 100644 --- a/src/main/java/com/delfood/service/MemberService.java +++ b/src/main/java/com/delfood/service/MemberService.java @@ -1,13 +1,15 @@ package com.delfood.service; import com.delfood.dto.MemberDTO; -import com.delfood.mapper.OperationResult; import com.delfood.mapper.MemberMapper; import com.delfood.utils.SHA256Util; +import lombok.extern.log4j.Log4j2; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; @Service +@Log4j2 public class MemberService { @Autowired private MemberMapper memberMapper; @@ -17,8 +19,7 @@ public MemberDTO getMemberInfo(String memberId) { } /** - * - 고객 회원가입 메서드 - * 비밀번호를 암호화하여 세팅한다. MyBatis에서 insert return값은 성공시 1이 리턴된다. return값은 검사하여 null값이면 + * - 고객 회원가입 메서드 비밀번호를 암호화하여 세팅한다. MyBatis에서 insert return값은 성공시 1이 리턴된다. return값은 검사하여 null값이면 * true, null이 아닐시 insert에 실패한 것이니 false를 반환한다 * * @param memberInfo 저장할 회원의 정보 @@ -28,13 +29,15 @@ public void insertMember(MemberDTO memberInfo) { int insertCount = memberMapper.insertMember(memberInfo); if (insertCount != 1) { + log.error("insertMember ERROR! {}", memberInfo); throw new RuntimeException( "insertMember ERROR! 회원가입 메서드를 확인해주세요\n" + "Params : " + memberInfo); } } /** - * 고객 로그인 메서드 + * 고객 로그인 메서드. + * * @param id 고객 아이디 * @param password 고객 비밀번호 * @return @@ -62,33 +65,29 @@ public boolean isDuplicatedId(String id) { * @param password 변경할 비밀번호 * @return */ - public OperationResult updateMemberPassword(String id, String password) { + @Transactional(rollbackFor = RuntimeException.class) + public void updateMemberPassword(String id, String password) { String cryptoPassword = SHA256Util.encryptSHA256(password); int result = memberMapper.updateMemberPassword(id, cryptoPassword); if (result == 1) { - return OperationResult.SUCCESS; // 원하는 1개의 데이터만 수정 - } else if (result == 0) { - return OperationResult.NONE_CHANGED; // 데이터가 수정되지 않음. WHERE 조건 확인 필요 - } else { - return OperationResult.TOO_MANY_CHANGED; // 데이터가 너무 많이 바뀜. WHERE 조건 확인 필요. + log.error("update Member ERROR! id : {}, pw : {}", id, password); + throw new RuntimeException("update Member Password ERROR!"); } } /** - * 회원 status를 'DELETED'로 변경한다 + * 회원 status를 'DELETED'로 변경한다. * * @param id 탈퇴할 회원의 아이디 * @return */ - public OperationResult deleteMember(String id) { + @Transactional(rollbackFor = RuntimeException.class) + public void deleteMember(String id) { int result = memberMapper.deleteMember(id); - if (result == 1) { - return OperationResult.SUCCESS; // 원하는 1개의 데이터만 수정 - } else if (result == 0) { - return OperationResult.NONE_CHANGED; // 데이터가 수정되지 않음. WHERE 조건 확인 필요 - } else { - return OperationResult.TOO_MANY_CHANGED; // 데이터가 너무 많이 바뀜. WHERE 조건 확인 필요. + if (result != 1) { + log.error("delete Member ERROR! id : {}" + id); + throw new RuntimeException("delete Member ERROR!"); } } @@ -100,15 +99,13 @@ public OperationResult deleteMember(String id) { * @param addressDetail 변경할 상세 주소 * @return */ - public OperationResult updateMemberAddress(String id, String address, String addressDetail) { + @Transactional(rollbackFor = RuntimeException.class) + public void updateMemberAddress(String id, String address, String addressDetail) { int result = memberMapper.updateMemberAddress(id, address, addressDetail); - if (result == 1) { - return OperationResult.SUCCESS; // 원하는 1개의 데이터만 수정 - } else if (result == 0) { - return OperationResult.NONE_CHANGED; // 데이터가 수정되지 않음. WHERE 조건 확인 필요 - } else { - return OperationResult.TOO_MANY_CHANGED; // 데이터가 너무 많이 바뀜. WHERE 조건 확인 필요. 정상적인 상황에서는 발생하지 - // 않음. + if (result != 1) { + log.error("update Member address ERROR! id : {}, address : {}, addressDetail : {}", id, + address, addressDetail); + throw new RuntimeException("update Member address ERROR!"); } } diff --git a/src/main/java/com/delfood/service/OwnerService.java b/src/main/java/com/delfood/service/OwnerService.java index d7784b8..0ea8a2c 100644 --- a/src/main/java/com/delfood/service/OwnerService.java +++ b/src/main/java/com/delfood/service/OwnerService.java @@ -1,7 +1,6 @@ package com.delfood.service; import com.delfood.dto.OwnerDTO; -import com.delfood.mapper.OperationResult; import com.delfood.mapper.OwnerMapper; import com.delfood.utils.SHA256Util; import lombok.extern.log4j.Log4j2; @@ -17,7 +16,7 @@ public class OwnerService { OwnerMapper ownerMapper; /** - * 사장님 회원 가입 메서드 + * 사장님 회원 가입 메서드. * * @author jun * @param ownerInfo 가입할 사장님의 정보 @@ -33,7 +32,7 @@ public void signUp(OwnerDTO ownerInfo) { } /** - * 사장님 id 중복 체크 메서드 + * 사장님 id 중복 체크 메서드. * * @author jun * @param id 중복 체크할 id @@ -76,14 +75,11 @@ public OwnerDTO getOwner(String id) { * @return */ @Transactional(rollbackFor = RuntimeException.class) - public OperationResult updateOwnerMailAndTel(String id, String mail, String tel) { + public void updateOwnerMailAndTel(String id, String mail, String tel) { int result = ownerMapper.updateMailAndTel(id, mail, tel); - if (result == 1) { - return OperationResult.SUCCESS; // 정상 수행 - } else if (result == 0) { - return OperationResult.NONE_CHANGED; // 데이터가 변경되지 않음 - } else { - throw new RuntimeException("password update error : " + OperationResult.TOO_MANY_CHANGED); + if (result != 1) { + log.error("updateOwnerMailAndTel ERROR! id : {}, mail : {}, tel : {}", id, mail, tel); + throw new RuntimeException("password update error"); } } @@ -95,15 +91,12 @@ public OperationResult updateOwnerMailAndTel(String id, String mail, String tel) * @return */ @Transactional(rollbackFor = RuntimeException.class) // runtimeException이 발생하면 rollback을 수행한다. - public OperationResult updateOwnerPassword(String id, String password) { + public void updateOwnerPassword(String id, String password) { String cryptoPassword = SHA256Util.encryptSHA256(password); int result = ownerMapper.updatePassword(id, cryptoPassword); - if (result == 1) { - return OperationResult.SUCCESS; - } else if (result == 0) { - return OperationResult.NONE_CHANGED; - } else { - throw new RuntimeException("password update error : " + OperationResult.TOO_MANY_CHANGED); + if (result != 1) { + log.error("updateOwnerPassword ERROR! id : {}, password : {}", id, password); + throw new RuntimeException("password update error"); } } diff --git a/src/main/java/com/delfood/service/ShopService.java b/src/main/java/com/delfood/service/ShopService.java index 0948e84..88aeeb0 100644 --- a/src/main/java/com/delfood/service/ShopService.java +++ b/src/main/java/com/delfood/service/ShopService.java @@ -1,12 +1,12 @@ package com.delfood.service; import com.delfood.dto.ShopDTO; -import com.delfood.mapper.OperationResult; import com.delfood.mapper.ShopMapper; import lombok.extern.log4j.Log4j2; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; @Service @Log4j2 @@ -20,6 +20,7 @@ public class ShopService { * @param shopInfo 삽입할 매장의 데이터 * @return */ + @Transactional(rollbackFor = RuntimeException.class) public void addShop(ShopDTO shopInfo) { int insertShop = shopMapper.insertShop(shopInfo); if (insertShop != 1) { @@ -30,20 +31,20 @@ public void addShop(ShopDTO shopInfo) { /** * 사장님 가게들의 정보를 불러오는 메서드. - * @param id 사장님 id - * @param page 페이지 정보 + * @param ownerId 사장님 id + * @param lastId 마지막으로 조회한 매장 id * @return */ - public List getMyShops(String id, Long page) { - return shopMapper.findByOwnerId(id, page); + public List getMyShops(String ownerId, Long lastId) { + return shopMapper.findByOwnerId(ownerId, lastId); } /** * 사장님이 가진 총 가게 개수를 불러오는 메서드. - * @param id 사장님 아이디 + * @param ownerId 사장님 아이디 * @return */ - public long getMyShopCount(String id) { - return shopMapper.countByOwnerId(id); + public long getMyShopCount(String ownerId) { + return shopMapper.countByOwnerId(ownerId); } } diff --git a/src/main/resources/mybatis/mapper/shop.xml b/src/main/resources/mybatis/mapper/shop.xml index d76ed1a..f4ca452 100644 --- a/src/main/resources/mybatis/mapper/shop.xml +++ b/src/main/resources/mybatis/mapper/shop.xml @@ -61,8 +61,8 @@