Order 모듈 구성
build.gradle
Order 모듈에 필요한 의존성을 정의합니다. 여기에는 Spring Boot 웹 스타터, 시큐리티 스타터, 그리고 공통 기능을 담당하는 myshop-core 모듈이 포함됩니다.
project(':myshop-order') {
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-security'
implementation project(':myshop-core')
}
}
OrderApplication
스프링 부트 애플리케이션의 메인 클래스로서, 애플리케이션을 구동시키는 엔트리 포인트입니다. @PostConstruct를 사용하여 서버 시간을 Asia/Seoul로 설정함으로써, 모든 시간 데이터가 한국 시간대를 기준으로 처리되도록 합니다.
@Import(JpaAuditingConfig.class)
@SpringBootApplication
public class OrderApplication {
public static void main(String[] args) {
SpringApplication.run(OrderApplication.class, args);
}
@PostConstruct
public void setTime() {
TimeZone.setDefault(TimeZone.getTimeZone("Asia/Seoul"));
}
}
application.yml
Order 서비스의 포트 설정과 스프링 프로파일을 포함합니다. include: - core는 myshop-core 모듈의 설정을 포함시키는 역할을 합니다.
server:
port: 8084
spring:
profiles:
include:
- core
주요 도메인 엔티티
Order
주문 엔티티로, 사용자 정보와 주문한 상품 목록, 주문 상태를 관리합니다. @OneToMany 관계를 통해 여러 주문 항목(OrderItem)을 포함할 수 있습니다.
@Entity
@Table(name = "orders")
@Getter
@NoArgsConstructor
public class Order extends BaseTimeEntity {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne(fetch= FetchType.LAZY, optional = false)
@JoinColumn(name = "user_id")
private User user;
@OneToMany(mappedBy = "order", cascade = CascadeType.ALL)
private List<OrderItem> orderItems = new ArrayList<>();
@Enumerated(EnumType.STRING)
private OrderStatus status;
}
OrderItems
주문 항목 엔티티로, 구매된 상품의 정보, 주문 가격, 수량 등을 관리합니다. @ManyToOne 관계를 통해 상품(Item)과 연결됩니다.
@Entity
@Table(name = "order_items")
@Getter
@NoArgsConstructor
public class OrderItem {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@ManyToOne(fetch= FetchType.LAZY, optional = false)
@JoinColumn(name = "item_id")
private Item item;
@ManyToOne(fetch= FetchType.LAZY, optional = false)
@JoinColumn(name = "order_id")
private Order order;
@Column(name = "order_price")
private int orderPrice;
@Column(name = "count")
private int count;
}
Item
상품 엔티티로, 상품의 이름, 설명, 가격, 재고 수량 및 상태(일반 또는 예약)를 관리합니다. ItemStatus 열거형을 통해 상품의 상태를 표현합니다.
@Entity
@Table(name = "items")
@Getter
@NoArgsConstructor
public class Item {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;
@Column(name = "name")
private String name;
@Column(name = "content")
private String content;
@Column(name = "price")
private int price;
@Column(name = "stock_quantity")
private int stockQuantity;
@Enumerated(EnumType.STRING)
private ItemStatus status;
}
주문과 상품 관리
Order 모듈은 사용자가 상품을 예약 및 구매하는 과정을 관리합니다. 사용자는 Item 엔티티로 표현되는 상품을 선택하여 예약하거나 구매할 수 있으며, 이러한 행위는 Order 엔티티에 기록됩니다. 각 Order 엔티티는 하나 이상의 OrderItem 엔티티를 포함할 수 있으며, 이는 사용자가 주문한 각 상품의 세부 사항을 나타냅니다.
결론
Order 모듈의 추가는 사용자가 상품을 예약하고 구매하는 기능을 제공함으로써, 전체 시스템의 기능성을 향상시킵니다. 이 모듈은 myshop-core 모듈과의 연동을 통해 공통적인 기능을 활용하며, 마이크로서비스 아키텍처 내에서 중요한 역할을 수행합니다.
'프로젝트 (Java) > 예약마켓' 카테고리의 다른 글
[프로젝트] 44. 상품 관련 도메인 및 API 설계 (0) | 2024.02.13 |
---|---|
[프로젝트] 43. 특정 URL 관리자 역할을 가진 사용자만 접근 설계 (0) | 2024.02.13 |
[프로젝트] 41. API Gateway의 추가 (0) | 2024.02.13 |
[프로젝트] 40. Eureka Server 추가 (0) | 2024.02.13 |
[프로젝트] 39. 트러블 슈팅 - Rest API 응답 데이터의 Null 값 문제 해결 (0) | 2024.02.06 |