@bash-app/bash-common 30.118.1 â 30.119.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 +3 -0
- package/dist/definitions.d.ts.map +1 -1
- package/dist/definitions.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/membershipDefinitions.d.ts +9 -5
- package/dist/membershipDefinitions.d.ts.map +1 -1
- package/dist/membershipDefinitions.js +28 -24
- package/dist/membershipDefinitions.js.map +1 -1
- package/dist/utils/bashPointsPaymentUtils.d.ts +55 -0
- package/dist/utils/bashPointsPaymentUtils.d.ts.map +1 -0
- package/dist/utils/bashPointsPaymentUtils.js +79 -0
- package/dist/utils/bashPointsPaymentUtils.js.map +1 -0
- package/dist/utils/index.d.ts +1 -1
- package/dist/utils/index.d.ts.map +1 -1
- package/dist/utils/index.js +1 -1
- package/dist/utils/index.js.map +1 -1
- package/dist/utils/ticketListUtils.d.ts +2 -1
- package/dist/utils/ticketListUtils.d.ts.map +1 -1
- package/dist/utils/ticketListUtils.js +61 -11
- package/dist/utils/ticketListUtils.js.map +1 -1
- package/package.json +1 -1
- package/prisma/migrations/add_bashcash_pricing_to_ticket_tier.sql +15 -0
- package/prisma/migrations/add_bashpoints_purchase_tracking.sql +33 -0
- package/prisma/migrations/add_pricing_type_enum.sql +88 -0
- package/prisma/migrations/diagnostic_bashcash_columns.sql +157 -0
- package/prisma/migrations/fix_bashcash_referral_code_schema_mismatch.sql +81 -0
- package/prisma/migrations/rename_bashcash_to_bashpoints.sql +183 -0
- package/prisma/migrations/rename_bashcredits_to_bashpoints.sql +96 -0
- package/prisma/schema.prisma +64 -48
- package/src/definitions.ts +3 -0
- package/src/index.ts +1 -1
- package/src/membershipDefinitions.ts +29 -25
- package/src/utils/bashPointsPaymentUtils.ts +107 -0
- package/src/utils/index.ts +1 -1
- package/src/utils/ticketListUtils.ts +64 -10
- package/src/utils/bashCashPaymentUtils.ts +0 -146
package/dist/utils/index.js
CHANGED
|
@@ -3,7 +3,7 @@ export * from './apiUtils';
|
|
|
3
3
|
export * from './arrayUtils';
|
|
4
4
|
export * from './awsS3Utils';
|
|
5
5
|
export * from './badgeUtils';
|
|
6
|
-
export * from './
|
|
6
|
+
export * from './bashPointsPaymentUtils';
|
|
7
7
|
export * from './blog/blogDbUtils';
|
|
8
8
|
export * from './blogUtils';
|
|
9
9
|
export * from './contentFilterUtils';
|
package/dist/utils/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/utils/index.ts"],"names":[],"mappings":"AAAA,cAAc,gBAAgB,CAAC;AAC/B,cAAc,YAAY,CAAC;AAC3B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,cAAc,CAAC;AAC7B,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,sBAAsB,CAAC;AACrC,cAAc,iBAAiB,CAAC;AAChC,cAAc,eAAe,CAAC;AAC9B,cAAc,wBAAwB,CAAC;AACvC,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,mBAAmB,CAAC;AAClC,cAAc,eAAe,CAAC;AAC9B,cAAc,qCAAqC,CAAC;AACpD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,uCAAuC,CAAC;AACtD,cAAc,sBAAsB,CAAC;AACrC,cAAc,qCAAqC,CAAC;AACpD,cAAc,+BAA+B,CAAC;AAC9C,cAAc,0BAA0B,CAAC;AACzC,6EAA6E;AAC7E,cAAc,4BAA4B,CAAC;AAC3C,cAAc,4BAA4B,CAAC;AAC3C,cAAc,wBAAwB,CAAC;AACvC,cAAc,aAAa,CAAC;AAC5B,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,sBAAsB,CAAC;AACrC,cAAc,mBAAmB,CAAC;AAClC,cAAc,aAAa,CAAC;AAC5B,cAAc,YAAY,CAAC;AAC3B,cAAc,sBAAsB,CAAC;AACrC,cAAc,yBAAyB,CAAC;AACxC,cAAc,aAAa,CAAC;AAC5B,cAAc,sBAAsB,CAAC"}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { NumberOfTicketsForDate } from "../definitions";
|
|
2
2
|
/**
|
|
3
3
|
* Returns A string structured like: [ticketTierId]__[numberOfTickets];;[date]~~[numberOfTickets];;[date]~~,...
|
|
4
|
+
* The returned string is Base64 URL-safe encoded to prevent routing issues
|
|
4
5
|
* @param ticketList A map where the key is the ticketTierId
|
|
5
6
|
*/
|
|
6
7
|
export declare function ticketListToString(ticketList: Map<string, NumberOfTicketsForDate[]>): string;
|
|
7
8
|
/**
|
|
8
9
|
* Returns map where the key is the ticketTierId
|
|
9
|
-
* @param ticketListStr A string
|
|
10
|
+
* @param ticketListStr A Base64 URL-safe encoded string that decodes to: [ticketTierId]__[numberOfTickets];;[date]~~[numberOfTickets];;[date]~~...,...
|
|
10
11
|
*/
|
|
11
12
|
export declare function ticketListStrToTicketList(ticketListStr: string): Map<string, NumberOfTicketsForDate[]>;
|
|
12
13
|
//# sourceMappingURL=ticketListUtils.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ticketListUtils.d.ts","sourceRoot":"","sources":["../../src/utils/ticketListUtils.ts"],"names":[],"mappings":"AACA,OAAO,EACL,sBAAsB,EAKvB,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"ticketListUtils.d.ts","sourceRoot":"","sources":["../../src/utils/ticketListUtils.ts"],"names":[],"mappings":"AACA,OAAO,EACL,sBAAsB,EAKvB,MAAM,gBAAgB,CAAC;AAiDxB;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,sBAAsB,EAAE,CAAC,GAChD,MAAM,CAsCR;AAED;;;GAGG;AACH,wBAAgB,yBAAyB,CACvC,aAAa,EAAE,MAAM,GACpB,GAAG,CAAC,MAAM,EAAE,sBAAsB,EAAE,CAAC,CAqDvC"}
|
|
@@ -1,49 +1,99 @@
|
|
|
1
1
|
import { DateTime } from "luxon";
|
|
2
2
|
import { URL_PARAMS_NUMBER_OF_TICKETS_TICKETS_DATE_DELIM, URL_PARAMS_TICKET_LIST_DELIM, URL_PARAMS_TICKET_TIER_ID_NUMBER_OF_TICKETS_DATE_DELIM, URL_PARAMS_TICKETS_DATE_DELIM, } from "../definitions";
|
|
3
3
|
import { dateTimeFormat, dateTimeFromDate, } from "./luxonUtils";
|
|
4
|
+
/**
|
|
5
|
+
* Encodes a string to Base64 URL-safe format
|
|
6
|
+
* Replaces + with -, / with _, and removes = padding
|
|
7
|
+
*/
|
|
8
|
+
function encodeBase64UrlSafe(str) {
|
|
9
|
+
if (typeof window !== "undefined") {
|
|
10
|
+
// Browser environment
|
|
11
|
+
return btoa(str)
|
|
12
|
+
.replace(/\+/g, "-")
|
|
13
|
+
.replace(/\//g, "_")
|
|
14
|
+
.replace(/=/g, "");
|
|
15
|
+
}
|
|
16
|
+
else {
|
|
17
|
+
// Node environment
|
|
18
|
+
return Buffer.from(str)
|
|
19
|
+
.toString("base64")
|
|
20
|
+
.replace(/\+/g, "-")
|
|
21
|
+
.replace(/\//g, "_")
|
|
22
|
+
.replace(/=/g, "");
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Decodes a Base64 URL-safe string
|
|
27
|
+
* Replaces - with +, _ with /, and adds back = padding
|
|
28
|
+
*/
|
|
29
|
+
function decodeBase64UrlSafe(str) {
|
|
30
|
+
// Add back padding
|
|
31
|
+
let base64 = str.replace(/-/g, "+").replace(/_/g, "/");
|
|
32
|
+
while (base64.length % 4) {
|
|
33
|
+
base64 += "=";
|
|
34
|
+
}
|
|
35
|
+
if (typeof window !== "undefined") {
|
|
36
|
+
// Browser environment
|
|
37
|
+
return atob(base64);
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
// Node environment
|
|
41
|
+
return Buffer.from(base64, "base64").toString();
|
|
42
|
+
}
|
|
43
|
+
}
|
|
4
44
|
/**
|
|
5
45
|
* Returns A string structured like: [ticketTierId]__[numberOfTickets];;[date]~~[numberOfTickets];;[date]~~,...
|
|
46
|
+
* The returned string is Base64 URL-safe encoded to prevent routing issues
|
|
6
47
|
* @param ticketList A map where the key is the ticketTierId
|
|
7
48
|
*/
|
|
8
49
|
export function ticketListToString(ticketList) {
|
|
9
50
|
const ticketListArr = [];
|
|
10
51
|
for (const [ticketTierId, ticketListArgs] of ticketList.entries()) {
|
|
11
|
-
let ticketsExist = true;
|
|
12
52
|
const ticketArgs = [
|
|
13
53
|
`${ticketTierId}${URL_PARAMS_TICKET_TIER_ID_NUMBER_OF_TICKETS_DATE_DELIM}`,
|
|
14
54
|
];
|
|
55
|
+
let hasAnyTickets = false; // Track if we added ANY valid tickets for this tier
|
|
15
56
|
for (const ticketNumAndDates of ticketListArgs) {
|
|
16
57
|
if (ticketNumAndDates.numberOfTickets > 0) {
|
|
17
|
-
|
|
18
|
-
// Ensure ticketDateTime is in ISO format
|
|
58
|
+
hasAnyTickets = true;
|
|
59
|
+
// Ensure ticketDateTime is in ISO format (URL-safe)
|
|
19
60
|
let dateTimeStr = ticketNumAndDates.ticketDateTime;
|
|
20
61
|
if (dateTimeStr) {
|
|
21
62
|
// If it's already a string, try to parse it as DateTime and convert to ISO
|
|
22
63
|
const dateTime = dateTimeFromDate(dateTimeStr);
|
|
23
64
|
if (dateTime.isValid) {
|
|
24
|
-
dateTimeStr =
|
|
65
|
+
dateTimeStr = dateTime.toISO() || dateTimeStr;
|
|
25
66
|
}
|
|
26
67
|
}
|
|
27
68
|
ticketArgs.push(`${ticketNumAndDates.numberOfTickets}${URL_PARAMS_TICKETS_DATE_DELIM}${dateTimeStr}`);
|
|
28
69
|
}
|
|
29
|
-
else {
|
|
30
|
-
ticketsExist = false;
|
|
31
|
-
}
|
|
32
70
|
}
|
|
33
|
-
if
|
|
71
|
+
// Only include this tier if we found at least one ticket > 0
|
|
72
|
+
if (hasAnyTickets) {
|
|
34
73
|
ticketListArr.push(ticketArgs.join(URL_PARAMS_NUMBER_OF_TICKETS_TICKETS_DATE_DELIM));
|
|
35
74
|
}
|
|
36
75
|
}
|
|
37
|
-
|
|
76
|
+
const plainString = ticketListArr.join(URL_PARAMS_TICKET_LIST_DELIM);
|
|
77
|
+
return encodeBase64UrlSafe(plainString);
|
|
38
78
|
}
|
|
39
79
|
/**
|
|
40
80
|
* Returns map where the key is the ticketTierId
|
|
41
|
-
* @param ticketListStr A string
|
|
81
|
+
* @param ticketListStr A Base64 URL-safe encoded string that decodes to: [ticketTierId]__[numberOfTickets];;[date]~~[numberOfTickets];;[date]~~...,...
|
|
42
82
|
*/
|
|
43
83
|
export function ticketListStrToTicketList(ticketListStr) {
|
|
44
84
|
const ticketList = new Map();
|
|
85
|
+
// Decode the Base64 URL-safe string first
|
|
86
|
+
let decodedStr;
|
|
87
|
+
try {
|
|
88
|
+
decodedStr = decodeBase64UrlSafe(ticketListStr);
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
console.error("Failed to decode ticketListStr:", error);
|
|
92
|
+
// If decoding fails, try using the string as-is (for backward compatibility)
|
|
93
|
+
decodedStr = ticketListStr;
|
|
94
|
+
}
|
|
45
95
|
// [ticketTierId]__~~[numberOfTickets];;[date]~~[numberOfTickets];;[date]~~...,...
|
|
46
|
-
const ticketListArgs =
|
|
96
|
+
const ticketListArgs = decodedStr.split(URL_PARAMS_TICKET_LIST_DELIM);
|
|
47
97
|
ticketListArgs.forEach((tierIdAndTicketNumbersAndDates) => {
|
|
48
98
|
const ticketNumAndDatesArr = [];
|
|
49
99
|
// [ticketTierId]__~~[numberOfTickets];;[date]~~[numberOfTickets];;[date]~~...
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ticketListUtils.js","sourceRoot":"","sources":["../../src/utils/ticketListUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AACjC,OAAO,EAEL,+CAA+C,EAC/C,4BAA4B,EAC5B,sDAAsD,EACtD,6BAA6B,GAC9B,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,cAAc,EACd,gBAAgB,GAGjB,MAAM,cAAc,CAAC;AAEtB;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAChC,UAAiD;IAEjD,MAAM,aAAa,GAAa,EAAE,CAAC;IAEnC,KAAK,MAAM,CAAC,YAAY,EAAE,cAAc,CAAC,IAAI,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC;QAClE,
|
|
1
|
+
{"version":3,"file":"ticketListUtils.js","sourceRoot":"","sources":["../../src/utils/ticketListUtils.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
-- Migration: Add BashCash pricing support to TicketTier
|
|
2
|
+
-- Date: 2026-01-25
|
|
3
|
+
-- Description: Adds pricingType and priceBashCash fields to support peer-to-peer BashCash ticket economy
|
|
4
|
+
|
|
5
|
+
-- Add pricingType field (default to 'USD' for existing tickets)
|
|
6
|
+
ALTER TABLE "TicketTier"
|
|
7
|
+
ADD COLUMN IF NOT EXISTS "pricingType" TEXT NOT NULL DEFAULT 'USD';
|
|
8
|
+
|
|
9
|
+
-- Add priceBashCash field (nullable, only used when pricingType='BASHCASH')
|
|
10
|
+
ALTER TABLE "TicketTier"
|
|
11
|
+
ADD COLUMN IF NOT EXISTS "priceBashCash" INTEGER;
|
|
12
|
+
|
|
13
|
+
-- Add comment for documentation
|
|
14
|
+
COMMENT ON COLUMN "TicketTier"."pricingType" IS 'Ticket pricing type: USD (paid with dollars) or BASHCASH (paid with credits)';
|
|
15
|
+
COMMENT ON COLUMN "TicketTier"."priceBashCash" IS 'Price in BashCash credits (only used when pricingType=BASHCASH, peer-to-peer transfer)';
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
-- Add BashPoints purchase tracking to Ticket model
|
|
2
|
+
-- This allows tickets to be purchased with either USD (Stripe) or BashPoints (peer-to-peer)
|
|
3
|
+
|
|
4
|
+
DO $$ BEGIN
|
|
5
|
+
-- Add purchaseType column if it doesn't exist
|
|
6
|
+
IF NOT EXISTS (
|
|
7
|
+
SELECT 1 FROM information_schema.columns
|
|
8
|
+
WHERE table_name = 'Ticket' AND column_name = 'purchaseType'
|
|
9
|
+
) THEN
|
|
10
|
+
ALTER TABLE "Ticket" ADD COLUMN "purchaseType" TEXT;
|
|
11
|
+
COMMENT ON COLUMN "Ticket"."purchaseType" IS 'How ticket was purchased: USD, BashPoints, Free, Comp';
|
|
12
|
+
END IF;
|
|
13
|
+
|
|
14
|
+
-- Add pointsPaid column if it doesn't exist
|
|
15
|
+
IF NOT EXISTS (
|
|
16
|
+
SELECT 1 FROM information_schema.columns
|
|
17
|
+
WHERE table_name = 'Ticket' AND column_name = 'pointsPaid'
|
|
18
|
+
) THEN
|
|
19
|
+
ALTER TABLE "Ticket" ADD COLUMN "pointsPaid" INTEGER;
|
|
20
|
+
COMMENT ON COLUMN "Ticket"."pointsPaid" IS 'BashPoints amount paid (if purchaseType=BashPoints)';
|
|
21
|
+
END IF;
|
|
22
|
+
|
|
23
|
+
-- Add stripePurchaseId column if it doesn't exist
|
|
24
|
+
IF NOT EXISTS (
|
|
25
|
+
SELECT 1 FROM information_schema.columns
|
|
26
|
+
WHERE table_name = 'Ticket' AND column_name = 'stripePurchaseId'
|
|
27
|
+
) THEN
|
|
28
|
+
ALTER TABLE "Ticket" ADD COLUMN "stripePurchaseId" TEXT;
|
|
29
|
+
COMMENT ON COLUMN "Ticket"."stripePurchaseId" IS 'Stripe payment ID (if purchaseType=USD)';
|
|
30
|
+
END IF;
|
|
31
|
+
|
|
32
|
+
RAISE NOTICE 'BashPoints purchase tracking columns added to Ticket table';
|
|
33
|
+
END $$;
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
-- Add PricingType enum for TicketTier
|
|
2
|
+
-- This enum determines whether a ticket tier is priced in USD or BashPoints
|
|
3
|
+
|
|
4
|
+
-- Step 1: Create the enum type
|
|
5
|
+
DO $$
|
|
6
|
+
BEGIN
|
|
7
|
+
IF NOT EXISTS (SELECT 1 FROM pg_type WHERE typname = 'PricingType') THEN
|
|
8
|
+
CREATE TYPE "PricingType" AS ENUM ('USD', 'BASHPOINTS');
|
|
9
|
+
RAISE NOTICE 'â
Created PricingType enum';
|
|
10
|
+
ELSE
|
|
11
|
+
RAISE NOTICE 'âšī¸ PricingType enum already exists';
|
|
12
|
+
END IF;
|
|
13
|
+
END $$;
|
|
14
|
+
|
|
15
|
+
-- Step 2: Check if column exists as String
|
|
16
|
+
DO $$
|
|
17
|
+
BEGIN
|
|
18
|
+
IF EXISTS (
|
|
19
|
+
SELECT 1 FROM information_schema.columns
|
|
20
|
+
WHERE table_name = 'TicketTier'
|
|
21
|
+
AND column_name = 'pricingType'
|
|
22
|
+
AND data_type = 'text'
|
|
23
|
+
) THEN
|
|
24
|
+
-- Column exists as text, convert to enum
|
|
25
|
+
|
|
26
|
+
-- First, update any invalid values to 'USD'
|
|
27
|
+
UPDATE "TicketTier"
|
|
28
|
+
SET "pricingType" = 'USD'
|
|
29
|
+
WHERE "pricingType" NOT IN ('USD', 'BASHPOINTS');
|
|
30
|
+
|
|
31
|
+
-- Drop the default constraint if it exists
|
|
32
|
+
ALTER TABLE "TicketTier"
|
|
33
|
+
ALTER COLUMN "pricingType" DROP DEFAULT;
|
|
34
|
+
|
|
35
|
+
-- Convert the column to enum type
|
|
36
|
+
ALTER TABLE "TicketTier"
|
|
37
|
+
ALTER COLUMN "pricingType" TYPE "PricingType"
|
|
38
|
+
USING "pricingType"::"PricingType";
|
|
39
|
+
|
|
40
|
+
-- Re-add the default
|
|
41
|
+
ALTER TABLE "TicketTier"
|
|
42
|
+
ALTER COLUMN "pricingType" SET DEFAULT 'USD'::"PricingType";
|
|
43
|
+
|
|
44
|
+
RAISE NOTICE 'â
Converted TicketTier.pricingType from text to PricingType enum';
|
|
45
|
+
ELSIF EXISTS (
|
|
46
|
+
SELECT 1 FROM information_schema.columns
|
|
47
|
+
WHERE table_name = 'TicketTier'
|
|
48
|
+
AND column_name = 'pricingType'
|
|
49
|
+
) THEN
|
|
50
|
+
RAISE NOTICE 'âšī¸ TicketTier.pricingType already exists (might already be enum)';
|
|
51
|
+
ELSE
|
|
52
|
+
-- Column doesn't exist, create it as enum
|
|
53
|
+
ALTER TABLE "TicketTier"
|
|
54
|
+
ADD COLUMN "pricingType" "PricingType" NOT NULL DEFAULT 'USD'::"PricingType";
|
|
55
|
+
|
|
56
|
+
RAISE NOTICE 'â
Added TicketTier.pricingType column as PricingType enum';
|
|
57
|
+
END IF;
|
|
58
|
+
END $$;
|
|
59
|
+
|
|
60
|
+
-- Step 3: Verify priceBashPoints column exists
|
|
61
|
+
DO $$
|
|
62
|
+
BEGIN
|
|
63
|
+
IF NOT EXISTS (
|
|
64
|
+
SELECT 1 FROM information_schema.columns
|
|
65
|
+
WHERE table_name = 'TicketTier' AND column_name = 'priceBashPoints'
|
|
66
|
+
) THEN
|
|
67
|
+
ALTER TABLE "TicketTier" ADD COLUMN "priceBashPoints" INTEGER;
|
|
68
|
+
RAISE NOTICE 'â
Added TicketTier.priceBashPoints column';
|
|
69
|
+
ELSE
|
|
70
|
+
RAISE NOTICE 'âšī¸ TicketTier.priceBashPoints column already exists';
|
|
71
|
+
END IF;
|
|
72
|
+
END $$;
|
|
73
|
+
|
|
74
|
+
-- Step 4: Add helpful comment
|
|
75
|
+
COMMENT ON COLUMN "TicketTier"."pricingType" IS 'Determines payment method: USD (credit card) or BASHPOINTS (peer-to-peer loyalty points)';
|
|
76
|
+
COMMENT ON COLUMN "TicketTier"."priceBashPoints" IS 'Price in BashPoints when pricingType=BASHPOINTS (floating market value set by host)';
|
|
77
|
+
|
|
78
|
+
-- Verification
|
|
79
|
+
SELECT
|
|
80
|
+
column_name,
|
|
81
|
+
data_type,
|
|
82
|
+
udt_name,
|
|
83
|
+
column_default,
|
|
84
|
+
is_nullable
|
|
85
|
+
FROM information_schema.columns
|
|
86
|
+
WHERE table_name = 'TicketTier'
|
|
87
|
+
AND column_name IN ('pricingType', 'priceBashPoints')
|
|
88
|
+
ORDER BY column_name;
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
-- Diagnostic Script: Check Current BashCash/BashPoints Column Names
|
|
2
|
+
-- Run this first to see what exists in your database
|
|
3
|
+
|
|
4
|
+
-- =====================================================================
|
|
5
|
+
-- CHECK FOR BASHCASH COLUMNS
|
|
6
|
+
-- =====================================================================
|
|
7
|
+
|
|
8
|
+
SELECT
|
|
9
|
+
'đ Columns containing "bashcash" (old naming)' AS check_type;
|
|
10
|
+
|
|
11
|
+
SELECT
|
|
12
|
+
table_name,
|
|
13
|
+
column_name,
|
|
14
|
+
data_type,
|
|
15
|
+
is_nullable
|
|
16
|
+
FROM information_schema.columns
|
|
17
|
+
WHERE column_name ILIKE '%bashcash%'
|
|
18
|
+
ORDER BY table_name, column_name;
|
|
19
|
+
|
|
20
|
+
-- =====================================================================
|
|
21
|
+
-- CHECK FOR BASHPOINTS COLUMNS
|
|
22
|
+
-- =====================================================================
|
|
23
|
+
|
|
24
|
+
SELECT
|
|
25
|
+
'â
Columns containing "bashpoints" (new naming)' AS check_type;
|
|
26
|
+
|
|
27
|
+
SELECT
|
|
28
|
+
table_name,
|
|
29
|
+
column_name,
|
|
30
|
+
data_type,
|
|
31
|
+
is_nullable
|
|
32
|
+
FROM information_schema.columns
|
|
33
|
+
WHERE column_name ILIKE '%bashpoints%'
|
|
34
|
+
ORDER BY table_name, column_name;
|
|
35
|
+
|
|
36
|
+
-- =====================================================================
|
|
37
|
+
-- CHECK TICKET TIER COLUMNS
|
|
38
|
+
-- =====================================================================
|
|
39
|
+
|
|
40
|
+
SELECT
|
|
41
|
+
'đĢ TicketTier columns' AS check_type;
|
|
42
|
+
|
|
43
|
+
SELECT
|
|
44
|
+
column_name,
|
|
45
|
+
data_type,
|
|
46
|
+
is_nullable
|
|
47
|
+
FROM information_schema.columns
|
|
48
|
+
WHERE table_name = 'TicketTier'
|
|
49
|
+
ORDER BY ordinal_position;
|
|
50
|
+
|
|
51
|
+
-- =====================================================================
|
|
52
|
+
-- CHECK USER COLUMNS
|
|
53
|
+
-- =====================================================================
|
|
54
|
+
|
|
55
|
+
SELECT
|
|
56
|
+
'đ¤ User columns (bash-related)' AS check_type;
|
|
57
|
+
|
|
58
|
+
SELECT
|
|
59
|
+
column_name,
|
|
60
|
+
data_type,
|
|
61
|
+
is_nullable
|
|
62
|
+
FROM information_schema.columns
|
|
63
|
+
WHERE table_name = 'User' AND column_name ILIKE '%bash%'
|
|
64
|
+
ORDER BY ordinal_position;
|
|
65
|
+
|
|
66
|
+
-- =====================================================================
|
|
67
|
+
-- CHECK SERVICE COLUMNS
|
|
68
|
+
-- =====================================================================
|
|
69
|
+
|
|
70
|
+
SELECT
|
|
71
|
+
'đī¸ Service columns (bash-related)' AS check_type;
|
|
72
|
+
|
|
73
|
+
SELECT
|
|
74
|
+
column_name,
|
|
75
|
+
data_type,
|
|
76
|
+
is_nullable
|
|
77
|
+
FROM information_schema.columns
|
|
78
|
+
WHERE table_name = 'Service' AND column_name ILIKE '%bash%'
|
|
79
|
+
ORDER BY ordinal_position;
|
|
80
|
+
|
|
81
|
+
-- =====================================================================
|
|
82
|
+
-- CHECK SERVICEBOOKING COLUMNS
|
|
83
|
+
-- =====================================================================
|
|
84
|
+
|
|
85
|
+
SELECT
|
|
86
|
+
'đ
ServiceBooking columns (bash-related)' AS check_type;
|
|
87
|
+
|
|
88
|
+
SELECT
|
|
89
|
+
column_name,
|
|
90
|
+
data_type,
|
|
91
|
+
is_nullable
|
|
92
|
+
FROM information_schema.columns
|
|
93
|
+
WHERE table_name = 'ServiceBooking' AND column_name ILIKE '%bash%'
|
|
94
|
+
ORDER BY ordinal_position;
|
|
95
|
+
|
|
96
|
+
-- =====================================================================
|
|
97
|
+
-- CHECK NOTIFICATION COLUMNS
|
|
98
|
+
-- =====================================================================
|
|
99
|
+
|
|
100
|
+
SELECT
|
|
101
|
+
'đ Notification columns (bash-related)' AS check_type;
|
|
102
|
+
|
|
103
|
+
SELECT
|
|
104
|
+
column_name,
|
|
105
|
+
data_type,
|
|
106
|
+
is_nullable
|
|
107
|
+
FROM information_schema.columns
|
|
108
|
+
WHERE table_name = 'Notification' AND column_name ILIKE '%bash%'
|
|
109
|
+
ORDER BY ordinal_position;
|
|
110
|
+
|
|
111
|
+
-- =====================================================================
|
|
112
|
+
-- CHECK PRIZEPAYMENT COLUMNS
|
|
113
|
+
-- =====================================================================
|
|
114
|
+
|
|
115
|
+
SELECT
|
|
116
|
+
'đ PrizePayment columns (bash-related)' AS check_type;
|
|
117
|
+
|
|
118
|
+
SELECT
|
|
119
|
+
column_name,
|
|
120
|
+
data_type,
|
|
121
|
+
is_nullable
|
|
122
|
+
FROM information_schema.columns
|
|
123
|
+
WHERE table_name = 'PrizePayment' AND column_name ILIKE '%bash%'
|
|
124
|
+
ORDER BY ordinal_position;
|
|
125
|
+
|
|
126
|
+
-- =====================================================================
|
|
127
|
+
-- CHECK ENUM VALUES
|
|
128
|
+
-- =====================================================================
|
|
129
|
+
|
|
130
|
+
SELECT
|
|
131
|
+
'đ Enum values containing "bash"' AS check_type;
|
|
132
|
+
|
|
133
|
+
SELECT
|
|
134
|
+
t.typname AS enum_type,
|
|
135
|
+
e.enumlabel AS enum_value,
|
|
136
|
+
e.enumsortorder AS sort_order
|
|
137
|
+
FROM pg_enum e
|
|
138
|
+
JOIN pg_type t ON e.enumtypid = t.oid
|
|
139
|
+
WHERE e.enumlabel ILIKE '%bash%'
|
|
140
|
+
ORDER BY t.typname, e.enumsortorder;
|
|
141
|
+
|
|
142
|
+
-- =====================================================================
|
|
143
|
+
-- SUMMARY
|
|
144
|
+
-- =====================================================================
|
|
145
|
+
|
|
146
|
+
SELECT
|
|
147
|
+
'đ SUMMARY' AS info;
|
|
148
|
+
|
|
149
|
+
SELECT
|
|
150
|
+
COUNT(*) AS bashcash_columns_count
|
|
151
|
+
FROM information_schema.columns
|
|
152
|
+
WHERE column_name ILIKE '%bashcash%';
|
|
153
|
+
|
|
154
|
+
SELECT
|
|
155
|
+
COUNT(*) AS bashpoints_columns_count
|
|
156
|
+
FROM information_schema.columns
|
|
157
|
+
WHERE column_name ILIKE '%bashpoints%';
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
-- Migration: Fix BashCash Referral Code Schema Mismatch
|
|
2
|
+
-- Date: 2026-02-01
|
|
3
|
+
-- Description: This script verifies that the database column was properly renamed
|
|
4
|
+
-- from bashCashReferralCode to bashPointsReferralCode.
|
|
5
|
+
-- After running this, you MUST update the Prisma schema to match.
|
|
6
|
+
|
|
7
|
+
-- =====================================================================
|
|
8
|
+
-- DIAGNOSTIC: Check current state
|
|
9
|
+
-- =====================================================================
|
|
10
|
+
|
|
11
|
+
-- Check if old column name still exists
|
|
12
|
+
SELECT
|
|
13
|
+
CASE
|
|
14
|
+
WHEN EXISTS (
|
|
15
|
+
SELECT 1 FROM information_schema.columns
|
|
16
|
+
WHERE table_name = 'User' AND column_name = 'bashCashReferralCode'
|
|
17
|
+
) THEN 'â OLD COLUMN STILL EXISTS: User.bashCashReferralCode'
|
|
18
|
+
ELSE 'â
Old column does not exist (good!)'
|
|
19
|
+
END AS old_column_status;
|
|
20
|
+
|
|
21
|
+
-- Check if new column name exists
|
|
22
|
+
SELECT
|
|
23
|
+
CASE
|
|
24
|
+
WHEN EXISTS (
|
|
25
|
+
SELECT 1 FROM information_schema.columns
|
|
26
|
+
WHERE table_name = 'User' AND column_name = 'bashPointsReferralCode'
|
|
27
|
+
) THEN 'â
NEW COLUMN EXISTS: User.bashPointsReferralCode'
|
|
28
|
+
ELSE 'â New column does not exist (needs migration!)'
|
|
29
|
+
END AS new_column_status;
|
|
30
|
+
|
|
31
|
+
-- =====================================================================
|
|
32
|
+
-- FIX: Rename column if it hasn't been renamed yet
|
|
33
|
+
-- =====================================================================
|
|
34
|
+
|
|
35
|
+
DO $$
|
|
36
|
+
BEGIN
|
|
37
|
+
-- If the old column still exists, rename it
|
|
38
|
+
IF EXISTS (
|
|
39
|
+
SELECT 1 FROM information_schema.columns
|
|
40
|
+
WHERE table_name = 'User' AND column_name = 'bashCashReferralCode'
|
|
41
|
+
) THEN
|
|
42
|
+
-- Rename the column
|
|
43
|
+
ALTER TABLE "User" RENAME COLUMN "bashCashReferralCode" TO "bashPointsReferralCode";
|
|
44
|
+
RAISE NOTICE 'â
Renamed User.bashCashReferralCode â bashPointsReferralCode';
|
|
45
|
+
|
|
46
|
+
-- Check if there's a unique constraint with the old name and rename it
|
|
47
|
+
IF EXISTS (
|
|
48
|
+
SELECT 1 FROM pg_constraint
|
|
49
|
+
WHERE conname = 'User_bashCashReferralCode_key'
|
|
50
|
+
) THEN
|
|
51
|
+
ALTER TABLE "User" RENAME CONSTRAINT "User_bashCashReferralCode_key" TO "User_bashPointsReferralCode_key";
|
|
52
|
+
RAISE NOTICE 'â
Renamed constraint User_bashCashReferralCode_key â User_bashPointsReferralCode_key';
|
|
53
|
+
END IF;
|
|
54
|
+
ELSE
|
|
55
|
+
RAISE NOTICE 'âšī¸ Column User.bashCashReferralCode already renamed to bashPointsReferralCode';
|
|
56
|
+
END IF;
|
|
57
|
+
END $$;
|
|
58
|
+
|
|
59
|
+
-- =====================================================================
|
|
60
|
+
-- VERIFICATION: Show final state
|
|
61
|
+
-- =====================================================================
|
|
62
|
+
|
|
63
|
+
SELECT
|
|
64
|
+
table_name,
|
|
65
|
+
column_name,
|
|
66
|
+
data_type,
|
|
67
|
+
is_nullable,
|
|
68
|
+
column_default
|
|
69
|
+
FROM information_schema.columns
|
|
70
|
+
WHERE table_name = 'User'
|
|
71
|
+
AND (column_name LIKE '%referral%' OR column_name LIKE '%bashpoints%' OR column_name LIKE '%bashcash%')
|
|
72
|
+
ORDER BY column_name;
|
|
73
|
+
|
|
74
|
+
-- Show constraints
|
|
75
|
+
SELECT
|
|
76
|
+
conname AS constraint_name,
|
|
77
|
+
contype AS constraint_type
|
|
78
|
+
FROM pg_constraint
|
|
79
|
+
WHERE conrelid = 'User'::regclass
|
|
80
|
+
AND conname LIKE '%referral%'
|
|
81
|
+
ORDER BY conname;
|