-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathhandler.js
More file actions
89 lines (73 loc) · 2.59 KB
/
Copy pathhandler.js
File metadata and controls
89 lines (73 loc) · 2.59 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
'use strict';
import {
orderLogicFilterOrdersCreated,
orderLogicFilterOrdersFulfilled,
orderLogicGetOrdersFromStream
} from './src/logic/order';
import {
handleCreateOrder,
orderMapper,
handleNotifyThirdPartyProducer,
handleFulfilOrderByThirdParty,
handleNotifyThirdPartyDelivery,
handleOrderDelivered,
} from './src/model/order';
import { createAPIGatewayResponse } from './src/utils';
module.exports.createOrder = async (event) => {
const order = orderMapper(JSON.parse(event.body));
handleCreateOrder(order).then(() => {
return createAPIGatewayResponse({ statusCode: 200, message: order })
}).catch((error) => {
return createAPIGatewayResponse({ statusCode: 400, message: error });
});
};
module.exports.notifyThirdPartyProviders = async (event) => {
const records = orderLogicGetOrdersFromStream(event);
const ordersCreated = orderLogicFilterOrdersCreated(records);
const ordersFulfilled = orderLogicFilterOrdersFulfilled(records);
// Handle all notifications
const thirdPartyProducerNotifications = handleNotifyThirdPartyProducer({ orders: ordersCreated })
const thirdPartyDeliveryNotifications = handleNotifyThirdPartyDelivery({ orders: ordersFulfilled })
return Promise.all([
thirdPartyProducerNotifications,
thirdPartyDeliveryNotifications
])
.then(() => 'All notifications sent')
.catch((error) => error)
}
module.exports.fulfilOrderByThirdParty = async (event) => {
const req = JSON.parse(event.body)
handleFulfilOrderByThirdParty({
orderId: req.orderId,
thirdPartyProviderId: req.thirdPartyProviderId,
})
.then(() => {
return createAPIGatewayResponse({
statusCode: 200,
message: `Fulfilled Order "${orderId}" sent to delivery!`
})
})
.catch((error) => {
return createAPIGatewayResponse({ statusCode: 400, message: error })
})
}
module.exports.notifyExternalDeliveryService = async () => {
console.log('HTTP call to external delivery service');
return 'done'
}
module.exports.deliverOrderByThirdParty = async(event) => {
const req = JSON.parse(event.body);
handleOrderDelivered({
orderId: req.orderId,
thirdPartyDeliveryId: req.thirdPartyDeliveryId,
orderReview: req.orderReview,
}).then(() => {
return createAPIGatewayResponse({ statusCode: 200, message: `Order ${req.orderId} Delivered by ${req.thirdPartyDeliveryId}` })
}).catch((error) => {
return createAPIGatewayResponse({ statusCode: 400, message: error });
})
}
module.exports.notifyCustomerService = async (event) => {
console.log('HTTP call to external customer service endpoint');
return 'done'
}