Skip to content

Commit 1b75d03

Browse files
authored
Merge pull request #33 from 9oormthon-univ/feature/GOORM-3-product
[GOORM-3] - 상품 등록 API 구현
2 parents 036b61a + 61ad111 commit 1b75d03

8 files changed

Lines changed: 135 additions & 11 deletions

File tree

src/main/java/com/goormthon3/team49/domain/product/application/ProductService.java

Lines changed: 43 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,16 @@
11
package com.goormthon3.team49.domain.product.application;
22

3+
import com.goormthon3.team49.domain.product.domain.entity.Product;
34
import com.goormthon3.team49.domain.product.domain.entity.Product;
45
import com.goormthon3.team49.domain.product.domain.entity.ProductReservation;
5-
import com.goormthon3.team49.domain.product.presentation.dto.ParticipantDto;
6-
import com.goormthon3.team49.domain.product.presentation.dto.ProductDto;
7-
import com.goormthon3.team49.domain.product.presentation.dto.SummaryProductDto;
6+
import com.goormthon3.team49.domain.product.domain.entity.ProductReservationId;
7+
import com.goormthon3.team49.domain.product.presentation.dto.*;
88
import com.goormthon3.team49.domain.product.domain.repository.ProductRepository;
99
import com.goormthon3.team49.domain.product.domain.repository.ProductReservationRepository;
1010
import lombok.RequiredArgsConstructor;
1111
import org.springframework.stereotype.Service;
1212

13+
import java.time.LocalDateTime;
1314
import java.util.List;
1415
import java.util.stream.Collectors;
1516

@@ -71,4 +72,42 @@ public List<ParticipantDto> getProductParticipants(Long productId) {
7172
))
7273
.collect(Collectors.toList());
7374
}
74-
}
75+
76+
// 상품 등록하기
77+
public AddProductDto createProduct(Long userId, AddProductRequestDto addProductRequestDto, ProductReservation reservation) {
78+
// 상품 엔티티 생성
79+
Product product = new Product();
80+
product.setTitle(addProductRequestDto.getTitle());
81+
product.setTotalNum(addProductRequestDto.getTotalNum());
82+
reservation.setQuantity(addProductRequestDto.getQuantity());
83+
product.setPrice(addProductRequestDto.getPrice());
84+
product.setSavePrice(addProductRequestDto.getSavePrice());
85+
product.setLink(addProductRequestDto.getLink());
86+
product.setPickupLocation(addProductRequestDto.getPickupLocation());
87+
// 필요시 이미지 처리 (예: product.setImgId(addProductRequestDto.getImg()));
88+
89+
// 상품 저장
90+
Product savedProduct = productRepository.save(product);
91+
92+
// AddProductDto로 변환하여 반환
93+
return AddProductDto.fromEntity(savedProduct, reservation);
94+
}
95+
96+
// 상품 예약하기 (참여자 등록)
97+
public void participateProduct(ParticipantDto participantDto) {
98+
// ProductReservationId 생성 및 설정
99+
ProductReservationId reservationId = new ProductReservationId();
100+
reservationId.setProductId(participantDto.getProductId());
101+
reservationId.setUserId(participantDto.getUserId());
102+
103+
// ProductReservation 엔티티 생성
104+
ProductReservation reservation = new ProductReservation();
105+
reservation.setId(reservationId); // 복합키 설정
106+
reservation.setQuantity(participantDto.getQuantity()); // 예약 수량 설정
107+
//reservation.setRole(participantDto.Role.참여자());
108+
reservation.setCreatedAt(LocalDateTime.now()); // 생성 일시 설정
109+
110+
// 예약 정보 저장
111+
productReservationRepository.save(reservation);
112+
}
113+
}

src/main/java/com/goormthon3/team49/domain/product/domain/entity/ProductReservation.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,11 @@
44
import com.goormthon3.team49.domain.user.domain.User;
55
import jakarta.persistence.*;
66
import lombok.Getter;
7+
import lombok.Setter;
78

89
import java.time.LocalDateTime;
910

