Skip to content
This repository has been archived by the owner on Aug 13, 2022. It is now read-only.

[#25] 결제관련 entity 생성 및 설계 #38

Open
wants to merge 7 commits into
base: feature/13
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 0 additions & 2 deletions src/main/java/me/jjeda/mall/accounts/dto/AccountDto.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,10 +15,8 @@
import java.util.Set;

//@JsonIgnoreProperties({"email", "password", "phone", "address", "accountRole"})
@AllArgsConstructor
@Getter
@Builder
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class AccountDto {

private Long id;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package me.jjeda.mall.orders.controller;

import lombok.RequiredArgsConstructor;
import me.jjeda.mall.orders.domain.PaymentFactory;
import me.jjeda.mall.orders.domain.PaymentType;
import me.jjeda.mall.orders.dto.PaymentDto;
import me.jjeda.mall.orders.service.PaymentService;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.PathVariable;
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.RequestParam;

@Controller
@RequestMapping("/api/orders/payment")
@RequiredArgsConstructor
public class PaymentController {

private final PaymentFactory paymentFactory;

@PostMapping(value = "/{orderId}")
public ResponseEntity payForOrder(@RequestBody PaymentDto paymentDto, @PathVariable Long orderId) {

final PaymentService paymentService = paymentFactory.getType(paymentDto.getPaymentType());

return ResponseEntity.ok(paymentService.payForOrder(paymentDto, orderId));
}

}
36 changes: 36 additions & 0 deletions src/main/java/me/jjeda/mall/orders/domain/CashPayment.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package me.jjeda.mall.orders.domain;

import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToOne;

@Getter
@Setter
@Entity
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor(access = AccessLevel.PROTECTED)
public class CashPayment {

@Id
@GeneratedValue
@Column(name = "cash_payment_id")
private Long id;

private String bank;

private String bankAccount;

private String name;

@OneToOne(fetch = FetchType.LAZY)
private Payment payment;
}
37 changes: 37 additions & 0 deletions src/main/java/me/jjeda/mall/orders/domain/CreditPayment.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package me.jjeda.mall.orders.domain;

import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToOne;

@Getter
@Setter
@Entity
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor(access = AccessLevel.PROTECTED)
public class CreditPayment {

@Id
@GeneratedValue
@Column(name = "credit_payment_id")
private Long id;

private String bank;

private String cardNumber;

private String name;

@OneToOne(fetch = FetchType.LAZY)
private Payment payment;

}
37 changes: 37 additions & 0 deletions src/main/java/me/jjeda/mall/orders/domain/MobilePayment.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package me.jjeda.mall.orders.domain;


import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.OneToOne;

@Getter
@Setter
@Entity
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor(access = AccessLevel.PROTECTED)
public class MobilePayment {

@Id
@GeneratedValue
@Column(name = "mobile_payment_id")
private Long id;

private String phone;

private String telco;

private String name;

@OneToOne(fetch = FetchType.LAZY)
private Payment payment;
}
6 changes: 5 additions & 1 deletion src/main/java/me/jjeda/mall/orders/domain/Order.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
package me.jjeda.mall.orders.domain;

import com.fasterxml.jackson.annotation.JsonManagedReference;
import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Builder;
Expand Down Expand Up @@ -54,6 +53,11 @@ public class Order {
@OneToMany(mappedBy = "order", cascade = CascadeType.ALL)
private List<OrderItem> orderItems;

private int totalPrice;

@OneToOne(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
private Payment payment;

private LocalDateTime orderAt;

@Enumerated(EnumType.STRING)
Expand Down
42 changes: 42 additions & 0 deletions src/main/java/me/jjeda/mall/orders/domain/Payment.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package me.jjeda.mall.orders.domain;

import lombok.AccessLevel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Getter;
import lombok.NoArgsConstructor;
import lombok.Setter;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import java.time.LocalDateTime;

@Entity
@Getter
@Setter
@Builder
@NoArgsConstructor(access = AccessLevel.PROTECTED)
@AllArgsConstructor(access = AccessLevel.PROTECTED)
public class Payment {

@Id
@GeneratedValue
@Column(name = "payment_id")
private Long id;

private int price;

@Enumerated(EnumType.STRING)
private PaymentStatus paymentStatus;

@Enumerated(EnumType.STRING)
private PaymentType paymentType;

private LocalDateTime createdAt;


}
36 changes: 36 additions & 0 deletions src/main/java/me/jjeda/mall/orders/domain/PaymentFactory.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
package me.jjeda.mall.orders.domain;

import lombok.RequiredArgsConstructor;
import me.jjeda.mall.orders.service.CashPaymentService;
import me.jjeda.mall.orders.service.CreditPaymentService;
import me.jjeda.mall.orders.service.MobilePaymentService;
import me.jjeda.mall.orders.service.PaymentService;
import org.springframework.stereotype.Component;

@Component
@RequiredArgsConstructor
public class PaymentFactory {

private final CashPaymentService cashPaymentService;
private final CreditPaymentService creditPaymentService;
private final MobilePaymentService mobilePaymentService;

public PaymentService getType(PaymentType paymentType) {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Type을 가져오는게 아니라 Service를 가져오는것이므로 이름을 적절하게 바꿔주면 좋을 것 같습니다~

final PaymentService paymentService;

switch (paymentType) {
case CASH:
paymentService = cashPaymentService;
break;
case CREDIT:
paymentService = creditPaymentService;
break;
case MOBILE:
paymentService = mobilePaymentService;
break;
default:
throw new IllegalArgumentException();
}
return paymentService;
}
}
12 changes: 12 additions & 0 deletions src/main/java/me/jjeda/mall/orders/domain/PaymentStatus.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package me.jjeda.mall.orders.domain;

/**
* 결제상태를 나타내는 enum
* READY : 결제전
* COMP :결제완료
* CANCEL : 결제취소
* REFUND : 환불
*/
public enum PaymentStatus {
READY, COMP, CANCEL, REFUND
}
11 changes: 11 additions & 0 deletions src/main/java/me/jjeda/mall/orders/domain/PaymentType.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
package me.jjeda.mall.orders.domain;

/**
* 결제 수단
* CREDIT : (신용)카드
* CASH : 계좌이체
* MOBILE : 모바일
*/
public enum PaymentType {
CREDIT, CASH, MOBILE
}
3 changes: 2 additions & 1 deletion src/main/java/me/jjeda/mall/orders/dto/OrderDto.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,11 +27,12 @@ public class OrderDto {

public Order toEntity() {
List<OrderItem> tempOrderItems = new ArrayList<>();
orderItemDtoList.forEach((dto)->tempOrderItems.add(dto.toEntity()));
orderItemDtoList.forEach((dto) -> tempOrderItems.add(dto.toEntity()));

return Order.builder()
.delivery(this.deliveryDto.toEntity())
.orderItems(tempOrderItems)
.payment(PaymentDto.toReadyEntity())
.status(OrderStatus.ORDER)
.orderAt(LocalDateTime.now())
.build();
Expand Down
26 changes: 26 additions & 0 deletions src/main/java/me/jjeda/mall/orders/dto/PaymentDto.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
package me.jjeda.mall.orders.dto;

import lombok.Builder;
import lombok.Getter;
import me.jjeda.mall.orders.domain.Payment;
import me.jjeda.mall.orders.domain.PaymentStatus;
import me.jjeda.mall.orders.domain.PaymentType;

@Builder
@Getter
public class PaymentDto {

private Long id;

private int price;

private PaymentStatus paymentStatus;

private PaymentType paymentType;

public static Payment toReadyEntity() {
return Payment.builder()
.paymentStatus(PaymentStatus.READY)
.build();
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package me.jjeda.mall.orders.repository;

import me.jjeda.mall.orders.domain.CashPayment;
import org.springframework.data.jpa.repository.JpaRepository;

public interface CashPaymentRepository extends JpaRepository<CashPayment, Long> {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
package me.jjeda.mall.orders.repository;

import me.jjeda.mall.orders.domain.CreditPayment;
import org.springframework.data.jpa.repository.JpaRepository;

public interface CreditPaymentRepository extends JpaRepository<CreditPayment, Long> {

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package me.jjeda.mall.orders.repository;

import me.jjeda.mall.orders.domain.MobilePayment;
import org.springframework.data.jpa.repository.JpaRepository;

public interface MobilePaymentRepository extends JpaRepository<MobilePayment, Long> {
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package me.jjeda.mall.orders.repository;

import me.jjeda.mall.orders.domain.Payment;
import org.springframework.data.jpa.repository.JpaRepository;

public interface PaymentRepository extends JpaRepository<Payment, Long> {
}
Loading