@@ -9,6 +9,8 @@ import MerchOrderState from '../../enum/MerchOrderState';
99import MerchProvider from '../../enum/MerchProvider' ;
1010import EmailService from '../email/EmailService' ;
1111import OrderCustomizeTemplate from '../email/templates/OrderCustomizeTemplate' ;
12+ import { OrderTemplateData } from '../email/templates/OrderEmailTemplateData' ;
13+ import OrderShippedTemplate from '../email/templates/OrderShippedTemplate' ;
1214import * as UserService from '../users/UserService' ;
1315import absurd from '../utils/absurd' ;
1416import isProduction from '../utils/isProduction' ;
@@ -19,6 +21,17 @@ const API_BASE = isProduction()
1921 ? 'http://api.1940s.nyc'
2022 : 'http://dev.1940s.nyc:3000' ;
2123
24+ function createOrderEmailTemplateData ( order : MerchOrder ) : OrderTemplateData {
25+ return {
26+ ordersUrl : UserService . createMagicLinkUrl (
27+ API_BASE ,
28+ order . userId ,
29+ '/orders'
30+ ) . toString ( ) ,
31+ trackingUrl : order . trackingUrl ?? undefined ,
32+ } ;
33+ }
34+
2235export async function createMerchOrder (
2336 userId : number ,
2437 stripeCheckoutSessionId : string ,
@@ -65,13 +78,7 @@ export async function createMerchOrder(
6578
6679 const orderCustomizeEmail = OrderCustomizeTemplate . createTemplatedEmail ( {
6780 to : user . email ,
68- templateContext : {
69- ordersUrl : UserService . createMagicLinkUrl (
70- API_BASE ,
71- userId ,
72- '/orders'
73- ) . toString ( ) ,
74- } ,
81+ templateContext : createOrderEmailTemplateData ( order ) ,
7582 metadata : {
7683 orderId : order . id . toString ( ) ,
7784 userId : user . id . toString ( ) ,
@@ -188,7 +195,7 @@ export async function onShipmentSent(
188195 trackingUrl : string
189196) : Promise < void > {
190197 const orderRepository = getRepository ( MerchOrder ) ;
191- const order = await orderRepository . findOneBy ( {
198+ let order = await orderRepository . findOneBy ( {
192199 provider,
193200 providerOrderId,
194201 } ) ;
@@ -199,5 +206,20 @@ export async function onShipmentSent(
199206 }
200207
201208 order . trackingUrl = trackingUrl ;
202- await orderRepository . save ( order ) ;
209+ order = await orderRepository . save ( order ) ;
210+
211+ const user = await UserService . getUser ( order . userId ) ;
212+
213+ if ( user . email ) {
214+ const orderShippedEmail = OrderShippedTemplate . createTemplatedEmail ( {
215+ to : user . email ,
216+ templateContext : createOrderEmailTemplateData ( order ) ,
217+ metadata : {
218+ orderId : order . id . toString ( ) ,
219+ userId : user . id . toString ( ) ,
220+ } ,
221+ } ) ;
222+
223+ await EmailService . sendTemplateEmail ( orderShippedEmail ) ;
224+ }
203225}
0 commit comments