66import uk .gov .companieshouse .orders .api .repository .CheckoutRepository ;
77import uk .gov .companieshouse .orders .api .util .CheckoutHelper ;
88
9+ import java .security .SecureRandom ;
910import java .time .LocalDateTime ;
11+ import java .util .Calendar ;
1012import java .util .List ;
1113import java .util .Optional ;
1214
@@ -28,12 +30,23 @@ public CheckoutService(CheckoutRepository checkoutRepository,
2830 this .checkoutHelper = checkoutHelper ;
2931 }
3032
33+ private String autoGenerateId () {
34+ SecureRandom random = new SecureRandom ();
35+ byte [] values = new byte [4 ];
36+ random .nextBytes (values );
37+ String rand = String .format ("%04d" , random .nextInt (9999 ));
38+ String time = String .format ("%08d" , Calendar .getInstance ().getTimeInMillis () / 100000L );
39+ String rawId = rand + time ;
40+ String [] tranId = rawId .split ("(?<=\\ G.{6})" );
41+ return "ORD-" + String .join ("-" , tranId );
42+ }
43+
3144 public Checkout createCheckout (Item item , String userId , String email , DeliveryDetails deliveryDetails ) {
3245 final LocalDateTime now = LocalDateTime .now ();
33- String objectId = new ObjectId (). toString ();
46+ String checkoutId = autoGenerateId ();
3447
3548 Checkout checkout = new Checkout ();
36- checkout .setId (objectId );
49+ checkout .setId (checkoutId );
3750 checkout .setUserId (userId );
3851 checkout .setCreatedAt (now );
3952 checkout .setUpdatedAt (now );
@@ -44,9 +57,9 @@ public Checkout createCheckout(Item item, String userId, String email, DeliveryD
4457 checkout .getData ().setCheckedOutBy (actionedBy );
4558 checkout .getData ().setStatus (PaymentStatus .PENDING );
4659 checkout .getData ().setEtag (etagGeneratorService .generateEtag ());
47- checkout .getData ().setLinks (linksGeneratorService .generateCheckoutLinks (objectId ));
60+ checkout .getData ().setLinks (linksGeneratorService .generateCheckoutLinks (checkoutId ));
4861 checkout .getData ().getItems ().add (item );
49- checkout .getData ().setReference (objectId );
62+ checkout .getData ().setReference (checkoutId );
5063 checkout .getData ().setKind ("order" );
5164 checkout .getData ().setDeliveryDetails (deliveryDetails );
5265 String totalOrderCostStr = checkoutHelper .calculateTotalOrderCostForCheckout (checkout ) + "" ;
0 commit comments