@bash-app/bash-common 30.219.0 → 30.220.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/definitions.d.ts +2 -2
- package/dist/definitions.d.ts.map +1 -1
- package/dist/definitions.js.map +1 -1
- package/dist/extendedSchemas.d.ts +14 -1
- package/dist/extendedSchemas.d.ts.map +1 -1
- package/dist/extendedSchemas.js.map +1 -1
- package/dist/index.d.ts +3 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/partnerStoreTypes.d.ts +37 -0
- package/dist/partnerStoreTypes.d.ts.map +1 -0
- package/dist/partnerStoreTypes.js +2 -0
- package/dist/partnerStoreTypes.js.map +1 -0
- package/dist/utils/__tests__/paymentUtils.test.js +54 -1
- package/dist/utils/__tests__/paymentUtils.test.js.map +1 -1
- package/dist/utils/paymentUtils.d.ts +37 -0
- package/dist/utils/paymentUtils.d.ts.map +1 -1
- package/dist/utils/paymentUtils.js +61 -0
- package/dist/utils/paymentUtils.js.map +1 -1
- package/package.json +2 -2
- package/prisma/schema.prisma +155 -1
- package/src/definitions.ts +7 -2
- package/src/extendedSchemas.ts +17 -0
- package/src/index.ts +5 -0
- package/src/partnerStoreTypes.ts +36 -0
- package/src/utils/__tests__/paymentUtils.test.ts +65 -0
- package/src/utils/paymentUtils.ts +88 -0
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Tests for payment utility functions
|
|
3
3
|
* Testing business logic without database dependencies
|
|
4
4
|
*/
|
|
5
|
-
import { calculateDiscountFromPromoCode, convertCentsToDollars, convertDollarsToCents, calculateBashAppFee, calculateBashAppFeeWithMembershipDiscount, calculateStripeFee, calculateStripeProcessingFeeCents, calculateTotalPriceWithoutTax, calculateTotalBashPoints, calculateStripeDonationFee, calculateServiceFeeWithMembershipDiscount, } from "../paymentUtils.js";
|
|
5
|
+
import { calculateDiscountFromPromoCode, convertCentsToDollars, convertDollarsToCents, calculateBashAppFee, calculateBashAppFeeWithMembershipDiscount, calculateStripeFee, calculateStripeProcessingFeeCents, calculateTotalPriceWithoutTax, calculateTotalBashPoints, calculateStripeDonationFee, calculateServiceFeeWithMembershipDiscount, calculateBashPlatformFeeCents, splitBashPlatformFeeForTicketCheckout, computeTicketApplicationFeeAmountCents, userHasActiveBashPass, } from "../paymentUtils.js";
|
|
6
6
|
describe("PaymentUtils - Core Functions", () => {
|
|
7
7
|
describe("Currency Conversion", () => {
|
|
8
8
|
test("convertCentsToDollars", () => {
|
|
@@ -69,6 +69,59 @@ describe("PaymentUtils - Core Functions", () => {
|
|
|
69
69
|
test("calculateStripeFee (dollars) aligns with calculateStripeProcessingFeeCents", () => {
|
|
70
70
|
expect(calculateStripeFee(100)).toBe(3.2);
|
|
71
71
|
});
|
|
72
|
+
test("calculateBashPlatformFeeCents floors 3% of gross", () => {
|
|
73
|
+
expect(calculateBashPlatformFeeCents(10000, 0.03)).toBe(300);
|
|
74
|
+
expect(calculateBashPlatformFeeCents(100, 0.03)).toBe(3);
|
|
75
|
+
expect(calculateBashPlatformFeeCents(0, 0.03)).toBe(0);
|
|
76
|
+
});
|
|
77
|
+
test("splitBashPlatformFeeForTicketCheckout respects feeHandling and BashPass", () => {
|
|
78
|
+
const base = {
|
|
79
|
+
grossCents: 10000,
|
|
80
|
+
platformFeeEnabled: true,
|
|
81
|
+
platformFeeRate: 0.03,
|
|
82
|
+
};
|
|
83
|
+
expect(splitBashPlatformFeeForTicketCheckout({ ...base, feeHandling: "HostAbsorbs", bashPassWaivesGuestFee: false })).toEqual({
|
|
84
|
+
totalPlatformCents: 300,
|
|
85
|
+
guestPlatformLineCents: 0,
|
|
86
|
+
});
|
|
87
|
+
expect(splitBashPlatformFeeForTicketCheckout({ ...base, feeHandling: "GuestPays", bashPassWaivesGuestFee: false })).toEqual({
|
|
88
|
+
totalPlatformCents: 300,
|
|
89
|
+
guestPlatformLineCents: 300,
|
|
90
|
+
});
|
|
91
|
+
expect(splitBashPlatformFeeForTicketCheckout({ ...base, feeHandling: "Split", bashPassWaivesGuestFee: false })).toEqual({
|
|
92
|
+
totalPlatformCents: 300,
|
|
93
|
+
guestPlatformLineCents: 150,
|
|
94
|
+
});
|
|
95
|
+
expect(splitBashPlatformFeeForTicketCheckout({ ...base, feeHandling: "GuestPays", bashPassWaivesGuestFee: true })).toEqual({
|
|
96
|
+
totalPlatformCents: 300,
|
|
97
|
+
guestPlatformLineCents: 0,
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
test("computeTicketApplicationFeeAmountCents sums Stripe + Bash platform into application fee", () => {
|
|
101
|
+
const r = computeTicketApplicationFeeAmountCents({
|
|
102
|
+
discountedSubtotalCents: 10000,
|
|
103
|
+
platformFeeEnabled: true,
|
|
104
|
+
platformFeeRate: 0.03,
|
|
105
|
+
feeHandling: "HostAbsorbs",
|
|
106
|
+
bashPassWaivesGuestFee: false,
|
|
107
|
+
});
|
|
108
|
+
expect(r.totalChargedCents).toBe(10000);
|
|
109
|
+
expect(r.bashPlatformTotalCents).toBe(300);
|
|
110
|
+
expect(r.stripeProcessingCents).toBe(calculateStripeProcessingFeeCents(10000));
|
|
111
|
+
expect(r.applicationFeeAmountCents).toBe(r.stripeProcessingCents + 300);
|
|
112
|
+
});
|
|
113
|
+
test("userHasActiveBashPass", () => {
|
|
114
|
+
expect(userHasActiveBashPass({ bashPassStripeSubscriptionId: null, bashPassCurrentPeriodEnd: null })).toBe(false);
|
|
115
|
+
expect(userHasActiveBashPass({ bashPassStripeSubscriptionId: "sub_1", bashPassCurrentPeriodEnd: null })).toBe(true);
|
|
116
|
+
expect(userHasActiveBashPass({
|
|
117
|
+
bashPassStripeSubscriptionId: "sub_1",
|
|
118
|
+
bashPassCurrentPeriodEnd: new Date(Date.now() + 86400000),
|
|
119
|
+
})).toBe(true);
|
|
120
|
+
expect(userHasActiveBashPass({
|
|
121
|
+
bashPassStripeSubscriptionId: "sub_1",
|
|
122
|
+
bashPassCurrentPeriodEnd: new Date(Date.now() - 86400000),
|
|
123
|
+
})).toBe(false);
|
|
124
|
+
});
|
|
72
125
|
});
|
|
73
126
|
describe("Ticket total price (USD)", () => {
|
|
74
127
|
test("calculateTotalPriceWithoutTax sums USD tiers only", () => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paymentUtils.test.js","sourceRoot":"","sources":["../../../src/utils/__tests__/paymentUtils.test.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,8BAA8B,EAC9B,qBAAqB,EACrB,qBAAqB,EACrB,mBAAmB,EACnB,yCAAyC,EACzC,kBAAkB,EAClB,iCAAiC,EACjC,6BAA6B,EAC7B,wBAAwB,EACxB,0BAA0B,EAC1B,yCAAyC,
|
|
1
|
+
{"version":3,"file":"paymentUtils.test.js","sourceRoot":"","sources":["../../../src/utils/__tests__/paymentUtils.test.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EACL,8BAA8B,EAC9B,qBAAqB,EACrB,qBAAqB,EACrB,mBAAmB,EACnB,yCAAyC,EACzC,kBAAkB,EAClB,iCAAiC,EACjC,6BAA6B,EAC7B,wBAAwB,EACxB,0BAA0B,EAC1B,yCAAyC,EACzC,6BAA6B,EAC7B,qCAAqC,EACrC,sCAAsC,EACtC,qBAAqB,GACtB,MAAM,oBAAoB,CAAC;AAE5B,QAAQ,CAAC,+BAA+B,EAAE,GAAG,EAAE;IAC7C,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;QACnC,IAAI,CAAC,uBAAuB,EAAE,GAAG,EAAE;YACjC,MAAM,CAAC,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC3C,MAAM,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAC7C,MAAM,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAClD,MAAM,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC5C,MAAM,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,uBAAuB,EAAE,GAAG,EAAE;YACjC,MAAM,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC3C,MAAM,CAAC,qBAAqB,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC7C,MAAM,CAAC,qBAAqB,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAClD,MAAM,CAAC,qBAAqB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC5C,MAAM,CAAC,qBAAqB,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACnD,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,uBAAuB,EAAE,GAAG,EAAE;YACjC,MAAM,OAAO,GAAG,MAAM,CAAC;YACvB,MAAM,KAAK,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;YAC7C,MAAM,aAAa,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;YACnD,MAAM,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;QACpC,IAAI,CAAC,uBAAuB,EAAE,GAAG,EAAE;YACjC,MAAM,SAAS,GAAQ;gBACrB,qBAAqB,EAAE,GAAG;gBAC1B,wBAAwB,EAAE,IAAI;aAC/B,CAAC;YACF,MAAM,CAAC,8BAA8B,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,qBAAqB,EAAE,GAAG,EAAE;YAC/B,MAAM,SAAS,GAAQ;gBACrB,qBAAqB,EAAE,IAAI;gBAC3B,wBAAwB,EAAE,EAAE;aAC7B,CAAC;YACF,MAAM,CAAC,8BAA8B,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAClE,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,4BAA4B,EAAE,GAAG,EAAE;YACtC,MAAM,CAAC,8BAA8B,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjE,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,cAAc,EAAE,GAAG,EAAE;YACxB,MAAM,SAAS,GAAQ;gBACrB,qBAAqB,EAAE,IAAI;gBAC3B,wBAAwB,EAAE,GAAG;aAC9B,CAAC;YACF,MAAM,CAAC,8BAA8B,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACnE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,eAAe,EAAE,GAAG,EAAE;QAC7B,IAAI,CAAC,8DAA8D,EAAE,GAAG,EAAE;YACxE,MAAM,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,mEAAmE,EAAE,GAAG,EAAE;YAC7E,MAAM,CAAC,yCAAyC,CAAC,KAAK,EAAE,OAAc,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACjF,MAAM,CAAC,yCAAyC,CAAC,KAAK,EAAE,SAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACnF,MAAM,CAAC,yCAAyC,CAAC,GAAG,EAAE,SAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACjF,MAAM,CAAC,yCAAyC,CAAC,MAAM,EAAE,OAAc,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACpF,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,oEAAoE,EAAE,GAAG,EAAE;YAC9E,MAAM,CAAC,iCAAiC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,cAAc;YAC1E,MAAM,CAAC,iCAAiC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACvD,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,4EAA4E,EAAE,GAAG,EAAE;YACtF,MAAM,CAAC,kBAAkB,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC5C,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,kDAAkD,EAAE,GAAG,EAAE;YAC5D,MAAM,CAAC,6BAA6B,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC7D,MAAM,CAAC,6BAA6B,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACzD,MAAM,CAAC,6BAA6B,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACzD,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,yEAAyE,EAAE,GAAG,EAAE;YACnF,MAAM,IAAI,GAAG;gBACX,UAAU,EAAE,KAAK;gBACjB,kBAAkB,EAAE,IAAI;gBACxB,eAAe,EAAE,IAAI;aACtB,CAAC;YACF,MAAM,CAAC,qCAAqC,CAAC,EAAE,GAAG,IAAI,EAAE,WAAW,EAAE,aAAa,EAAE,sBAAsB,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;gBAC5H,kBAAkB,EAAE,GAAG;gBACvB,sBAAsB,EAAE,CAAC;aAC1B,CAAC,CAAC;YACH,MAAM,CAAC,qCAAqC,CAAC,EAAE,GAAG,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,sBAAsB,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;gBAC1H,kBAAkB,EAAE,GAAG;gBACvB,sBAAsB,EAAE,GAAG;aAC5B,CAAC,CAAC;YACH,MAAM,CAAC,qCAAqC,CAAC,EAAE,GAAG,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,sBAAsB,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;gBACtH,kBAAkB,EAAE,GAAG;gBACvB,sBAAsB,EAAE,GAAG;aAC5B,CAAC,CAAC;YACH,MAAM,CAAC,qCAAqC,CAAC,EAAE,GAAG,IAAI,EAAE,WAAW,EAAE,WAAW,EAAE,sBAAsB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;gBACzH,kBAAkB,EAAE,GAAG;gBACvB,sBAAsB,EAAE,CAAC;aAC1B,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,yFAAyF,EAAE,GAAG,EAAE;YACnG,MAAM,CAAC,GAAG,sCAAsC,CAAC;gBAC/C,uBAAuB,EAAE,KAAK;gBAC9B,kBAAkB,EAAE,IAAI;gBACxB,eAAe,EAAE,IAAI;gBACrB,WAAW,EAAE,aAAa;gBAC1B,sBAAsB,EAAE,KAAK;aAC9B,CAAC,CAAC;YACH,MAAM,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACxC,MAAM,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YAC3C,MAAM,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,IAAI,CAAC,iCAAiC,CAAC,KAAK,CAAC,CAAC,CAAC;YAC/E,MAAM,CAAC,CAAC,CAAC,yBAAyB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,qBAAqB,GAAG,GAAG,CAAC,CAAC;QAC1E,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,uBAAuB,EAAE,GAAG,EAAE;YACjC,MAAM,CAAC,qBAAqB,CAAC,EAAE,4BAA4B,EAAE,IAAI,EAAE,wBAAwB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAClH,MAAM,CAAC,qBAAqB,CAAC,EAAE,4BAA4B,EAAE,OAAO,EAAE,wBAAwB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACpH,MAAM,CACJ,qBAAqB,CAAC;gBACpB,4BAA4B,EAAE,OAAO;gBACrC,wBAAwB,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC;aAC1D,CAAC,CACH,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACb,MAAM,CACJ,qBAAqB,CAAC;gBACpB,4BAA4B,EAAE,OAAO;gBACrC,wBAAwB,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC;aAC1D,CAAC,CACH,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAChB,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,0BAA0B,EAAE,GAAG,EAAE;QACxC,IAAI,CAAC,mDAAmD,EAAE,GAAG,EAAE;YAC7D,MAAM,KAAK,GAAG;gBACZ,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE;gBAC7C,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE;aACtC,CAAC;YACT,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC;gBACzB,CAAC,IAAI,EAAE,CAAC,EAAE,eAAe,EAAE,CAAC,EAAE,cAAc,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC;gBAC5D,CAAC,IAAI,EAAE,CAAC,EAAE,eAAe,EAAE,CAAC,EAAE,cAAc,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC;aAC7D,CAAC,CAAC;YACH,MAAM,CAAC,6BAA6B,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,iBAAiB;QACxF,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,yDAAyD,EAAE,GAAG,EAAE;YACnE,MAAM,KAAK,GAAG;gBACZ,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE;gBAC7C,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,WAAW,EAAE,YAAY,EAAE,eAAe,EAAE,EAAE,EAAE;aAClE,CAAC;YACT,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC;gBACzB,CAAC,IAAI,EAAE,CAAC,EAAE,eAAe,EAAE,CAAC,EAAE,cAAc,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC;gBAC5D,CAAC,IAAI,EAAE,CAAC,EAAE,eAAe,EAAE,CAAC,EAAE,cAAc,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC;aAC7D,CAAC,CAAC;YACH,MAAM,CAAC,6BAA6B,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtE,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,wDAAwD,EAAE,GAAG,EAAE;YAClE,MAAM,CAAC,6BAA6B,CAAC,EAAE,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC/D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACvC,IAAI,CAAC,qDAAqD,EAAE,GAAG,EAAE;YAC/D,MAAM,KAAK,GAAG;gBACZ,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE;gBAC7C,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,EAAE,WAAW,EAAE,YAAY,EAAE,eAAe,EAAE,GAAG,EAAE;aACjE,CAAC;YACT,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC;gBACzB,CAAC,IAAI,EAAE,CAAC,EAAE,eAAe,EAAE,CAAC,EAAE,cAAc,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC;gBAC5D,CAAC,IAAI,EAAE,CAAC,EAAE,eAAe,EAAE,CAAC,EAAE,cAAc,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC;aAC7D,CAAC,CAAC;YACH,MAAM,CAAC,wBAAwB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAChE,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,6DAA6D,EAAE,GAAG,EAAE;YACvE,MAAM,KAAK,GAAG,CAAC,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,KAAK,EAAE,CAAQ,CAAC;YACrE,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,eAAe,EAAE,CAAC,EAAE,cAAc,EAAE,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3F,MAAM,CAAC,wBAAwB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC9D,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,qBAAqB,EAAE,GAAG,EAAE;QACnC,IAAI,CAAC,oDAAoD,EAAE,GAAG,EAAE;YAC9D,+CAA+C;YAC/C,MAAM,CAAC,0BAA0B,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACtD,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,6CAA6C,EAAE,GAAG,EAAE;YACvD,MAAM,CAAC,0BAA0B,CAAC,GAAG,CAAC,CAAC,CAAC,sBAAsB,CAAC,EAAE,CAAC,CAAC;QACrE,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,sCAAsC,EAAE,GAAG,EAAE;QACpD,IAAI,CAAC,sDAAsD,EAAE,GAAG,EAAE;YAChE,MAAM,GAAG,GAAG,yCAAyC,CAAC,KAAK,EAAE,OAAc,CAAC,CAAC;YAC7E,MAAM,CAAC,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;YAC/B,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,wDAAwD,EAAE,GAAG,EAAE;YAClE,MAAM,GAAG,GAAG,yCAAyC,CAAC,KAAK,EAAE,SAAgB,CAAC,CAAC;YAC/E,MAAM,CAAC,GAAG,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,CAAC;QACxC,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,uEAAuE,EAAE,GAAG,EAAE;YACjF,MAAM,GAAG,GAAG,yCAAyC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YACnE,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACpC,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
@@ -69,6 +69,43 @@ export declare function calculateServiceFeeWithMembershipDiscount(total: number,
|
|
|
69
69
|
* @returns Platform fee in cents, respecting both percentage discount and cap
|
|
70
70
|
*/
|
|
71
71
|
export declare function calculatePartnerFeeWithMembershipDiscount(total: number, membershipTier?: MembershipTier | null): number;
|
|
72
|
+
/**
|
|
73
|
+
* Bash **platform** take rate on ticket gross (e.g. 3%). Separate from Stripe card processing pass-through.
|
|
74
|
+
*/
|
|
75
|
+
export declare function calculateBashPlatformFeeCents(grossCents: number, rate: number): number;
|
|
76
|
+
export type BashPlatformTicketFeeSplit = {
|
|
77
|
+
totalPlatformCents: number;
|
|
78
|
+
/** Shown as a separate checkout line when greater than 0 */
|
|
79
|
+
guestPlatformLineCents: number;
|
|
80
|
+
};
|
|
81
|
+
/**
|
|
82
|
+
* Split the Bash platform fee between guest line items vs host absorption using `feeHandling`.
|
|
83
|
+
* BashPass waives the **guest-visible** portion only; the host still funds the full platform fee when the guest pays nothing extra.
|
|
84
|
+
*/
|
|
85
|
+
export declare function splitBashPlatformFeeForTicketCheckout(args: {
|
|
86
|
+
grossCents: number;
|
|
87
|
+
platformFeeEnabled: boolean;
|
|
88
|
+
platformFeeRate: number;
|
|
89
|
+
feeHandling: string | null | undefined;
|
|
90
|
+
bashPassWaivesGuestFee: boolean;
|
|
91
|
+
}): BashPlatformTicketFeeSplit;
|
|
92
|
+
export declare function computeTicketApplicationFeeAmountCents(args: {
|
|
93
|
+
discountedSubtotalCents: number;
|
|
94
|
+
platformFeeEnabled: boolean;
|
|
95
|
+
platformFeeRate: number;
|
|
96
|
+
feeHandling: string | null | undefined;
|
|
97
|
+
bashPassWaivesGuestFee: boolean;
|
|
98
|
+
}): {
|
|
99
|
+
totalChargedCents: number;
|
|
100
|
+
stripeProcessingCents: number;
|
|
101
|
+
bashPlatformTotalCents: number;
|
|
102
|
+
applicationFeeAmountCents: number;
|
|
103
|
+
guestPlatformLineCents: number;
|
|
104
|
+
};
|
|
105
|
+
export declare function userHasActiveBashPass(user: {
|
|
106
|
+
bashPassStripeSubscriptionId: string | null | undefined;
|
|
107
|
+
bashPassCurrentPeriodEnd: Date | null | undefined;
|
|
108
|
+
}): boolean;
|
|
72
109
|
export type VenuePricingPlanData = {
|
|
73
110
|
name: string;
|
|
74
111
|
description: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paymentUtils.d.ts","sourceRoot":"","sources":["../../src/utils/paymentUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,cAAc,EAAE,UAAU,EAAE,gBAAgB,IAAI,sBAAsB,EAAE,MAAM,gBAAgB,CAAC;AAO5H,OAAO,EACL,sBAAsB,EAEvB,MAAM,mBAAmB,CAAC;AAE3B;;;;GAIG;AACH,wBAAgB,8BAA8B,CAC5C,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,kBAAkB,GAAG,SAAS,GACxC,MAAM,CAeR;AAED;;;;;GAKG;AACH,wBAAgB,6BAA6B,CAC3C,WAAW,EAAE,UAAU,EAAE,EACzB,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,sBAAsB,EAAE,CAAC,GAChD,MAAM,CAYR;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,UAAU,EAAE,EACzB,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,sBAAsB,EAAE,CAAC,GAChD,MAAM,CAYR;AAED,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAC/B,MAAM,CAKR;AACD,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAC/B,MAAM,CAKR;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,aAAa,EAAE,MAAM,GAAG,MAAM,CAIhE;AAED;;;GAGG;AACH,wBAAgB,iCAAiC,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAI7E;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAEtE;AAED;;;;;GAKG;AACH,wBAAgB,yCAAyC,CACvD,KAAK,EAAE,MAAM,EACb,cAAc,CAAC,EAAE,cAAc,GAAG,IAAI,GACrC,MAAM,CAkBR;AAED;;;;;;GAMG;AACH,wBAAgB,yCAAyC,CACvD,KAAK,EAAE,MAAM,EACb,cAAc,CAAC,EAAE,cAAc,GAAG,IAAI,GACrC,MAAM,CAeR;AAED;;;;;;GAMG;AACH,wBAAgB,yCAAyC,CACvD,KAAK,EAAE,MAAM,EACb,cAAc,CAAC,EAAE,cAAc,GAAG,IAAI,GACrC,MAAM,CAeR;AAMD,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;KAC/B,GAAG,IAAI,sBAAsB,GAAG,oBAAoB;CACtD,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,uBAAuB,EAAE,mBAe5B,CAAC"}
|
|
1
|
+
{"version":3,"file":"paymentUtils.d.ts","sourceRoot":"","sources":["../../src/utils/paymentUtils.ts"],"names":[],"mappings":"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"}
|
|
@@ -165,6 +165,67 @@ export function calculatePartnerFeeWithMembershipDiscount(total, membershipTier)
|
|
|
165
165
|
// Round to 2 decimal places (cents precision)
|
|
166
166
|
return parseFloat(calculatedFee.toFixed(2));
|
|
167
167
|
}
|
|
168
|
+
/**
|
|
169
|
+
* Bash **platform** take rate on ticket gross (e.g. 3%). Separate from Stripe card processing pass-through.
|
|
170
|
+
*/
|
|
171
|
+
export function calculateBashPlatformFeeCents(grossCents, rate) {
|
|
172
|
+
if (grossCents <= 0 || rate <= 0)
|
|
173
|
+
return 0;
|
|
174
|
+
return Math.floor(grossCents * rate);
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Split the Bash platform fee between guest line items vs host absorption using `feeHandling`.
|
|
178
|
+
* BashPass waives the **guest-visible** portion only; the host still funds the full platform fee when the guest pays nothing extra.
|
|
179
|
+
*/
|
|
180
|
+
export function splitBashPlatformFeeForTicketCheckout(args) {
|
|
181
|
+
const { grossCents, platformFeeEnabled, platformFeeRate, feeHandling, bashPassWaivesGuestFee } = args;
|
|
182
|
+
const total = platformFeeEnabled
|
|
183
|
+
? calculateBashPlatformFeeCents(grossCents, platformFeeRate)
|
|
184
|
+
: 0;
|
|
185
|
+
if (total <= 0) {
|
|
186
|
+
return { totalPlatformCents: 0, guestPlatformLineCents: 0 };
|
|
187
|
+
}
|
|
188
|
+
const mode = feeHandling ?? "HostAbsorbs";
|
|
189
|
+
let guestLine = 0;
|
|
190
|
+
if (mode === "GuestPays") {
|
|
191
|
+
guestLine = total;
|
|
192
|
+
}
|
|
193
|
+
else if (mode === "Split") {
|
|
194
|
+
guestLine = Math.floor(total / 2);
|
|
195
|
+
}
|
|
196
|
+
if (bashPassWaivesGuestFee && guestLine > 0) {
|
|
197
|
+
guestLine = 0;
|
|
198
|
+
}
|
|
199
|
+
return { totalPlatformCents: total, guestPlatformLineCents: guestLine };
|
|
200
|
+
}
|
|
201
|
+
export function computeTicketApplicationFeeAmountCents(args) {
|
|
202
|
+
const split = splitBashPlatformFeeForTicketCheckout({
|
|
203
|
+
grossCents: args.discountedSubtotalCents,
|
|
204
|
+
platformFeeEnabled: args.platformFeeEnabled,
|
|
205
|
+
platformFeeRate: args.platformFeeRate,
|
|
206
|
+
feeHandling: args.feeHandling,
|
|
207
|
+
bashPassWaivesGuestFee: args.bashPassWaivesGuestFee,
|
|
208
|
+
});
|
|
209
|
+
const guestPlatformLineCents = split.guestPlatformLineCents;
|
|
210
|
+
const bashPlatformTotalCents = split.totalPlatformCents;
|
|
211
|
+
const totalChargedCents = args.discountedSubtotalCents + guestPlatformLineCents;
|
|
212
|
+
const stripeProcessingCents = calculateStripeProcessingFeeCents(totalChargedCents);
|
|
213
|
+
const applicationFeeAmountCents = stripeProcessingCents + bashPlatformTotalCents;
|
|
214
|
+
return {
|
|
215
|
+
totalChargedCents,
|
|
216
|
+
stripeProcessingCents,
|
|
217
|
+
bashPlatformTotalCents,
|
|
218
|
+
applicationFeeAmountCents,
|
|
219
|
+
guestPlatformLineCents,
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
export function userHasActiveBashPass(user) {
|
|
223
|
+
if (!user.bashPassStripeSubscriptionId)
|
|
224
|
+
return false;
|
|
225
|
+
if (!user.bashPassCurrentPeriodEnd)
|
|
226
|
+
return true;
|
|
227
|
+
return user.bashPassCurrentPeriodEnd > new Date();
|
|
228
|
+
}
|
|
168
229
|
/**
|
|
169
230
|
* Venue pricing plan options
|
|
170
231
|
* Moved from venueUtils.ts for centralization
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"paymentUtils.js","sourceRoot":"","sources":["../../src/utils/paymentUtils.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"paymentUtils.js","sourceRoot":"","sources":["../../src/utils/paymentUtils.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bash-app/bash-common",
|
|
3
|
-
"version": "30.
|
|
3
|
+
"version": "30.220.0",
|
|
4
4
|
"description": "Common data and scripts to use on the frontend and backend",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -28,7 +28,6 @@
|
|
|
28
28
|
"@types/qrcode": "^1.5.5",
|
|
29
29
|
"lodash-es": "^4.17.21",
|
|
30
30
|
"mixpanel-browser": "^2.75.0",
|
|
31
|
-
"npm": "^11.11.0",
|
|
32
31
|
"qrcode": "^1.5.3",
|
|
33
32
|
"slugify": "^1.6.6"
|
|
34
33
|
},
|
|
@@ -49,6 +48,7 @@
|
|
|
49
48
|
"@types/react": "^18.3.2",
|
|
50
49
|
"@types/shelljs": "^0.10.0",
|
|
51
50
|
"jest": "^29.7.0",
|
|
51
|
+
"npm": "^11.11.0",
|
|
52
52
|
"shelljs": "^0.10.0",
|
|
53
53
|
"stripe": "^20.1.2",
|
|
54
54
|
"ts-jest": "^29.1.1",
|
package/prisma/schema.prisma
CHANGED
|
@@ -492,6 +492,7 @@ model Promoter {
|
|
|
492
492
|
createdAt DateTime @default(now())
|
|
493
493
|
updatedAt DateTime @updatedAt
|
|
494
494
|
userId String? // null until invited promoter signs up (do not use host id as placeholder)
|
|
495
|
+
invitedEmail String? // normalized invitee email for reconciliation when userId is null
|
|
495
496
|
promoCodes BashEventPromoCode[]
|
|
496
497
|
promoterUser User? @relation(fields: [userId], references: [id])
|
|
497
498
|
|
|
@@ -658,8 +659,20 @@ model BashEvent {
|
|
|
658
659
|
donationDetails String?
|
|
659
660
|
absorbDonationFees Boolean @default(false)
|
|
660
661
|
absorbTicketFees Boolean @default(false)
|
|
661
|
-
|
|
662
|
+
/// When true, attendees may request a refund from the app/email (host approves in Tickets → Refunds). When false, self-serve refund CTAs are hidden.
|
|
663
|
+
allowAttendeeRefundRequests Boolean @default(true)
|
|
664
|
+
// GuestPays / Split: Stripe processing + Bash platform fee presentation (see platformFeeEnabled).
|
|
662
665
|
feeHandling String @default("HostAbsorbs") // "GuestPays" | "HostAbsorbs" | "Split"
|
|
666
|
+
/// When true, Bash charges platformFeeRate on ticket gross (e.g. 3%) in addition to Stripe processing pass-through.
|
|
667
|
+
platformFeeEnabled Boolean @default(false)
|
|
668
|
+
/// Bash platform take rate on ticket gross (e.g. 0.03 = 3%). Ignored when platformFeeEnabled is false.
|
|
669
|
+
platformFeeRate Float @default(0.03)
|
|
670
|
+
/// Optional: attendees can tag which act they came to see; drives attribution reports and future payouts.
|
|
671
|
+
artistAttributionEnabled Boolean @default(false)
|
|
672
|
+
/// "percentage" | "flat" — how artistPayoutRate is interpreted for suggested splits (display/export).
|
|
673
|
+
artistPayoutMode String?
|
|
674
|
+
/// Percentage of door (0–100) or flat cents per ticket depending on artistPayoutMode.
|
|
675
|
+
artistPayoutRate Float?
|
|
663
676
|
topPromoterPrize String? // Optional prize label: "Free table for your crew"
|
|
664
677
|
promoterLeaderboardIsPublic Boolean @default(false) // Host opts in to public leaderboard
|
|
665
678
|
showAttendees Boolean @default(true)
|
|
@@ -815,12 +828,59 @@ model BashEvent {
|
|
|
815
828
|
eventGroups EventGroup[]
|
|
816
829
|
groupUnlockOffers GroupUnlockOffer[]
|
|
817
830
|
|
|
831
|
+
bashEventArtists BashEventArtist[]
|
|
832
|
+
|
|
818
833
|
@@index([templateId])
|
|
819
834
|
@@index([parentEventId])
|
|
820
835
|
@@index([organizationId])
|
|
821
836
|
@@index([eventSeriesId])
|
|
822
837
|
}
|
|
823
838
|
|
|
839
|
+
/// Lineup / attribution roster for an event (optional act list for checkout tagging).
|
|
840
|
+
model BashEventArtist {
|
|
841
|
+
id String @id @default(cuid())
|
|
842
|
+
bashEventId String
|
|
843
|
+
bashEvent BashEvent @relation(fields: [bashEventId], references: [id], onDelete: Cascade)
|
|
844
|
+
name String
|
|
845
|
+
serviceId String?
|
|
846
|
+
service Service? @relation(fields: [serviceId], references: [id], onDelete: SetNull)
|
|
847
|
+
sortOrder Int @default(0)
|
|
848
|
+
createdAt DateTime @default(now())
|
|
849
|
+
|
|
850
|
+
tickets Ticket[]
|
|
851
|
+
|
|
852
|
+
@@index([bashEventId])
|
|
853
|
+
@@index([serviceId])
|
|
854
|
+
}
|
|
855
|
+
|
|
856
|
+
enum BashCreativeStatus {
|
|
857
|
+
Pending
|
|
858
|
+
InReview
|
|
859
|
+
Editing
|
|
860
|
+
RevisionRequested
|
|
861
|
+
Delivered
|
|
862
|
+
}
|
|
863
|
+
|
|
864
|
+
/// Service provider promo video waitlist (Bash Creative).
|
|
865
|
+
model BashCreativeSubmission {
|
|
866
|
+
id String @id @default(cuid())
|
|
867
|
+
serviceId String
|
|
868
|
+
service Service @relation(fields: [serviceId], references: [id], onDelete: Cascade)
|
|
869
|
+
submittedById String?
|
|
870
|
+
submittedBy User? @relation(fields: [submittedById], references: [id], onDelete: SetNull)
|
|
871
|
+
status BashCreativeStatus @default(Pending)
|
|
872
|
+
scriptNotes String? @db.Text
|
|
873
|
+
footageUrl String?
|
|
874
|
+
deliverableUrl String?
|
|
875
|
+
requestedAt DateTime @default(now())
|
|
876
|
+
deliveredAt DateTime?
|
|
877
|
+
updatedAt DateTime @updatedAt
|
|
878
|
+
|
|
879
|
+
@@index([serviceId])
|
|
880
|
+
@@index([status])
|
|
881
|
+
@@index([submittedById])
|
|
882
|
+
}
|
|
883
|
+
|
|
824
884
|
enum SuggestionType {
|
|
825
885
|
Included
|
|
826
886
|
Allowed
|
|
@@ -1346,6 +1406,8 @@ model Ticket {
|
|
|
1346
1406
|
utmCampaign String?
|
|
1347
1407
|
|
|
1348
1408
|
bashEvent BashEvent @relation(fields: [bashEventId], references: [id])
|
|
1409
|
+
attributedArtistId String?
|
|
1410
|
+
attributedArtist BashEventArtist? @relation(fields: [attributedArtistId], references: [id], onDelete: SetNull)
|
|
1349
1411
|
checkout Checkout? @relation(fields: [checkoutId], references: [id])
|
|
1350
1412
|
forUser User? @relation("TicketsISent", fields: [forUserId], references: [id])
|
|
1351
1413
|
invitation Invitation? @relation("TicketsForInvitation", fields: [invitationId], references: [id])
|
|
@@ -1360,6 +1422,7 @@ model Ticket {
|
|
|
1360
1422
|
|
|
1361
1423
|
@@index([bashEventId])
|
|
1362
1424
|
@@index([waitlistUserId])
|
|
1425
|
+
@@index([attributedArtistId])
|
|
1363
1426
|
}
|
|
1364
1427
|
|
|
1365
1428
|
model TicketTransfer {
|
|
@@ -1851,6 +1914,9 @@ model User {
|
|
|
1851
1914
|
membershipLastBilledAt DateTime?
|
|
1852
1915
|
membershipFeaturedEventsUsed Int @default(0)
|
|
1853
1916
|
membershipStripeSubscriptionId String? @unique
|
|
1917
|
+
/// Optional consumer BashPass subscription (waives guest platform fee on tickets; monthly BashPoints).
|
|
1918
|
+
bashPassStripeSubscriptionId String? @unique
|
|
1919
|
+
bashPassCurrentPeriodEnd DateTime?
|
|
1854
1920
|
isVerified Boolean @default(false)
|
|
1855
1921
|
verificationMethod String?
|
|
1856
1922
|
verifiedAt DateTime?
|
|
@@ -1981,6 +2047,7 @@ model User {
|
|
|
1981
2047
|
ticketsISent Ticket[] @relation("TicketsISent")
|
|
1982
2048
|
ticketsIOwn Ticket[] @relation("TicketsIOwn")
|
|
1983
2049
|
bashEventDonations BashEventDonation[]
|
|
2050
|
+
bashCreativeSubmissions BashCreativeSubmission[]
|
|
1984
2051
|
ticketsOnWaitlist Ticket[] @relation("TicketsOnWaitlist")
|
|
1985
2052
|
transfersFrom TicketTransfer[] @relation("TransfersFrom")
|
|
1986
2053
|
transfersTo TicketTransfer[] @relation("TransfersTo")
|
|
@@ -2159,6 +2226,10 @@ model UserPreferences {
|
|
|
2159
2226
|
bashFeedDefaultTab String @default("all") // "all", "upcoming", "live", "past", "saved", "my-posts"
|
|
2160
2227
|
bashFeedDefaultSort String @default("chronological") // "for_you", "chronological", "trending", etc.
|
|
2161
2228
|
bashFeedFilters Json? // Saved filter preferences as JSON
|
|
2229
|
+
/// Services discovery: keyed by service type tab, e.g. { "Entertainment": { ... } }
|
|
2230
|
+
serviceFilterSettings Json?
|
|
2231
|
+
/// Venue discovery filter bar (same pattern as serviceFilterSettings)
|
|
2232
|
+
venueFilterSettings Json?
|
|
2162
2233
|
|
|
2163
2234
|
createdAt DateTime @default(now())
|
|
2164
2235
|
updatedAt DateTime @updatedAt
|
|
@@ -2167,6 +2238,8 @@ model UserPreferences {
|
|
|
2167
2238
|
allowTagging Boolean @default(true)
|
|
2168
2239
|
showActivityStatus Boolean @default(true)
|
|
2169
2240
|
hiddenBashIds String[] @default([])
|
|
2241
|
+
/// Stat card keys hidden on public profile (e.g. followersCount, servicesCount)
|
|
2242
|
+
hiddenProfileStatKeys String[] @default([])
|
|
2170
2243
|
hideActivitySection Boolean @default(false)
|
|
2171
2244
|
allowLocationSharing Boolean @default(false)
|
|
2172
2245
|
defaultLandingPage String @default("dashboard")
|
|
@@ -2350,6 +2423,16 @@ model BiometricCredential {
|
|
|
2350
2423
|
@@index([usedForVerification])
|
|
2351
2424
|
}
|
|
2352
2425
|
|
|
2426
|
+
/// Ephemeral WebAuthn authentication challenges (server-issued; consumed after verify)
|
|
2427
|
+
model WebAuthnChallenge {
|
|
2428
|
+
id String @id @default(cuid())
|
|
2429
|
+
challenge String @unique
|
|
2430
|
+
expiresAt DateTime
|
|
2431
|
+
createdAt DateTime @default(now())
|
|
2432
|
+
|
|
2433
|
+
@@index([expiresAt])
|
|
2434
|
+
}
|
|
2435
|
+
|
|
2353
2436
|
model Contact {
|
|
2354
2437
|
id String @id @default(cuid())
|
|
2355
2438
|
contactOwnerId String
|
|
@@ -2534,11 +2617,16 @@ model Service {
|
|
|
2534
2617
|
serviceListingStripeSubscriptionId String?
|
|
2535
2618
|
acceptsBashPoints Boolean @default(true) // NEW: Allow BashPoints payments
|
|
2536
2619
|
isVerified Boolean @default(false) // Service owner verified
|
|
2620
|
+
/// Paid discovery: featured placement on Services discovery (admin or tier).
|
|
2621
|
+
isFeaturedService Boolean @default(false)
|
|
2622
|
+
featuredServiceUntil DateTime?
|
|
2537
2623
|
isLicensed Boolean @default(false) // Has required licenses
|
|
2538
2624
|
verifiedAt DateTime? // When verification was approved
|
|
2539
2625
|
licenseNumber String? // License/registration number
|
|
2540
2626
|
certifications String[] @default([]) // Array of certification names
|
|
2541
2627
|
bashFeedPosts BashFeedPost[]
|
|
2628
|
+
bashEventArtists BashEventArtist[]
|
|
2629
|
+
bashCreativeSubmissions BashCreativeSubmission[]
|
|
2542
2630
|
associatedServicesReferencingMe AssociatedService[]
|
|
2543
2631
|
exhibitorBookingRequests ExhibitorBookingRequest[] @relation("ExhibitorBookingService")
|
|
2544
2632
|
notification Notification[]
|
|
@@ -3505,6 +3593,8 @@ model ServiceBookingDay {
|
|
|
3505
3593
|
serviceBookingRequestId String?
|
|
3506
3594
|
startDate DateTime
|
|
3507
3595
|
endDate DateTime
|
|
3596
|
+
/// Optional arrival/setup time label (e.g. "5:00 PM" or "2 hours before event"); used in reminder emails
|
|
3597
|
+
setupTime String?
|
|
3508
3598
|
subtotalBeforeTaxesCents Int @default(0)
|
|
3509
3599
|
totalBeforeTaxesCents Int
|
|
3510
3600
|
addOns ServiceBookingAddOn[]
|
|
@@ -7512,3 +7602,67 @@ model GroupUnlock {
|
|
|
7512
7602
|
@@unique([offerId, groupId])
|
|
7513
7603
|
@@index([groupId])
|
|
7514
7604
|
}
|
|
7605
|
+
|
|
7606
|
+
// ─── BashStore + Partner Ads ────────────────────────────────────────────────
|
|
7607
|
+
|
|
7608
|
+
enum PartnerTier {
|
|
7609
|
+
Affiliate
|
|
7610
|
+
Standard
|
|
7611
|
+
Featured
|
|
7612
|
+
}
|
|
7613
|
+
|
|
7614
|
+
model PartnerBrand {
|
|
7615
|
+
id String @id @default(cuid())
|
|
7616
|
+
name String
|
|
7617
|
+
logoUrl String?
|
|
7618
|
+
websiteUrl String?
|
|
7619
|
+
description String? @db.Text
|
|
7620
|
+
tier PartnerTier @default(Standard)
|
|
7621
|
+
isActive Boolean @default(true)
|
|
7622
|
+
affiliateBaseUrl String?
|
|
7623
|
+
listingFeeMonthly Int? // cents; null = affiliate-only
|
|
7624
|
+
createdAt DateTime @default(now())
|
|
7625
|
+
products PartnerProduct[]
|
|
7626
|
+
adSlots PartnerAdSlot[]
|
|
7627
|
+
|
|
7628
|
+
@@index([isActive, tier])
|
|
7629
|
+
}
|
|
7630
|
+
|
|
7631
|
+
model PartnerProduct {
|
|
7632
|
+
id String @id @default(cuid())
|
|
7633
|
+
brandId String
|
|
7634
|
+
brand PartnerBrand @relation(fields: [brandId], references: [id], onDelete: Cascade)
|
|
7635
|
+
name String
|
|
7636
|
+
description String? @db.Text
|
|
7637
|
+
imageUrl String?
|
|
7638
|
+
priceSummary String?
|
|
7639
|
+
affiliateUrl String
|
|
7640
|
+
categories String[]
|
|
7641
|
+
isActive Boolean @default(true)
|
|
7642
|
+
sortOrder Int @default(0)
|
|
7643
|
+
impressions Int @default(0)
|
|
7644
|
+
clicks Int @default(0)
|
|
7645
|
+
createdAt DateTime @default(now())
|
|
7646
|
+
adSlots PartnerAdSlot[]
|
|
7647
|
+
|
|
7648
|
+
@@index([brandId, isActive])
|
|
7649
|
+
}
|
|
7650
|
+
|
|
7651
|
+
model PartnerAdSlot {
|
|
7652
|
+
id String @id @default(cuid())
|
|
7653
|
+
brandId String
|
|
7654
|
+
productId String?
|
|
7655
|
+
wizardStep String? // e.g. "what_included", "how_services_dj"
|
|
7656
|
+
triggerTags String[]
|
|
7657
|
+
impressions Int @default(0)
|
|
7658
|
+
clicks Int @default(0)
|
|
7659
|
+
isActive Boolean @default(true)
|
|
7660
|
+
startsAt DateTime?
|
|
7661
|
+
endsAt DateTime?
|
|
7662
|
+
createdAt DateTime @default(now())
|
|
7663
|
+
brand PartnerBrand @relation(fields: [brandId], references: [id], onDelete: Cascade)
|
|
7664
|
+
product PartnerProduct? @relation(fields: [productId], references: [id], onDelete: SetNull)
|
|
7665
|
+
|
|
7666
|
+
@@index([isActive, wizardStep])
|
|
7667
|
+
@@index([brandId])
|
|
7668
|
+
}
|
package/src/definitions.ts
CHANGED
|
@@ -15,7 +15,12 @@ import {
|
|
|
15
15
|
YearsOfExperience,
|
|
16
16
|
} from "@prisma/client";
|
|
17
17
|
import type { BashEventDressTags, BashEventVibeTags } from "@prisma/client";
|
|
18
|
-
import {
|
|
18
|
+
import {
|
|
19
|
+
CheckoutExt,
|
|
20
|
+
PublicUser,
|
|
21
|
+
ServiceBookingExt,
|
|
22
|
+
type UserExt,
|
|
23
|
+
} from "./extendedSchemas.js";
|
|
19
24
|
import { LuxonDateRange } from "./utils/luxonUtils.js";
|
|
20
25
|
import { ApiServiceCantBookReason } from "./utils/service/apiServiceBookingApiUtils.js";
|
|
21
26
|
import { ServiceAttendeeOption } from "./utils/service/attendeeOptionUtils.js";
|
|
@@ -318,7 +323,7 @@ export type DateTimeArgType = Date | string | undefined | null;
|
|
|
318
323
|
export type RequiredStripeInfoMissingErrorDataType = {
|
|
319
324
|
[k in keyof User]?: { type: string; label: string };
|
|
320
325
|
};
|
|
321
|
-
export type ContactOrUser = Contact | PublicUser;
|
|
326
|
+
export type ContactOrUser = Contact | PublicUser | UserExt;
|
|
322
327
|
|
|
323
328
|
export type ValueOf<T> = T[keyof T];
|
|
324
329
|
|
package/src/extendedSchemas.ts
CHANGED
|
@@ -2,6 +2,7 @@ import {
|
|
|
2
2
|
AmountOfGuests,
|
|
3
3
|
AssociatedBash,
|
|
4
4
|
AssociatedService,
|
|
5
|
+
BashAvailability,
|
|
5
6
|
BashComment,
|
|
6
7
|
BashEvent,
|
|
7
8
|
BashEventSuggestion,
|
|
@@ -791,6 +792,13 @@ export const SERVICE_BOOKING_PUBLIC_DATA_TO_INCLUDE = {
|
|
|
791
792
|
},
|
|
792
793
|
} satisfies Prisma.ServiceBookingInclude;
|
|
793
794
|
|
|
795
|
+
/** Minimal service shape returned by profile booking list APIs (`serviceName` is the DB column). */
|
|
796
|
+
export type BookingServiceRef = {
|
|
797
|
+
id: string;
|
|
798
|
+
serviceName: string;
|
|
799
|
+
serviceType: string;
|
|
800
|
+
};
|
|
801
|
+
|
|
794
802
|
export const SERVICE_BOOKING_PRIVATE_DATA_TO_INCLUDE = {
|
|
795
803
|
...SERVICE_BOOKING_PUBLIC_DATA_TO_INCLUDE,
|
|
796
804
|
checkout: {
|
|
@@ -1189,6 +1197,15 @@ export interface UserExt extends User {
|
|
|
1189
1197
|
stats?: UserStats | null;
|
|
1190
1198
|
demerits?: Demerit[] | null;
|
|
1191
1199
|
|
|
1200
|
+
/**
|
|
1201
|
+
* Computed by public user API when `showBirthdayOnProfile` is true (not a DB column).
|
|
1202
|
+
* Example: "April 3".
|
|
1203
|
+
*/
|
|
1204
|
+
birthdayDisplay?: string;
|
|
1205
|
+
|
|
1206
|
+
/** Included when the user query selects the `UserAvailability` relation (not on default Prisma `User`). */
|
|
1207
|
+
bashAvailability?: BashAvailability | null;
|
|
1208
|
+
|
|
1192
1209
|
// Do not include in fetch as there could be thousands of these
|
|
1193
1210
|
userSubscription?: UserSubscriptionExt | null;
|
|
1194
1211
|
associatedBashes?: AssociatedBash[] | null;
|
package/src/index.ts
CHANGED
|
@@ -4,6 +4,7 @@ export * from "./utmAttribution.js";
|
|
|
4
4
|
export * from "./venueLoyaltyRedemption.js";
|
|
5
5
|
export * from "./stripeListingSubscriptionMessages.js";
|
|
6
6
|
export * from "./extendedSchemas.js";
|
|
7
|
+
export * from "./partnerStoreTypes.js";
|
|
7
8
|
export * from "./bashFeedTypes.js";
|
|
8
9
|
export * from "./membershipDefinitions.js";
|
|
9
10
|
|
|
@@ -133,6 +134,7 @@ export {
|
|
|
133
134
|
PrivateChefFormat,
|
|
134
135
|
PrizePaymentMethod,
|
|
135
136
|
PrizePaymentStatus,
|
|
137
|
+
PartnerTier,
|
|
136
138
|
PrizeType,
|
|
137
139
|
ProjectorSetupFormat,
|
|
138
140
|
PromoterFormat,
|
|
@@ -224,6 +226,9 @@ export type {
|
|
|
224
226
|
Link,
|
|
225
227
|
Media,
|
|
226
228
|
Organization,
|
|
229
|
+
PartnerAdSlot,
|
|
230
|
+
PartnerBrand,
|
|
231
|
+
PartnerProduct,
|
|
227
232
|
Recurrence,
|
|
228
233
|
Service,
|
|
229
234
|
ServiceAddon,
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import type { PartnerTier } from "@prisma/client";
|
|
2
|
+
|
|
3
|
+
/** Product row returned by BashStore / wizard suggestion APIs (no internal counters). */
|
|
4
|
+
export type PartnerProductPublic = {
|
|
5
|
+
id: string;
|
|
6
|
+
brandId: string;
|
|
7
|
+
name: string;
|
|
8
|
+
description: string | null;
|
|
9
|
+
imageUrl: string | null;
|
|
10
|
+
priceSummary: string | null;
|
|
11
|
+
affiliateUrl: string;
|
|
12
|
+
categories: string[];
|
|
13
|
+
sortOrder: number;
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
export type PartnerBrandSummary = {
|
|
17
|
+
id: string;
|
|
18
|
+
name: string;
|
|
19
|
+
logoUrl: string | null;
|
|
20
|
+
websiteUrl: string | null;
|
|
21
|
+
description: string | null;
|
|
22
|
+
tier: PartnerTier;
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
/** GET /api/partner/store */
|
|
26
|
+
export type PartnerStoreResponse = {
|
|
27
|
+
featured: (PartnerBrandSummary & { products: PartnerProductPublic[] }) | null;
|
|
28
|
+
brands: (PartnerBrandSummary & { products: PartnerProductPublic[] })[];
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
/** GET /api/partner/suggestions — at most one suggestion */
|
|
32
|
+
export type PartnerSuggestionResponse = {
|
|
33
|
+
slotId: string;
|
|
34
|
+
product: PartnerProductPublic;
|
|
35
|
+
brand: PartnerBrandSummary;
|
|
36
|
+
};
|