11+
@Setter
1012
@Getter
1113
@Entity(name = "ProductReservation")
1214
public class ProductReservation {

src/main/java/com/goormthon3/team49/domain/product/domain/entity/ProductReservationId.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,12 @@
44
import jakarta.persistence.Embeddable;
55
import lombok.EqualsAndHashCode;
66
import lombok.Getter;
7+
import lombok.Setter;
78

89
import java.io.Serializable;
910
import java.util.Objects;
1011

12+
@Setter
1113
@Getter
1214
@Embeddable
1315
public class ProductReservationId implements Serializable {
@@ -43,4 +45,5 @@ public boolean equals(Object o) {
4345
public int hashCode() {
4446
return Objects.hash(userId, productId, schoolId);
4547
}
48+
4649
}

src/main/java/com/goormthon3/team49/domain/product/presentation/ProductController.java

Lines changed: 22 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,8 @@
11
package com.goormthon3.team49.domain.product.presentation;
22

33
import com.goormthon3.team49.domain.product.application.ProductService;
4-
import com.goormthon3.team49.domain.product.presentation.dto.ParticipantDto;
5-
import com.goormthon3.team49.domain.product.presentation.dto.ProductDto;
6-
import com.goormthon3.team49.domain.product.presentation.dto.SummaryProductDto;
4+
import com.goormthon3.team49.domain.product.domain.entity.ProductReservation;
5+
import com.goormthon3.team49.domain.product.presentation.dto.*;
76
import lombok.RequiredArgsConstructor;
87
import org.springframework.http.ResponseEntity;
98
import org.springframework.web.bind.annotation.*;
@@ -50,4 +49,24 @@ public ResponseEntity<List<ParticipantDto>> getProductParticipants(@PathVariable
5049
List<ParticipantDto> participants = productService.getProductParticipants(productId);
5150
return ResponseEntity.ok(participants);
5251
}
52+
53+
//상품 등록하기
54+
@PostMapping("/{userId}/leadCreate")
55+
public ResponseEntity<AddProductDto> createProduct(@PathVariable Long userId, @RequestBody AddProductRequestDto addProductRequestDto) {
56+
// AddProductRequestDto에서 ProductReservation 추출
57+
ProductReservation reservation = addProductRequestDto.getReservation(); // getReservation() 메서드는 AddProductRequestDto에 정의되어 있어야 합니다.
58+
59+
// ProductService 호출 시 ProductReservation 객체 전달
60+
AddProductDto createdProduct = productService.createProduct(userId, addProductRequestDto, reservation);
61+
62+
return ResponseEntity.ok(createdProduct);
63+
}
64+
65+
66+
// 상품 구매하기 (예약하기)
67+
@PostMapping("/participantCreate")
68+
public ResponseEntity<String> participateProduct(@RequestBody ParticipantDto participantDto) {
69+
productService.participateProduct(participantDto);
70+
return ResponseEntity.ok("ok");
71+
}
5372
}
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
package com.goormthon3.team49.domain.product.presentation.dto;
2+
3+
import com.goormthon3.team49.domain.product.domain.entity.Product;
4+
5+
import com.goormthon3.team49.domain.product.domain.entity.ProductReservation;
6+
import jakarta.transaction.Transactional;
7+
import lombok.Getter;
8+
import lombok.Setter;
9+
10+
@Getter
11+
@Setter
12+
public class AddProductDto {
13+
private Long productId;
14+
private String title;
15+
private Integer totalNum;
16+
private Integer quantity;
17+
private Integer price;
18+
private Integer savePrice;
19+
private String link;
20+
private String pickupLocation;
21+
private String img; // 이미지 주소
22+
23+
24+
25+
@Transactional
26+
public static AddProductDto fromEntity(Product product, ProductReservation reservation) {
27+
AddProductDto dto = new AddProductDto();
28+
dto.setProductId(product.getProductId());
29+
dto.setTitle(product.getTitle());
30+
dto.setTotalNum(product.getTotalNum());
31+
dto.setQuantity(reservation.getQuantity());
32+
dto.setPrice(product.getPrice());
33+
dto.setSavePrice(product.getSavePrice());
34+
dto.setLink(product.getLink());
35+
dto.setPickupLocation(product.getPickupLocation());
36+
// dto.setImg(product.getProductImgId()); // 이미지 주소
37+
return dto;
38+
}
39+
40+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package com.goormthon3.team49.domain.product.presentation.dto;
2+
3+
import com.goormthon3.team49.domain.product.domain.entity.ProductReservation;
4+
import lombok.Getter;
5+
import lombok.Setter;
6+
7+
@Getter
8+
@Setter
9+
public class AddProductRequestDto {
10+
private String title;
11+
private Integer totalNum;
12+
private Integer quantity;
13+
private Integer price;
14+
private Integer savePrice;
15+
private String link;
16+
private String pickupLocation;
17+
private String img; // 이미지 주소
18+
19+
private ProductReservation reservation;
20+
21+
}

src/main/java/com/goormthon3/team49/domain/product/presentation/dto/ProductDto.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ public class ProductDto {
2020
private String link;
2121
private String pickupLocation;
2222
private Long productImgId;
23-
//private String s3Key;
23+
private String s3Key;
2424

2525
public static ProductDto fromEntity(Product product, ProductReservation productReservation) {
2626
return ProductDto.builder()
@@ -34,7 +34,7 @@ public static ProductDto fromEntity(Product product, ProductReservation productR
3434
.link(product.getLink())
3535
.pickupLocation(product.getPickupLocation())
3636
.productImgId(product.getProductImage() != null ? product.getProductImage().getProductImgId() : null)
37-
// .s3Key(product.getProductImage() != null ? product.getProductImage().getS3Key() : null)
37+
.s3Key(product.getProductImage() != null ? product.getProductImage().getS3Key() : null)
3838
.build();
3939
}
4040
}

src/main/java/com/goormthon3/team49/domain/product/presentation/dto/SummaryProductDto.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,15 +18,15 @@ public class SummaryProductDto {
1818

1919
public static SummaryProductDto fromEntity(Product product) {
2020
Long productImgId = product.getProductImage() != null ? product.getProductImage().getProductImgId() : null;
21-
// String s3Key = product.getProductImage() != null ? product.getProductImage().getS3Key() : null;
21+
String s3Key = product.getProductImage() != null ? product.getProductImage().getS3Key() : null;
2222

2323
return SummaryProductDto.builder()
2424
.productId(product.getProductId())
2525
.title(product.getTitle())
2626
.savePrice(product.getSavePrice())
2727
//.participantCount(product.getParticipants().size()) // 수정 필요
2828
.productImgId(productImgId)
29-
// .s3Key(s3Key)
29+
// .s3Key(s3Key)
3030
.build();
3131
}
3232
}

0 commit comments

Comments
 (0)