feat(order-service, customer-vue): 주문 페이지 추가

- 장바구니 데이터 조회
- 주문 페이지 개발
This commit is contained in:
hoon7566
2022-03-09 11:46:53 +09:00
parent b6583eaec2
commit 7cfc4bc47f
16 changed files with 335 additions and 71 deletions

View File

@@ -16,5 +16,13 @@ export default {
} }
item.itemOptionIds.push(item.requireOption) item.itemOptionIds.push(item.requireOption)
return axios.post(process.env.VUE_APP_ORDER_API_URL+'/order/item', item); return axios.post(process.env.VUE_APP_ORDER_API_URL+'/order/item', item);
} },
saveOrder(order){
//만약 동시요청으로 장바구니가 두개 생겨버린다면?
return axios.post(process.env.VUE_APP_ORDER_API_URL + "/order/orders", order);
},
getOrder() {
return axios.get(process.env.VUE_APP_ORDER_API_URL + "/order/orders");
},
} }

View File

@@ -4,18 +4,22 @@
dense dense
color="white" color="white"
elevation="1" elevation="1"
> >
<v-app-bar-nav-icon>
<v-icon>mdi-arrow-left</v-icon> <v-row class="d-flex" style="max-width: 768px;display: table; margin-left: auto; margin-right: auto; width: 100%" align="center">
</v-app-bar-nav-icon> <v-app-bar-nav-icon>
<v-spacer></v-spacer> <v-icon>mdi-arrow-left</v-icon>
<v-toolbar-title> </v-app-bar-nav-icon>
<v-img :src="require('@/assets/just-logo.png')"></v-img> <v-spacer></v-spacer>
</v-toolbar-title> <v-toolbar-title>
<v-spacer></v-spacer> <v-img :src="require('@/assets/just-logo.png')"></v-img>
<v-btn icon> </v-toolbar-title>
<v-icon>mdi-magnify</v-icon> <v-spacer></v-spacer>
</v-btn> <v-btn icon>
<v-icon>mdi-magnify</v-icon>
</v-btn>
</v-row>
</v-app-bar> </v-app-bar>
</template> </template>

View File

