diff --git "a/.github/ISSUE_TEMPLATE/\353\260\261\354\227\224\353\223\234-\354\235\264\354\212\210.md" "b/.github/ISSUE_TEMPLATE/\353\260\261\354\227\224\353\223\234-\354\235\264\354\212\210.md" deleted file mode 100644 index f728915f..00000000 --- "a/.github/ISSUE_TEMPLATE/\353\260\261\354\227\224\353\223\234-\354\235\264\354\212\210.md" +++ /dev/null @@ -1,14 +0,0 @@ ---- -name: 백엔드 이슈 -about: 백엔드와 관련된 이슈 -title: "[백엔드] " -labels: Backend -assignees: '' - ---- - -# 이슈 내용 - - -# 작업 목록 -- [ ] diff --git a/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/store/controller/StoreController.java b/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/store/controller/StoreController.java index 2d3a6aae..d59795a9 100644 --- a/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/store/controller/StoreController.java +++ b/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/store/controller/StoreController.java @@ -54,12 +54,12 @@ public ResponseEntity createStore(@Valid @RequestBody StoreCreateRequest requ @GetMapping("/{storeId}") @Operation(summary = "주점 조회", description = "주점 ID로 주점을 조회합니다.") @ApiResponse(responseCode = "200", description = "주점 조회 성공") - public ResponseEntity getStoreById(@PathVariable Long storeId,@AuthenticationPrincipal MemberDetails memberDetails) { + public ResponseEntity getStoreById(@PathVariable Long storeId, @AuthenticationPrincipal MemberDetails memberDetails) { return ResponseEntity .status(HttpStatus.OK) .body( ApiUtils.success( - storeService.getStoreByStoreId(storeId,memberDetails) + storeService.getStoreByStoreId(storeId, memberDetails) ) ); } @@ -84,7 +84,7 @@ public ResponseEntity updateStore( @DeleteMapping("/{storeId}") @Operation(summary = "주점 삭제", description = "주점 ID로 주점을 삭제합니다.") @ApiResponse(responseCode = "200", description = "주점 삭제 성공") - public ResponseEntity deleteStore(@PathVariable Long storeId,@AuthenticationPrincipal MemberDetails memberDetails) { + public ResponseEntity deleteStore(@PathVariable Long storeId, @AuthenticationPrincipal MemberDetails memberDetails) { return ResponseEntity .ok() .body( diff --git a/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/store/service/StoreServiceImpl.java b/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/store/service/StoreServiceImpl.java index 0dec4fd8..7944746c 100644 --- a/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/store/service/StoreServiceImpl.java +++ b/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/store/service/StoreServiceImpl.java @@ -2,6 +2,7 @@ import java.util.List; +import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; diff --git a/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/storePayment/controller/StorePaymentController.java b/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/storePayment/controller/StorePaymentController.java new file mode 100644 index 00000000..df8bc44a --- /dev/null +++ b/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/storePayment/controller/StorePaymentController.java @@ -0,0 +1,76 @@ +package com.nowait.applicationadmin.storePayment.controller; + +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.security.core.annotation.AuthenticationPrincipal; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PatchMapping; +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.nowait.applicationadmin.storePayment.dto.StorePaymentCreateRequest; +import com.nowait.applicationadmin.storePayment.dto.StorePaymentCreateResponse; +import com.nowait.applicationadmin.storePayment.dto.StorePaymentUpdateRequest; +import com.nowait.applicationadmin.storePayment.service.StorePaymentService; +import com.nowait.common.api.ApiUtils; +import com.nowait.domaincorerdb.user.entity.MemberDetails; + +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +@Tag(name = "Store Payment API", description = "주점 결제 정보 API") +@RestController +@RequestMapping("admin/store-payments") +@RequiredArgsConstructor +@Slf4j +public class StorePaymentController { + + private final StorePaymentService storePaymentService; + + @PostMapping("/create") + @Operation(summary = "주점 결제 Url 등록 및 생성", description = "새로운 주점 결제 정보를 생성합니다.") + @ApiResponse(responseCode = "201", description = "주점 결제 정보 생성 성공") + public ResponseEntity createStorePayment(@Valid @RequestBody StorePaymentCreateRequest request, @AuthenticationPrincipal MemberDetails memberDetails) { + StorePaymentCreateResponse response = storePaymentService.createStorePayment(request, memberDetails); + + return ResponseEntity + .status(HttpStatus.CREATED) + .body( + ApiUtils.success( + response + ) + ); + } + + @GetMapping() + @Operation(summary = "주점 결제 정보 조회", description = "인증된 사용자의 주점 결제 정보를 조회합니다.") + @ApiResponse(responseCode = "200", description = "주점 결제 정보 조회 성공") + public ResponseEntity getStorePaymentByStoreId(@AuthenticationPrincipal MemberDetails memberDetails) { + return ResponseEntity + .status(HttpStatus.OK) + .body( + ApiUtils.success( + storePaymentService.getStorePaymentByStoreId(memberDetails) + ) + ); + } + + @PatchMapping("/update") + @Operation(summary = "주점 결제 정보 수정", description = "주점 결제 정보를 수정합니다.") + @ApiResponse(responseCode = "200", description = "주점 결제 정보 수정 성공") + public ResponseEntity updateStorePayment(@RequestBody StorePaymentUpdateRequest request, @AuthenticationPrincipal MemberDetails memberDetails) { + return ResponseEntity + .status(HttpStatus.OK) + .body( + ApiUtils.success( + storePaymentService.updateStorePayment(request, memberDetails) + ) + ); + } +} diff --git a/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/storePayment/dto/StorePaymentCreateRequest.java b/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/storePayment/dto/StorePaymentCreateRequest.java new file mode 100644 index 00000000..4a292ce3 --- /dev/null +++ b/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/storePayment/dto/StorePaymentCreateRequest.java @@ -0,0 +1,26 @@ +package com.nowait.applicationadmin.storePayment.dto; + +import com.nowait.domaincorerdb.storepayment.entity.StorePayment; + +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@NoArgsConstructor +@AllArgsConstructor +public class StorePaymentCreateRequest { + + private String tossUrl; + private String kakaoPayUrl; + private String naverPayUrl; + + public StorePayment toEntity(Long storeId) { + return StorePayment.builder() + .storeId(storeId) + .tossUrl(tossUrl) + .kakaoPayUrl(kakaoPayUrl) + .naverPayUrl(naverPayUrl) + .build(); + } +} diff --git a/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/storePayment/dto/StorePaymentCreateResponse.java b/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/storePayment/dto/StorePaymentCreateResponse.java new file mode 100644 index 00000000..250a6b1f --- /dev/null +++ b/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/storePayment/dto/StorePaymentCreateResponse.java @@ -0,0 +1,33 @@ +package com.nowait.applicationadmin.storePayment.dto; + +import java.time.LocalDateTime; + +import com.nowait.domaincorerdb.storepayment.entity.StorePayment; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; + +@Getter +@AllArgsConstructor +@Builder +public class StorePaymentCreateResponse { + + private Long paymentMethodId; + private Long storeId; + private String tossUrl; + private String kakaoPayUrl; + private String naverPayUrl; + private LocalDateTime createdAt; + + public static StorePaymentCreateResponse fromEntity(StorePayment storePayment) { + return StorePaymentCreateResponse.builder() + .paymentMethodId(storePayment.getPaymentMethodId()) + .storeId(storePayment.getStoreId()) + .tossUrl(storePayment.getTossUrl()) + .kakaoPayUrl(storePayment.getKakaoPayUrl()) + .naverPayUrl(storePayment.getNaverPayUrl()) + .createdAt(storePayment.getCreatedAt()) + .build(); + } +} diff --git a/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/storePayment/dto/StorePaymentReadDto.java b/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/storePayment/dto/StorePaymentReadDto.java new file mode 100644 index 00000000..329d799a --- /dev/null +++ b/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/storePayment/dto/StorePaymentReadDto.java @@ -0,0 +1,32 @@ +package com.nowait.applicationadmin.storePayment.dto; + +import java.time.LocalDateTime; + +import com.nowait.domaincorerdb.storepayment.entity.StorePayment; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; + +@Getter +@AllArgsConstructor +@Builder +public class StorePaymentReadDto { + private Long paymentMethodId; + private Long storeId; + private String tossUrl; + private String kakaoPayUrl; + private String naverPayUrl; + private LocalDateTime createdAt; + + public static StorePaymentReadDto fromEntity(StorePayment storePayment) { + return StorePaymentReadDto.builder() + .paymentMethodId(storePayment.getPaymentMethodId()) + .storeId(storePayment.getStoreId()) + .tossUrl(storePayment.getTossUrl()) + .kakaoPayUrl(storePayment.getKakaoPayUrl()) + .naverPayUrl(storePayment.getNaverPayUrl()) + .createdAt(storePayment.getCreatedAt()) + .build(); + } +} diff --git a/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/storePayment/dto/StorePaymentUpdateRequest.java b/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/storePayment/dto/StorePaymentUpdateRequest.java new file mode 100644 index 00000000..71f4c979 --- /dev/null +++ b/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/storePayment/dto/StorePaymentUpdateRequest.java @@ -0,0 +1,16 @@ +package com.nowait.applicationadmin.storePayment.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; + +@Getter +@AllArgsConstructor +@NoArgsConstructor +@Builder +public class StorePaymentUpdateRequest { + private String tossUrl; + private String kakaoPayUrl; + private String naverPayUrl; +} diff --git a/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/storePayment/service/StorePaymentService.java b/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/storePayment/service/StorePaymentService.java new file mode 100644 index 00000000..b0324dab --- /dev/null +++ b/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/storePayment/service/StorePaymentService.java @@ -0,0 +1,14 @@ +package com.nowait.applicationadmin.storePayment.service; + +import com.nowait.applicationadmin.storePayment.dto.StorePaymentCreateRequest; +import com.nowait.applicationadmin.storePayment.dto.StorePaymentCreateResponse; +import com.nowait.applicationadmin.storePayment.dto.StorePaymentReadDto; +import com.nowait.applicationadmin.storePayment.dto.StorePaymentUpdateRequest; +import com.nowait.domaincorerdb.user.entity.MemberDetails; + +public interface StorePaymentService { + + StorePaymentCreateResponse createStorePayment(StorePaymentCreateRequest request, MemberDetails memberDetails); + StorePaymentReadDto getStorePaymentByStoreId(MemberDetails memberDetails); + StorePaymentReadDto updateStorePayment(StorePaymentUpdateRequest request, MemberDetails memberDetails); +} diff --git a/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/storePayment/service/StorePaymentServiceImpl.java b/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/storePayment/service/StorePaymentServiceImpl.java new file mode 100644 index 00000000..5eb6fbca --- /dev/null +++ b/nowait-app-admin-api/src/main/java/com/nowait/applicationadmin/storePayment/service/StorePaymentServiceImpl.java @@ -0,0 +1,90 @@ +package com.nowait.applicationadmin.storePayment.service; + +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import com.nowait.applicationadmin.storePayment.dto.StorePaymentCreateRequest; +import com.nowait.applicationadmin.storePayment.dto.StorePaymentCreateResponse; +import com.nowait.applicationadmin.storePayment.dto.StorePaymentReadDto; +import com.nowait.applicationadmin.storePayment.dto.StorePaymentUpdateRequest; +import com.nowait.common.enums.Role; +import com.nowait.domaincorerdb.storepayment.entity.StorePayment; +import com.nowait.domaincorerdb.storepayment.exception.StorePaymentAlreadyExistsException; +import com.nowait.domaincorerdb.storepayment.exception.StorePaymentCreationUnauthorizedException; +import com.nowait.domaincorerdb.storepayment.exception.StorePaymentNotFoundException; +import com.nowait.domaincorerdb.storepayment.exception.StorePaymentParamEmptyException; +import com.nowait.domaincorerdb.storepayment.exception.StorePaymentUpdateUnauthorizedException; +import com.nowait.domaincorerdb.storepayment.exception.StorePaymentViewUnauthorizedException; +import com.nowait.domaincorerdb.storepayment.repository.StorePaymentRepository; +import com.nowait.domaincorerdb.user.entity.MemberDetails; +import com.nowait.domaincorerdb.user.entity.User; +import com.nowait.domaincorerdb.user.exception.UserNotFoundException; +import com.nowait.domaincorerdb.user.repository.UserRepository; + +import lombok.RequiredArgsConstructor; + +@Service +@RequiredArgsConstructor +public class StorePaymentServiceImpl implements StorePaymentService { + + private final StorePaymentRepository storePaymentRepository; + private final UserRepository userRepository; + + @Override + @Transactional + public StorePaymentCreateResponse createStorePayment(StorePaymentCreateRequest request, MemberDetails memberDetails) { + if (request == null) throw new StorePaymentParamEmptyException(); + + User user = userRepository.findById(memberDetails.getId()).orElseThrow(UserNotFoundException::new); + Long storeId = user.getStoreId(); + if (storePaymentRepository.findByStoreId(storeId).isPresent()) { + throw new StorePaymentAlreadyExistsException(); + } + if (!Role.SUPER_ADMIN.equals(user.getRole()) && !user.getStoreId().equals(storeId)) { + throw new StorePaymentCreationUnauthorizedException(); + } + StorePayment toSave = request.toEntity(storeId); + StorePayment saved = storePaymentRepository.save(toSave); + + return StorePaymentCreateResponse.fromEntity(saved); + } + + @Override + @Transactional(readOnly = true) + public StorePaymentReadDto getStorePaymentByStoreId(MemberDetails memberDetails) { + if (memberDetails == null) throw new StorePaymentParamEmptyException(); + + User user = userRepository.findById(memberDetails.getId()).orElseThrow(UserNotFoundException::new); + Long storeId = user.getStoreId(); + if (!Role.SUPER_ADMIN.equals(user.getRole()) && !user.getStoreId().equals(storeId)) { + throw new StorePaymentViewUnauthorizedException(); + } + StorePayment storePayment = storePaymentRepository.findByStoreId(storeId) + .orElseThrow(StorePaymentNotFoundException::new); + + return StorePaymentReadDto.fromEntity(storePayment); + } + + @Override + @Transactional + public StorePaymentReadDto updateStorePayment(StorePaymentUpdateRequest request, MemberDetails memberDetails) { + if (request == null) throw new StorePaymentParamEmptyException(); + + User user = userRepository.findById(memberDetails.getId()).orElseThrow(UserNotFoundException::new); + Long storeId = user.getStoreId(); + if (!Role.SUPER_ADMIN.equals(user.getRole()) && !user.getStoreId().equals(storeId)) { + throw new StorePaymentUpdateUnauthorizedException(); + } + StorePayment storePayment = storePaymentRepository.findByStoreId(storeId) + .orElseThrow(StorePaymentNotFoundException::new); + + storePayment.updatePaymentMethodUrl( + request.getTossUrl(), + request.getKakaoPayUrl(), + request.getNaverPayUrl() + ); + storePaymentRepository.save(storePayment); + + return StorePaymentReadDto.fromEntity(storePayment); + } +} diff --git a/nowait-app-user-api/src/main/java/com/nowait/applicationuser/storepayment/controller/StorePaymentController.java b/nowait-app-user-api/src/main/java/com/nowait/applicationuser/storepayment/controller/StorePaymentController.java new file mode 100644 index 00000000..c784ac1f --- /dev/null +++ b/nowait-app-user-api/src/main/java/com/nowait/applicationuser/storepayment/controller/StorePaymentController.java @@ -0,0 +1,41 @@ +package com.nowait.applicationuser.storepayment.controller; + +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +import com.nowait.applicationuser.storepayment.service.StorePaymentService; +import com.nowait.common.api.ApiUtils; + +import io.swagger.v3.oas.annotations.Operation; +import io.swagger.v3.oas.annotations.responses.ApiResponse; +import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.validation.Valid; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; + +@Tag(name = "Store Payment API", description = "주점 결제 정보 API") +@RestController +@RequestMapping("v1/store-payments") +@RequiredArgsConstructor +@Slf4j +public class StorePaymentController { + + private final StorePaymentService storePaymentService; + + @GetMapping(("/{storeId}")) + @Operation(summary = "주점 결제 정보 조회", description = "주점 ID로 주점 결제 정보를 조회합니다.") + @ApiResponse(responseCode = "200", description = "주점 결제 정보 조회 성공") + public ResponseEntity getStorePaymentByStoreId(@PathVariable Long storeId) { + return ResponseEntity + .status(HttpStatus.OK) + .body( + ApiUtils.success( + storePaymentService.getStorePaymentByStoreId(storeId) + ) + ); + } +} diff --git a/nowait-app-user-api/src/main/java/com/nowait/applicationuser/storepayment/dto/StorePaymentReadDto.java b/nowait-app-user-api/src/main/java/com/nowait/applicationuser/storepayment/dto/StorePaymentReadDto.java new file mode 100644 index 00000000..e0af8aab --- /dev/null +++ b/nowait-app-user-api/src/main/java/com/nowait/applicationuser/storepayment/dto/StorePaymentReadDto.java @@ -0,0 +1,32 @@ +package com.nowait.applicationuser.storepayment.dto; + +import java.time.LocalDateTime; + +import com.nowait.domaincorerdb.storepayment.entity.StorePayment; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; + +@Getter +@AllArgsConstructor +@Builder +public class StorePaymentReadDto { + private Long paymentMethodId; + private Long storeId; + private String tossUrl; + private String kakaoPayUrl; + private String naverPayUrl; + private LocalDateTime createdAt; + + public static StorePaymentReadDto fromEntity(StorePayment storePayment) { + return StorePaymentReadDto.builder() + .paymentMethodId(storePayment.getPaymentMethodId()) + .storeId(storePayment.getStoreId()) + .tossUrl(storePayment.getTossUrl()) + .kakaoPayUrl(storePayment.getKakaoPayUrl()) + .naverPayUrl(storePayment.getNaverPayUrl()) + .createdAt(storePayment.getCreatedAt()) + .build(); + } +} diff --git a/nowait-app-user-api/src/main/java/com/nowait/applicationuser/storepayment/service/StorePaymentService.java b/nowait-app-user-api/src/main/java/com/nowait/applicationuser/storepayment/service/StorePaymentService.java new file mode 100644 index 00000000..4db20e4b --- /dev/null +++ b/nowait-app-user-api/src/main/java/com/nowait/applicationuser/storepayment/service/StorePaymentService.java @@ -0,0 +1,7 @@ +package com.nowait.applicationuser.storepayment.service; + +import com.nowait.applicationuser.storepayment.dto.StorePaymentReadDto; + +public interface StorePaymentService { + StorePaymentReadDto getStorePaymentByStoreId(Long storeId); +} diff --git a/nowait-app-user-api/src/main/java/com/nowait/applicationuser/storepayment/service/StorePaymentServiceImpl.java b/nowait-app-user-api/src/main/java/com/nowait/applicationuser/storepayment/service/StorePaymentServiceImpl.java new file mode 100644 index 00000000..7df519f6 --- /dev/null +++ b/nowait-app-user-api/src/main/java/com/nowait/applicationuser/storepayment/service/StorePaymentServiceImpl.java @@ -0,0 +1,29 @@ +package com.nowait.applicationuser.storepayment.service; + +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import com.nowait.applicationuser.storepayment.dto.StorePaymentReadDto; +import com.nowait.domaincorerdb.store.exception.StoreNotFoundException; +import com.nowait.domaincorerdb.storepayment.entity.StorePayment; +import com.nowait.domaincorerdb.storepayment.exception.StorePaymentParamEmptyException; +import com.nowait.domaincorerdb.storepayment.repository.StorePaymentRepository; + +import lombok.RequiredArgsConstructor; + +@Service +@RequiredArgsConstructor +public class StorePaymentServiceImpl implements StorePaymentService { + + private final StorePaymentRepository storePaymentRepository; + + @Override + @Transactional(readOnly = true) + public StorePaymentReadDto getStorePaymentByStoreId(Long storeId) { + if (storeId == null) throw new StorePaymentParamEmptyException(); + + StorePayment storePayment = storePaymentRepository.findByStoreId(storeId) + .orElseThrow(StoreNotFoundException::new); + + return StorePaymentReadDto.fromEntity(storePayment); + } +} diff --git a/nowait-common/src/main/java/com/nowait/common/exception/ErrorMessage.java b/nowait-common/src/main/java/com/nowait/common/exception/ErrorMessage.java index 02a107a1..b64c5e37 100644 --- a/nowait-common/src/main/java/com/nowait/common/exception/ErrorMessage.java +++ b/nowait-common/src/main/java/com/nowait/common/exception/ErrorMessage.java @@ -49,6 +49,17 @@ public enum ErrorMessage { STORE_DELETE_UNAUTHORIZED("주점 삭제 권한이 없습니다.(슈퍼계정 or 주점 관리자만 가능)", "store005"), STORE_WAITING_DISABLED("해당 주점은 대기 비활성화된 주점입니다.", "store006"), + // storePayment + + STORE_PAYMENT_PARAMETER_EMPTY("주점 결제 생성 시 파라미터 정보가 없습니다.", "storePayment001"), + STORE_PAYMENT_NOT_FOUND("해당 주점 결제 정보를 찾을 수 없습니다.", "storePayment002"), + STORE_PAYMENT_VIEW_UNAUTHORIZED("주점 결제 정보 보기 권한이 없습니다.(슈퍼계정 or 주점 관리자만 가능)", "storePayment003"), + STORE_PAYMENT_CREATION_UNAUTHORIZED("주점 결제 정보 생성 권한이 없습니다.(슈퍼계정 or 주점 관리자만 가능)", "storePayment004"), + STORE_PAYMENT_UPDATE_UNAUTHORIZED("주점 결제 정보 수정 권한이 없습니다.(슈퍼계정 or 주점 관리자만 가능)", "storePayment004"), + STORE_PAYMENT_DELETE_UNAUTHORIZED("주점 결제 정보 삭제 권한이 없습니다.(슈퍼계정 or 주점 관리자만 가능)", "storePayment005"), + STORE_PAYMENT_ALREADY_EXISTS("이미 존재하는 주점 결제 정보입니다.", "storePayment006"), + + // image IMAGE_FILE_EMPTY("이미지 파일을 업로드 해주세요", "image001"), IMAGE_FILE_NOT_FOUND("이미지 파일을 업로드 해주세요", "image001"), diff --git a/nowait-domain/domain-core-rdb/src/main/java/com/nowait/domaincorerdb/storePayment/entity/StorePayment.java b/nowait-domain/domain-core-rdb/src/main/java/com/nowait/domaincorerdb/storePayment/entity/StorePayment.java new file mode 100644 index 00000000..effb50d8 --- /dev/null +++ b/nowait-domain/domain-core-rdb/src/main/java/com/nowait/domaincorerdb/storePayment/entity/StorePayment.java @@ -0,0 +1,57 @@ +package com.nowait.domaincorerdb.storepayment.entity; + +import java.time.LocalDateTime; + +import com.nowait.domaincorerdb.base.entity.BaseTimeEntity; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.experimental.SuperBuilder; + +@Entity +@Table(name = "store_payments") +@Getter +@NoArgsConstructor(access = AccessLevel.PROTECTED) +@AllArgsConstructor(access = AccessLevel.PRIVATE) +@SuperBuilder +public class StorePayment extends BaseTimeEntity { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long paymentMethodId; + + @Column(name = "store_id", nullable = false) + private Long storeId; + + @Column(name = "toss_url",length = 500) + private String tossUrl; + + @Column(name = "kakao_pay_url", length = 500) + private String kakaoPayUrl; + + @Column(name = "naver_pay_url", length = 500) + private String naverPayUrl; + + public StorePayment(LocalDateTime createdAt, Long paymentMethodId, Long storeId, String tossUrl, String kakaoPayUrl, String naverPayUrl) { + super(createdAt); + this.paymentMethodId = paymentMethodId; + this.storeId = storeId; + this.tossUrl = tossUrl; + this.kakaoPayUrl = kakaoPayUrl; + this.naverPayUrl = naverPayUrl; + } + + public void updatePaymentMethodUrl(String tossUrl, String kakaoPayUrl, String naverPayUrl) { + if (tossUrl != null) this.tossUrl = tossUrl; + if (kakaoPayUrl != null) this.kakaoPayUrl = kakaoPayUrl; + if (naverPayUrl != null) this.naverPayUrl = naverPayUrl; + } +} diff --git a/nowait-domain/domain-core-rdb/src/main/java/com/nowait/domaincorerdb/storePayment/exception/StorePaymentAlreadyExistsException.java b/nowait-domain/domain-core-rdb/src/main/java/com/nowait/domaincorerdb/storePayment/exception/StorePaymentAlreadyExistsException.java new file mode 100644 index 00000000..609ba342 --- /dev/null +++ b/nowait-domain/domain-core-rdb/src/main/java/com/nowait/domaincorerdb/storePayment/exception/StorePaymentAlreadyExistsException.java @@ -0,0 +1,9 @@ +package com.nowait.domaincorerdb.storepayment.exception; + +import com.nowait.common.exception.ErrorMessage; + +public class StorePaymentAlreadyExistsException extends RuntimeException { + public StorePaymentAlreadyExistsException() { + super(ErrorMessage.STORE_PAYMENT_ALREADY_EXISTS.getMessage()); + } +} diff --git a/nowait-domain/domain-core-rdb/src/main/java/com/nowait/domaincorerdb/storePayment/exception/StorePaymentCreationUnauthorizedException.java b/nowait-domain/domain-core-rdb/src/main/java/com/nowait/domaincorerdb/storePayment/exception/StorePaymentCreationUnauthorizedException.java new file mode 100644 index 00000000..ad458a24 --- /dev/null +++ b/nowait-domain/domain-core-rdb/src/main/java/com/nowait/domaincorerdb/storePayment/exception/StorePaymentCreationUnauthorizedException.java @@ -0,0 +1,10 @@ +package com.nowait.domaincorerdb.storepayment.exception; + +import com.nowait.common.exception.ErrorMessage; + +public class StorePaymentCreationUnauthorizedException extends RuntimeException { + + public StorePaymentCreationUnauthorizedException() { + super(ErrorMessage.STORE_PAYMENT_CREATION_UNAUTHORIZED.getMessage()); + } +} diff --git a/nowait-domain/domain-core-rdb/src/main/java/com/nowait/domaincorerdb/storePayment/exception/StorePaymentNotFoundException.java b/nowait-domain/domain-core-rdb/src/main/java/com/nowait/domaincorerdb/storePayment/exception/StorePaymentNotFoundException.java new file mode 100644 index 00000000..af83a4db --- /dev/null +++ b/nowait-domain/domain-core-rdb/src/main/java/com/nowait/domaincorerdb/storePayment/exception/StorePaymentNotFoundException.java @@ -0,0 +1,9 @@ +package com.nowait.domaincorerdb.storepayment.exception; + +import com.nowait.common.exception.ErrorMessage; + +public class StorePaymentNotFoundException extends RuntimeException { + public StorePaymentNotFoundException() { + super(ErrorMessage.STORE_PAYMENT_PARAMETER_EMPTY.getMessage()); + } +} diff --git a/nowait-domain/domain-core-rdb/src/main/java/com/nowait/domaincorerdb/storePayment/exception/StorePaymentParamEmptyException.java b/nowait-domain/domain-core-rdb/src/main/java/com/nowait/domaincorerdb/storePayment/exception/StorePaymentParamEmptyException.java new file mode 100644 index 00000000..83b62dba --- /dev/null +++ b/nowait-domain/domain-core-rdb/src/main/java/com/nowait/domaincorerdb/storePayment/exception/StorePaymentParamEmptyException.java @@ -0,0 +1,9 @@ +package com.nowait.domaincorerdb.storepayment.exception; + +import com.nowait.common.exception.ErrorMessage; + +public class StorePaymentParamEmptyException extends RuntimeException { + public StorePaymentParamEmptyException() { + super(ErrorMessage.STORE_PAYMENT_PARAMETER_EMPTY.getMessage()); + } +} diff --git a/nowait-domain/domain-core-rdb/src/main/java/com/nowait/domaincorerdb/storePayment/exception/StorePaymentUpdateUnauthorizedException.java b/nowait-domain/domain-core-rdb/src/main/java/com/nowait/domaincorerdb/storePayment/exception/StorePaymentUpdateUnauthorizedException.java new file mode 100644 index 00000000..32d1c85a --- /dev/null +++ b/nowait-domain/domain-core-rdb/src/main/java/com/nowait/domaincorerdb/storePayment/exception/StorePaymentUpdateUnauthorizedException.java @@ -0,0 +1,9 @@ +package com.nowait.domaincorerdb.storepayment.exception; + +import com.nowait.common.exception.ErrorMessage; + +public class StorePaymentUpdateUnauthorizedException extends RuntimeException { + public StorePaymentUpdateUnauthorizedException() { + super(ErrorMessage.STORE_PAYMENT_UPDATE_UNAUTHORIZED.getMessage()); + } +} diff --git a/nowait-domain/domain-core-rdb/src/main/java/com/nowait/domaincorerdb/storePayment/exception/StorePaymentViewUnauthorizedException.java b/nowait-domain/domain-core-rdb/src/main/java/com/nowait/domaincorerdb/storePayment/exception/StorePaymentViewUnauthorizedException.java new file mode 100644 index 00000000..cec829ec --- /dev/null +++ b/nowait-domain/domain-core-rdb/src/main/java/com/nowait/domaincorerdb/storePayment/exception/StorePaymentViewUnauthorizedException.java @@ -0,0 +1,9 @@ +package com.nowait.domaincorerdb.storepayment.exception; + +import com.nowait.common.exception.ErrorMessage; + +public class StorePaymentViewUnauthorizedException extends RuntimeException { + public StorePaymentViewUnauthorizedException() { + super(ErrorMessage.STORE_PAYMENT_VIEW_UNAUTHORIZED.getMessage()); + } +} diff --git a/nowait-domain/domain-core-rdb/src/main/java/com/nowait/domaincorerdb/storePayment/repository/StorePaymentRepository.java b/nowait-domain/domain-core-rdb/src/main/java/com/nowait/domaincorerdb/storePayment/repository/StorePaymentRepository.java new file mode 100644 index 00000000..3a92bc09 --- /dev/null +++ b/nowait-domain/domain-core-rdb/src/main/java/com/nowait/domaincorerdb/storePayment/repository/StorePaymentRepository.java @@ -0,0 +1,13 @@ +package com.nowait.domaincorerdb.storepayment.repository; + +import java.util.Optional; + +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import com.nowait.domaincorerdb.storepayment.entity.StorePayment; + +@Repository +public interface StorePaymentRepository extends JpaRepository { + Optional findByStoreId(Long storeId); +}