@@ -2,16 +2,48 @@ import AbstractService from './abstract'
22import { Router } from 'express'
33import { CartRepository } from '../repositories/cart'
44import { AbstractStorage } from '../storage'
5+ import { Cart , Order } from '@commercetools/platform-sdk'
6+ import { OrderRepository } from '../repositories/order'
57
68export class CartService extends AbstractService {
79 public repository : CartRepository
10+ public orderRepository : OrderRepository
811
912 constructor ( parent : Router , storage : AbstractStorage ) {
1013 super ( parent )
1114 this . repository = new CartRepository ( storage )
15+ this . orderRepository = new OrderRepository ( storage )
1216 }
1317
1418 getBasePath ( ) {
1519 return 'carts'
1620 }
21+
22+ extraRoutes ( parent : Router ) {
23+ parent . post ( '/replicate' , ( request , response ) => {
24+ // @ts -ignore
25+ const cartOrOrder : Cart | Order | null =
26+ request . body . reference . typeId === 'order'
27+ ? this . orderRepository . get (
28+ request . params . projectKey ,
29+ request . body . reference . id
30+ )
31+ : this . repository . get (
32+ request . params . projectKey ,
33+ request . body . reference . id
34+ )
35+
36+ if ( ! cartOrOrder ) {
37+ return response . status ( 400 ) . send ( )
38+ }
39+
40+ const newCart = this . repository . create ( request . params . projectKey , {
41+ ...cartOrOrder ,
42+ currency : cartOrOrder . totalPrice . currencyCode ,
43+ discountCodes : [ ] ,
44+ } )
45+
46+ return response . status ( 200 ) . send ( newCart )
47+ } )
48+ }
1749}
0 commit comments