@@ -59,13 +59,19 @@ const routes = [
name: 'login', name: 'login',
component: () => import('../views/LoginPage') component: () => import('../views/LoginPage')
}, },
{
path: "/item/:storeId/:itemId",
name: 'itemDetail',
component: () => import('../views/ItemDetail')
},
{
path: "/order",
name: 'orderPage',
component: () => import('../views/OrderPage')
},
] ]
}, },
{
path: "/item/:storeId/:itemId",
name: 'itemDetail',
component: () => import('../views/ItemDetail')
},
{ {
path: '/auth', path: '/auth',

View File

@@ -1,6 +1,5 @@
<template> <template>
<v-main> <div >
<v-container >
<v-row> <v-row>
<v-col> <v-col>
<v-img :src="require('@/assets/store.jpeg')" <v-img :src="require('@/assets/store.jpeg')"
@@ -8,33 +7,29 @@
/> />
</v-col> </v-col>
</v-row> </v-row>
<v-row > <v-row class="mt-5" >
<v-col > <v-col >
<v-subheader > <div class="text-h3" >
{{itemData.name}} {{itemData.name}}
</v-subheader> </div>
</v-col> </v-col>
</v-row> </v-row>
<v-row > <v-row class="mt-5" >
<v-col class="text-h3"> <v-col class="text-h5">
<v-container> <span class="text-h5">가격</span>
<span class="text-h3">가격</span>
</v-container>
</v-col> </v-col>
<v-spacer></v-spacer> <v-spacer></v-spacer>
<v-spacer></v-spacer> <v-spacer></v-spacer>
<v-col > <v-col >
<v-container> <v-container>
<div class="text-h3">{{ itemData.price }}</div> <div class="text-h5">{{ itemData.price }}</div>
</v-container> </v-container>
</v-col> </v-col>
</v-row> </v-row>
<v-divider/> <v-divider/>
<v-row > <v-row class="mt-5">
<v-col > <v-col>
<v-container> <div class="text-h5">수량</div>
<div class="text-h3">수량</div>
</v-container>
</v-col> </v-col>
<v-spacer></v-spacer> <v-spacer></v-spacer>
<v-spacer></v-spacer> <v-spacer></v-spacer>
@@ -45,7 +40,6 @@
append-outer-icon="mdi-plus" append-outer-icon="mdi-plus"
prepend-icon="mdi-minus" prepend-icon="mdi-minus"
filled filled
label="수량"
type="number" type="number"
@click:append-outer="addItemCount(1)" @click:append-outer="addItemCount(1)"
@click:prepend="addItemCount(-1)" @click:prepend="addItemCount(-1)"
@@ -55,10 +49,9 @@
</v-col> </v-col>
</v-row> </v-row>
<v-divider/> <v-divider/>
<v-row> <v-row class="mt-5">
<v-col> <v-col>
<v-container> <div class="text-h5"> 필수 옵션</div>
<div class="text-h3"> 필수 옵션</div>
<v-radio-group v-model="setItem.requireOption"> <v-radio-group v-model="setItem.requireOption">
<v-radio <v-radio
v-for="itemOption in requireGroup" v-for="itemOption in requireGroup"
@@ -67,14 +60,12 @@
:value="itemOption.id" :value="itemOption.id"
/> />
</v-radio-group> </v-radio-group>
</v-container>
</v-col> </v-col>
</v-row> </v-row>
<v-divider/> <v-divider/>
<v-row> <v-row class="mt-5">
<v-col> <v-col>
<v-container> <div class="text-h5"> 추가 옵션</div>
<div class="text-h3"> 추가 옵션</div>
<v-checkbox <v-checkbox
class="shrink mr-2 mt-0" class="shrink mr-2 mt-0"
v-model="setItem.otherOptions" v-model="setItem.otherOptions"
@@ -83,15 +74,13 @@
:label="itemOption.name" :label="itemOption.name"
:value="itemOption.id" :value="itemOption.id"
/> />
</v-container>
</v-col> </v-col>
</v-row> </v-row>
<v-btn <v-btn
block block
@click="addItem" @click="addItem"
>담기</v-btn> >담기</v-btn>
</v-container> </div>
</v-main>
</template> </template>
<script> <script>
@@ -100,12 +89,12 @@ import orderApi from "@/api/order";
export default { export default {
name: "ItemDetail", name: "ItemDetail",
mounted() { async beforeMount() {
console.log(this.$route.params) console.log(this.$route.params)
this.storeId = this.$route.params.storeId this.storeId = this.$route.params.storeId
this.itemId = this.$route.params.itemId this.itemId = this.$route.params.itemId
this.setItem.storeId = this.storeId; this.setItem.storeId = this.storeId;
this.getItemData() await this.getItemData()
}, },
computed: { computed: {
requireGroup:function(){ requireGroup:function(){
@@ -114,7 +103,6 @@ export default {
otherGroup:function(){ otherGroup:function(){
return this.parseGroup('OTHER') return this.parseGroup('OTHER')
} }
}, },
data: function() { data: function() {
return { return {
@@ -134,7 +122,7 @@ export default {
} }
}, },
methods: { methods: {
getItemData: function (){ getItemData: async function (){
storeApi.getItemById(this.itemId) storeApi.getItemById(this.itemId)
.then(response=>{ .then(response=>{
console.log(response) console.log(response)
@@ -144,6 +132,7 @@ export default {
}) })
.catch(error=>{ .catch(error=>{
console.log(error) console.log(error)
this.$router.replace("/")
}) })
}, },
parseGroup: function (type){ parseGroup: function (type){
@@ -158,10 +147,10 @@ export default {
this.setItem.count+v >=0? this.setItem.count+v: 0; this.setItem.count+v >=0? this.setItem.count+v: 0;
}, },
addItem: function(){ addItem: function(){
console.log(this.setItem)
orderApi.addItemToBasket(this.setItem) orderApi.addItemToBasket(this.setItem)
.then(response=>{ .then(response=>{
console.log(response) console.log(response)
this.$router.replace("/store/"+this.storeId)
}) })
.catch(error=>{ .catch(error=>{
console.log(error) console.log(error)
@@ -172,12 +161,4 @@ export default {
</script> </script>
<style scoped> <style scoped>
.container {
max-width: 768px;
background-color: white;
height: 100%;
}
main {
background-color: #f2f2f2!important;
}
</style> </style>

View File

@@ -0,0 +1,120 @@
<template>
<div>
<v-row>
<v-col>
<div class="text-h4" style="white-space:nowrap; overflow:hidden; text-overflow:ellipsis;">{{ orderData.storeId }}</div>
</v-col>
</v-row>
<v-row>
<v-col
v-for=" orderItem in orderData._orderItemDtos"
:key = "orderItem.itemId"
>
<v-card
class="mx-auto mb-5"
outlined
>
<v-list-item three-line>
<v-list-item-content>
<v-list-item-title class="text-h5 mb-3">
{{ orderItem.itemId }}
</v-list-item-title>
<div class="text-body-1 mb-5">
{{ orderItem.itemOptionIds.join(', ')}}
</div>
<div class="text--primary">
합계 : <b> {{ orderItem.price }} </b>
</div>
</v-list-item-content>
<v-list-item-avatar
tile
size="100"
>
<v-img :src="require('@/assets/store.jpeg')"></v-img>
</v-list-item-avatar>
</v-list-item>
<v-card-actions class="pb-2">
<v-btn block color="warning">삭제하기</v-btn>
</v-card-actions>
</v-card>
</v-col>
</v-row>
<v-row>
<v-col>
<div> 합계 : {{orderData.totalPrice}} </div>
</v-col>
</v-row>
<v-btn
block
@click="saveOrder"
color="primary"
>주문하기</v-btn>
<!-- <v-btn-->
<!-- style="position: absolute; bottom: 0;transform: translateY(-100%); width: 100%"-->
<!-- @click="orderItems"-->
<!-- >주문하기</v-btn>-->
</div>
</template>
<script>
import orderApi from "@/api/order";
export default {
name: "OrderPage",
mounted() {
this.getOrder();
},
data: function(){
return {
orderData:{
storeId:Number,
_orderItemDtos:[{
itemId:Number,
itemOptionIds:Array,
price:Number,
}],
totalPrice:Number,
},
}
},
computed:{
test:function (a){
return a;
}
},
methods:{
saveOrder: function(){
orderApi.saveOrder()
.then(()=>{
alert('주문되었습니다.')
this.$router.replace("/")
})
.catch(error=>{
console.log(error)
//this.$router.replace("/")
})
},
getOrder: function(){
orderApi.getOrder()
.then(response=>{
this.orderData=response.data.data
})
.catch(error=>{
console.log(error)
this.$router.replace("/")
})
},
}
}
</script>
<style scoped>
</style>

View File

@@ -35,7 +35,7 @@ dependencies {
/*implementation 'org.springframework.boot:spring-boot-starter-amqp'*/ /*implementation 'org.springframework.boot:spring-boot-starter-amqp'*/
/*implementation 'org.springframework.boot:spring-boot-starter-security'*/ /*implementation 'org.springframework.boot:spring-boot-starter-security'*/
/*implementation 'org.springframework.cloud:spring-cloud-starter-config'*/ /*implementation 'org.springframework.cloud:spring-cloud-starter-config'*/
/*implementation 'org.springframework.kafka:spring-kafka'*/ implementation 'org.springframework.kafka:spring-kafka'
// https://mvnrepository.com/artifact/com.github.gavlyukovskiy/p6spy-spring-boot-starter // https://mvnrepository.com/artifact/com.github.gavlyukovskiy/p6spy-spring-boot-starter
implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.8.0' implementation 'com.github.gavlyukovskiy:p6spy-spring-boot-starter:1.8.0'
@@ -46,7 +46,7 @@ dependencies {
annotationProcessor 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok'
testImplementation 'org.springframework.boot:spring-boot-starter-test' testImplementation 'org.springframework.boot:spring-boot-starter-test'
// testImplementation 'org.springframework.amqp:spring-rabbit-test' // testImplementation 'org.springframework.amqp:spring-rabbit-test'
// testImplementation 'org.springframework.kafka:spring-kafka-test' testImplementation 'org.springframework.kafka:spring-kafka-test'
// testImplementation 'org.springframework.security:spring-security-test' // testImplementation 'org.springframework.security:spring-security-test'
testImplementation 'com.h2database:h2' testImplementation 'com.h2database:h2'

View File

@@ -0,0 +1,49 @@
package com.justpickup.orderservice.domain.order.dto;
import com.justpickup.orderservice.domain.order.entity.Order;
import com.justpickup.orderservice.domain.order.entity.OrderStatus;
import com.justpickup.orderservice.domain.orderItem.dto.OrderItemDto;
import com.justpickup.orderservice.domain.orderItem.entity.OrderItem;
import com.justpickup.orderservice.domain.orderItemOption.dto.OrderItemOptionDto;
import lombok.Getter;
import lombok.NoArgsConstructor;
import java.time.LocalDateTime;
import java.util.List;
import java.util.stream.Collectors;
@Getter
@NoArgsConstructor
public class FetchOrderDto {
private Long id;
private Long userId;
private String userName;
private Long userCouponId;
private Long orderPrice;
private Long storeId;
private LocalDateTime orderTime;
private Long usedPoint;
private OrderStatus orderStatus;
private List<OrderItemDto> orderItemDtoList;
public FetchOrderDto(Order order) {
this.id = order.getId();
this.userId = order.getUserId();
this.orderPrice = order.getOrderPrice();
this.storeId = order.getStoreId();
this.orderItemDtoList = order.getOrderItems().stream()
.map(orderItem -> OrderItemDto.of(orderItem.getId(),orderItem.getItemId(),orderItem.getPrice(),orderItem.getCount(),orderItem.getOrderItemOptions().stream().map(orderItemOption -> new OrderItemOptionDto(orderItemOption.getId())).collect(Collectors.toList())))
.collect(Collectors.toList());
}
}

View File

@@ -84,6 +84,8 @@ public class OrderDto {
} }
// == 변수 변경 메소드 == // // == 변수 변경 메소드 == //
public void setUserName(String userName) { public void setUserName(String userName) {
this.userName = userName; this.userName = userName;

View File

@@ -85,8 +85,10 @@ public class Order extends BaseEntity {
transaction.setOrder(this); transaction.setOrder(this);
} }
public void addOrderItem(OrderItem orderItem) { public Order addOrderItem(OrderItem orderItem) {
this.orderItems.add(orderItem); this.orderItems.add(orderItem);
this.orderPrice += orderItem.getPrice();
orderItem.setOrder(this); orderItem.setOrder(this);
return this;
} }
} }

View File

@@ -1,10 +1,11 @@
package com.justpickup.orderservice.domain.order.repository; package com.justpickup.orderservice.domain.order.repository;
import com.justpickup.orderservice.domain.order.entity.Order; import com.justpickup.orderservice.domain.order.entity.Order;
import com.justpickup.orderservice.domain.order.entity.OrderStatus;
import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.jpa.repository.JpaRepository;
import java.util.Optional; import java.util.Optional;
public interface OrderRepository extends JpaRepository<Order, Long> { public interface OrderRepository extends JpaRepository<Order, Long> {
Optional<Order> findByUserId(Long userId); Optional<Order> findByUserIdAndOrderStatus(Long userId, OrderStatus orderStatus);
} }

View File

@@ -3,6 +3,7 @@ package com.justpickup.orderservice.domain.order.repository;
import com.justpickup.orderservice.domain.order.dto.OrderSearchCondition; import com.justpickup.orderservice.domain.order.dto.OrderSearchCondition;
import com.justpickup.orderservice.domain.order.dto.PrevOrderSearch; import com.justpickup.orderservice.domain.order.dto.PrevOrderSearch;
import com.justpickup.orderservice.domain.order.entity.Order; import com.justpickup.orderservice.domain.order.entity.Order;
import com.justpickup.orderservice.domain.order.entity.OrderStatus;
import com.querydsl.core.types.dsl.BooleanExpression; import com.querydsl.core.types.dsl.BooleanExpression;
import com.querydsl.jpa.impl.JPAQueryFactory; import com.querydsl.jpa.impl.JPAQueryFactory;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
@@ -14,8 +15,12 @@ import org.springframework.stereotype.Repository;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.List; import java.util.List;
import java.util.Optional;
import static com.justpickup.orderservice.domain.order.entity.QOrder.order; import static com.justpickup.orderservice.domain.order.entity.QOrder.order;
import static com.justpickup.orderservice.domain.orderItem.entity.QOrderItem.orderItem;
import static com.justpickup.orderservice.domain.orderItemOption.entity.QOrderItemOption.orderItemOption;
import static com.justpickup.orderservice.domain.transaction.entity.QTransaction.transaction;
@Repository @Repository
@RequiredArgsConstructor @RequiredArgsConstructor
@@ -104,4 +109,19 @@ public class OrderRepositoryCustom {
return new SliceImpl<>(contents, pageable, hasNext); return new SliceImpl<>(contents, pageable, hasNext);
} }
public Optional<Order> fetchOrder(Long userId){
return Optional.ofNullable(queryFactory.selectFrom(order)
.leftJoin(order.orderItems, orderItem).fetchJoin()
.leftJoin(orderItem.orderItemOptions,orderItemOption)
.leftJoin(order.transaction,transaction)
.where(
order.userId.eq(userId),
order.orderStatus.eq(OrderStatus.PENDING)
)
.distinct()
.fetchOne());
}
} }

View File

@@ -1,5 +1,6 @@
package com.justpickup.orderservice.domain.order.service; package com.justpickup.orderservice.domain.order.service;
import com.justpickup.orderservice.domain.order.dto.FetchOrderDto;
import com.justpickup.orderservice.domain.order.dto.OrderDto; import com.justpickup.orderservice.domain.order.dto.OrderDto;
import com.justpickup.orderservice.domain.order.dto.OrderSearchCondition; import com.justpickup.orderservice.domain.order.dto.OrderSearchCondition;
import com.justpickup.orderservice.domain.order.dto.PrevOrderSearch; import com.justpickup.orderservice.domain.order.dto.PrevOrderSearch;
@@ -15,4 +16,6 @@ public interface OrderService {
Page<OrderDto> findPrevOrderMain(PrevOrderSearch search, Pageable pageable, Long storeId); Page<OrderDto> findPrevOrderMain(PrevOrderSearch search, Pageable pageable, Long storeId);
SliceImpl<OrderDto> findOrderHistory(Pageable pageable, Long userId); SliceImpl<OrderDto> findOrderHistory(Pageable pageable, Long userId);
void addItemToBasket(OrderItemDto orderItemDto,Long storeId, Long userId); void addItemToBasket(OrderItemDto orderItemDto,Long storeId, Long userId);
FetchOrderDto fetchOrder(Long userId);
void saveOrder(Long userId);
} }

View File

@@ -1,9 +1,11 @@
package com.justpickup.orderservice.domain.order.service; package com.justpickup.orderservice.domain.order.service;
import com.justpickup.orderservice.domain.order.dto.FetchOrderDto;
import com.justpickup.orderservice.domain.order.dto.OrderDto; import com.justpickup.orderservice.domain.order.dto.OrderDto;
import com.justpickup.orderservice.domain.order.dto.OrderSearchCondition; import com.justpickup.orderservice.domain.order.dto.OrderSearchCondition;
import com.justpickup.orderservice.domain.order.dto.PrevOrderSearch; import com.justpickup.orderservice.domain.order.dto.PrevOrderSearch;
import com.justpickup.orderservice.domain.order.entity.Order; import com.justpickup.orderservice.domain.order.entity.Order;
import com.justpickup.orderservice.domain.order.entity.OrderStatus;
import com.justpickup.orderservice.domain.order.repository.OrderRepository; import com.justpickup.orderservice.domain.order.repository.OrderRepository;
import com.justpickup.orderservice.domain.order.repository.OrderRepositoryCustom; import com.justpickup.orderservice.domain.order.repository.OrderRepositoryCustom;
import com.justpickup.orderservice.domain.orderItem.dto.OrderItemDto; import com.justpickup.orderservice.domain.orderItem.dto.OrderItemDto;
@@ -103,7 +105,6 @@ public class OrderServiceImpl implements OrderService {
@Override @Override
@Transactional @Transactional
public void addItemToBasket(OrderItemDto orderItemDto,Long storeId, Long userId) { public void addItemToBasket(OrderItemDto orderItemDto,Long storeId, Long userId) {
orderItemDto.getCount();
//orderItemOption Entity를 생성한다. //orderItemOption Entity를 생성한다.
List<OrderItemOption> orderItemOptions = orderItemDto.getOrderItemOptionDtoList() List<OrderItemOption> orderItemOptions = orderItemDto.getOrderItemOptionDtoList()
@@ -119,11 +120,26 @@ public class OrderServiceImpl implements OrderService {
//HARD_CODE //HARD_CODE
Long userCouponId=0L; Long userCouponId=0L;
Optional<Order> optionalOrder = orderRepository.findByUserId(userId); Optional<Order> optionalOrder = orderRepository.findByUserIdAndOrderStatus(userId, OrderStatus.PENDING);
if(optionalOrder.isPresent()){ if(optionalOrder.isPresent()){
optionalOrder.get().addOrderItem(orderItem); if(optionalOrder.get().addOrderItem(orderItem)
.getStoreId().equals(storeId))
throw new RuntimeException("장바구니에 여러 카페의 메뉴를 담을수 없습니다.");
}else{ }else{
orderRepository.save(Order.of(userId,userCouponId,storeId,orderItemDto.getPrice(),orderItem)); orderRepository.save(Order.of(userId,userCouponId,storeId,orderItemDto.getPrice(),orderItem));
} }
} }
@Override
public FetchOrderDto fetchOrder(Long userId) {
Order order = orderRepositoryCustom.fetchOrder(userId)
.orElseThrow(RuntimeException::new);
return new FetchOrderDto(order);
}
@Override
public void saveOrder(Long userId) {
}
} }

View File

@@ -1,9 +1,11 @@
package com.justpickup.orderservice.domain.order.web; package com.justpickup.orderservice.domain.order.web;
import com.justpickup.orderservice.domain.order.dto.FetchOrderDto;
import com.justpickup.orderservice.domain.order.dto.OrderDto; import com.justpickup.orderservice.domain.order.dto.OrderDto;
import com.justpickup.orderservice.domain.order.entity.OrderStatus; import com.justpickup.orderservice.domain.order.entity.OrderStatus;
import com.justpickup.orderservice.domain.order.service.OrderService; import com.justpickup.orderservice.domain.order.service.OrderService;
import com.justpickup.orderservice.domain.orderItem.dto.OrderItemDto; import com.justpickup.orderservice.domain.orderItem.dto.OrderItemDto;
import com.justpickup.orderservice.domain.orderItemOption.dto.OrderItemOptionDto;
import com.justpickup.orderservice.global.dto.Result; import com.justpickup.orderservice.global.dto.Result;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Data; import lombok.Data;
@@ -99,7 +101,7 @@ public class OrderCustomerApiController {
requestItem.itemId, requestItem.itemId,
requestItem.getPrice(), requestItem.getPrice(),
requestItem.getCount(), requestItem.getCount(),
requestItem.getItemOptionIds()); requestItem.getItemOptionIds().stream().map(OrderItemOptionDto::new).collect(Collectors.toList()));
orderService.addItemToBasket(orderItemDto,requestItem.getStoreId() ,Long.parseLong(userId)); orderService.addItemToBasket(orderItemDto,requestItem.getStoreId() ,Long.parseLong(userId));
return ResponseEntity.status(HttpStatus.NO_CONTENT) return ResponseEntity.status(HttpStatus.NO_CONTENT)
.body(Result.createSuccessResult(null)); .body(Result.createSuccessResult(null));
@@ -117,6 +119,58 @@ public class OrderCustomerApiController {
} }
@GetMapping("/orders")
public ResponseEntity getOrder(@RequestHeader(value = "user-id") String userId){
FetchOrderDto fetchOrderDto = orderService.fetchOrder(Long.parseLong(userId));
ResponseOrder responseOrder = new ResponseOrder(fetchOrderDto);
return ResponseEntity.ok(Result.createSuccessResult(responseOrder));
}
@Data
@NoArgsConstructor
@AllArgsConstructor
public static class ResponseOrder{
private Long storeId;
private List<_OrderItemDto> _orderItemDtos;
private Long totalPrice;
@Data
@NoArgsConstructor
@AllArgsConstructor
public static class _OrderItemDto {
private Long itemId;
private List<Long> itemOptionIds;
private Long price;
public _OrderItemDto(OrderItemDto orderItemDto) {
this.itemId = orderItemDto.getItemId();
this.itemOptionIds = orderItemDto.getOrderItemOptionDtoList()
.stream()
.map(OrderItemOptionDto::getId)
.collect(Collectors.toList());
this.price = orderItemDto.getPrice();
}
}
public ResponseOrder(FetchOrderDto fetchOrderDto){
this.storeId = fetchOrderDto.getStoreId();
this._orderItemDtos = fetchOrderDto.getOrderItemDtoList().stream()
.map(_OrderItemDto::new)
.collect(Collectors.toList());
this.totalPrice = fetchOrderDto.getOrderPrice();
}
}
@PostMapping("/orders")
public ResponseEntity saveOrder(@RequestHeader(value = "user-id") String userId){
orderService.saveOrder(Long.parseLong(userId));
return ResponseEntity.status(HttpStatus.CREATED).body(Result.createSuccessResult(null));
}

View File

@@ -42,15 +42,13 @@ public class OrderItemDto {
.build(); .build();
} }
public static OrderItemDto of(Long id, Long itemId, Long price, Long count, List<Long> itemOptionIds) { public static OrderItemDto of(Long id, Long itemId, Long price, Long count, List<OrderItemOptionDto> orderItemOptions) {
OrderItemDto orderItemDto = new OrderItemDto(); OrderItemDto orderItemDto = new OrderItemDto();
orderItemDto.id = id; orderItemDto.id = id;
orderItemDto.itemId = itemId; orderItemDto.itemId = itemId;
orderItemDto.price = price; orderItemDto.price = price;
orderItemDto.count = count; orderItemDto.count = count;
orderItemDto.orderItemOptionDtoList = itemOptionIds.stream() orderItemDto.orderItemOptionDtoList = orderItemOptions;
.map(OrderItemOptionDto::new)
.collect(Collectors.toList());
return orderItemDto; return orderItemDto;
} }

View File

@@ -1,5 +1,5 @@
server: server:
port: 0 port: 54329
spring: spring:
application: application: