diff --git a/services/skus/controllers.go b/services/skus/controllers.go index 7ec9f99d8..06fdf2eaa 100644 --- a/services/skus/controllers.go +++ b/services/skus/controllers.go @@ -1468,6 +1468,8 @@ func handleCreateOrderFromReceiptH(w http.ResponseWriter, r *http.Request, svc * if err := valid.StructCtx(ctx, &req); err != nil { verrs, ok := collectValidationErrors(err) if !ok { + lg.Err(err).Msg("failed to validate request") + return handlers.ValidationError("request", map[string]interface{}{"request-body": err.Error()}) } @@ -1476,8 +1478,12 @@ func handleCreateOrderFromReceiptH(w http.ResponseWriter, r *http.Request, svc * ord, err := svc.createOrderWithReceipt(ctx, req) if err != nil { + lgr := lg.With().Bytes("raw_receipt", raw).Logger() + // Found an existing order, respond with the id (ord guaranteed not to be nil). if errors.Is(err, model.ErrOrderExistsForReceipt) { + lgr.Err(err).Msg("failed order already exists for receipt") + result := model.CreateOrderWithReceiptResponse{ID: ord.ID.String()} return handlers.RenderContent(ctx, result, w, http.StatusConflict) @@ -1486,12 +1492,12 @@ func handleCreateOrderFromReceiptH(w http.ResponseWriter, r *http.Request, svc * // Use new so that the shorter IF and narrow scope are possible (via if := ...; {}). // It's an example of one of the few legit uses for 'new'. if rverr := new(receiptValidError); errors.As(err, &rverr) { - lg.Warn().Err(err).Msg("failed to validate receipt with vendor") + lgr.Warn().Err(rverr).Msg("failed to validate receipt with vendor") return handleReceiptErr(rverr.err) } - lg.Warn().Err(err).Msg("failed to create order") + lgr.Warn().Err(err).Msg("failed to create order") return handlers.WrapError(err, "failed to create order", http.StatusInternalServerError) } diff --git a/services/skus/skus.go b/services/skus/skus.go index ebac0e43d..d9888b98a 100644 --- a/services/skus/skus.go +++ b/services/skus/skus.go @@ -323,7 +323,7 @@ func newOrderItemReqNewMobileSet(env string) map[string]model.OrderItemRequestNe CredentialType: "time-limited-v2", CredentialValidDuration: "P1M", Price: decimal.RequireFromString("4.99"), - IssuerTokenBuffer: ptrTo(3), + IssuerTokenBuffer: ptrTo(1), IssuerTokenOverlap: ptrTo(0), CredentialValidDurationEach: ptrTo("P1M"), // StripeMetadata depends on env. @@ -338,7 +338,7 @@ func newOrderItemReqNewMobileSet(env string) map[string]model.OrderItemRequestNe CredentialType: "time-limited-v2", CredentialValidDuration: "P1M", Price: decimal.RequireFromString("49.99"), - IssuerTokenBuffer: ptrTo(3), + IssuerTokenBuffer: ptrTo(1), IssuerTokenOverlap: ptrTo(0), CredentialValidDurationEach: ptrTo("P1M"), // StripeMetadata depends on env. diff --git a/services/skus/skus_test.go b/services/skus/skus_test.go index dc5650755..6250c1c73 100644 --- a/services/skus/skus_test.go +++ b/services/skus/skus_test.go @@ -854,7 +854,7 @@ func TestNewOrderItemReqNewMobileSet(t *testing.T) { CredentialType: "time-limited-v2", CredentialValidDuration: "P1M", Price: decimal.RequireFromString("4.99"), - IssuerTokenBuffer: ptrTo(3), + IssuerTokenBuffer: ptrTo(1), IssuerTokenOverlap: ptrTo(0), CredentialValidDurationEach: ptrTo("P1M"), StripeMetadata: &model.ItemStripeMetadata{ @@ -872,7 +872,7 @@ func TestNewOrderItemReqNewMobileSet(t *testing.T) { CredentialType: "time-limited-v2", CredentialValidDuration: "P1M", Price: decimal.RequireFromString("49.99"), - IssuerTokenBuffer: ptrTo(3), + IssuerTokenBuffer: ptrTo(1), IssuerTokenOverlap: ptrTo(0), CredentialValidDurationEach: ptrTo("P1M"), StripeMetadata: &model.ItemStripeMetadata{ @@ -968,7 +968,7 @@ func TestNewOrderItemReqNewMobileSet(t *testing.T) { CredentialType: "time-limited-v2", CredentialValidDuration: "P1M", Price: decimal.RequireFromString("4.99"), - IssuerTokenBuffer: ptrTo(3), + IssuerTokenBuffer: ptrTo(1), IssuerTokenOverlap: ptrTo(0), CredentialValidDurationEach: ptrTo("P1M"), StripeMetadata: &model.ItemStripeMetadata{ @@ -986,7 +986,7 @@ func TestNewOrderItemReqNewMobileSet(t *testing.T) { CredentialType: "time-limited-v2", CredentialValidDuration: "P1M", Price: decimal.RequireFromString("49.99"), - IssuerTokenBuffer: ptrTo(3), + IssuerTokenBuffer: ptrTo(1), IssuerTokenOverlap: ptrTo(0), CredentialValidDurationEach: ptrTo("P1M"), StripeMetadata: &model.ItemStripeMetadata{ @@ -1082,7 +1082,7 @@ func TestNewOrderItemReqNewMobileSet(t *testing.T) { CredentialType: "time-limited-v2", CredentialValidDuration: "P1M", Price: decimal.RequireFromString("4.99"), - IssuerTokenBuffer: ptrTo(3), + IssuerTokenBuffer: ptrTo(1), IssuerTokenOverlap: ptrTo(0), CredentialValidDurationEach: ptrTo("P1M"), StripeMetadata: &model.ItemStripeMetadata{ @@ -1100,7 +1100,7 @@ func TestNewOrderItemReqNewMobileSet(t *testing.T) { CredentialType: "time-limited-v2", CredentialValidDuration: "P1M", Price: decimal.RequireFromString("49.99"), - IssuerTokenBuffer: ptrTo(3), + IssuerTokenBuffer: ptrTo(1), IssuerTokenOverlap: ptrTo(0), CredentialValidDurationEach: ptrTo("P1M"), StripeMetadata: &model.ItemStripeMetadata{ @@ -1196,7 +1196,7 @@ func TestNewOrderItemReqNewMobileSet(t *testing.T) { CredentialType: "time-limited-v2", CredentialValidDuration: "P1M", Price: decimal.RequireFromString("4.99"), - IssuerTokenBuffer: ptrTo(3), + IssuerTokenBuffer: ptrTo(1), IssuerTokenOverlap: ptrTo(0), CredentialValidDurationEach: ptrTo("P1M"), StripeMetadata: &model.ItemStripeMetadata{ @@ -1214,7 +1214,7 @@ func TestNewOrderItemReqNewMobileSet(t *testing.T) { CredentialType: "time-limited-v2", CredentialValidDuration: "P1M", Price: decimal.RequireFromString("49.99"), - IssuerTokenBuffer: ptrTo(3), + IssuerTokenBuffer: ptrTo(1), IssuerTokenOverlap: ptrTo(0), CredentialValidDurationEach: ptrTo("P1M"), StripeMetadata: &model.ItemStripeMetadata{