feat(go): referral support (#28345)

Co-authored-by: Jack <jack@anoma.ly>
This commit is contained in:
Victor Navarro
2026-05-19 17:51:39 +02:00
committed by GitHub
parent 512e34af83
commit b32f071502
54 changed files with 20809 additions and 206 deletions

View File

@@ -0,0 +1,47 @@
CREATE TABLE `referral_code` (
`id` varchar(30) NOT NULL,
`workspace_id` varchar(30) NOT NULL,
`time_created` timestamp(3) NOT NULL DEFAULT (now()),
`time_updated` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
`time_deleted` timestamp(3),
`code` varchar(10) NOT NULL,
CONSTRAINT PRIMARY KEY(`workspace_id`,`id`),
CONSTRAINT `referral_code_workspace_id` UNIQUE INDEX(`workspace_id`),
CONSTRAINT `referral_code_code` UNIQUE INDEX(`code`)
);
--> statement-breakpoint
CREATE TABLE `referral_reward` (
`id` varchar(30) NOT NULL,
`workspace_id` varchar(30) NOT NULL,
`time_created` timestamp(3) NOT NULL DEFAULT (now()),
`time_updated` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
`time_deleted` timestamp(3),
`referral_id` varchar(30) NOT NULL,
`source` enum('inviter','invitee') NOT NULL,
`amount` bigint NOT NULL,
`applied_by_user_id` varchar(30),
`time_applied` timestamp(3),
CONSTRAINT PRIMARY KEY(`workspace_id`,`id`),
CONSTRAINT `referral_reward_referral_source` UNIQUE INDEX(`referral_id`,`source`)
);
--> statement-breakpoint
CREATE TABLE `referral` (
`id` varchar(30) NOT NULL,
`workspace_id` varchar(30) NOT NULL,
`time_created` timestamp(3) NOT NULL DEFAULT (now()),
`time_updated` timestamp(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3) ON UPDATE CURRENT_TIMESTAMP(3),
`time_deleted` timestamp(3),
`inviter_workspace_id` varchar(30) NOT NULL,
`invitee_account_id` varchar(30) NOT NULL,
`invitee_user_id` varchar(30) NOT NULL,
`referral_code_id` varchar(30) NOT NULL,
`stripe_customer_id` varchar(255) NOT NULL,
`stripe_subscription_id` varchar(255) NOT NULL,
CONSTRAINT PRIMARY KEY(`workspace_id`,`id`),
CONSTRAINT `referral_invitee_account_id` UNIQUE INDEX(`invitee_account_id`),
CONSTRAINT `referral_stripe_subscription_id` UNIQUE INDEX(`stripe_subscription_id`)
);
--> statement-breakpoint
CREATE INDEX `referral_reward_workspace_time` ON `referral_reward` (`workspace_id`,`time_created`);--> statement-breakpoint
CREATE INDEX `referral_inviter_workspace_id` ON `referral` (`inviter_workspace_id`);--> statement-breakpoint
CREATE INDEX `referral_code_id` ON `referral` (`referral_code_id`);

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,20 @@
DROP TABLE `referral_code`;--> statement-breakpoint
DROP INDEX `referral_reward_referral_source` ON `referral_reward`;--> statement-breakpoint
DROP INDEX `referral_stripe_subscription_id` ON `referral`;--> statement-breakpoint
DROP INDEX `referral_inviter_workspace_id` ON `referral`;--> statement-breakpoint
DROP INDEX `referral_code_id` ON `referral`;--> statement-breakpoint
ALTER TABLE `referral_reward` DROP PRIMARY KEY;--> statement-breakpoint
ALTER TABLE `referral` DROP PRIMARY KEY;--> statement-breakpoint
ALTER TABLE `referral_reward` MODIFY COLUMN `workspace_id` varchar(30);--> statement-breakpoint
ALTER TABLE `workspace` ADD `referral_code` varchar(16);--> statement-breakpoint
ALTER TABLE `referral_reward` ADD PRIMARY KEY (`id`);--> statement-breakpoint
ALTER TABLE `referral` ADD PRIMARY KEY (`id`);--> statement-breakpoint
CREATE INDEX `referral_workspace_id` ON `referral` (`workspace_id`);--> statement-breakpoint
CREATE UNIQUE INDEX `workspace_referral_code` ON `workspace` (`referral_code`);--> statement-breakpoint
ALTER TABLE `referral_reward` DROP COLUMN `source`;--> statement-breakpoint
ALTER TABLE `referral_reward` DROP COLUMN `applied_by_user_id`;--> statement-breakpoint
ALTER TABLE `referral` DROP COLUMN `inviter_workspace_id`;--> statement-breakpoint
ALTER TABLE `referral` DROP COLUMN `invitee_user_id`;--> statement-breakpoint
ALTER TABLE `referral` DROP COLUMN `referral_code_id`;--> statement-breakpoint
ALTER TABLE `referral` DROP COLUMN `stripe_customer_id`;--> statement-breakpoint
ALTER TABLE `referral` DROP COLUMN `stripe_subscription_id`;

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,4 @@
DROP INDEX `referral_reward_workspace_time` ON `referral_reward`;--> statement-breakpoint
ALTER TABLE `referral_reward` DROP PRIMARY KEY;--> statement-breakpoint
ALTER TABLE `referral_reward` ADD PRIMARY KEY (`workspace_id`,`referral_id`);--> statement-breakpoint
ALTER TABLE `referral_reward` DROP COLUMN `id`;

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,3 @@
DROP INDEX `referral_workspace_id` ON `referral`;--> statement-breakpoint
ALTER TABLE `referral` DROP PRIMARY KEY;--> statement-breakpoint
ALTER TABLE `referral` ADD PRIMARY KEY (`workspace_id`,`id`);

View File

@@ -0,0 +1,2 @@
UPDATE `workspace` SET `referral_code` = NULL WHERE CHAR_LENGTH(`referral_code`) > 10;--> statement-breakpoint
ALTER TABLE `workspace` MODIFY COLUMN `referral_code` varchar(10);

View File

@@ -0,0 +1,2 @@
DROP INDEX `workspace_referral_code` ON `workspace`;--> statement-breakpoint
CREATE UNIQUE INDEX `referral_code` ON `workspace` (`referral_code`);

File diff suppressed because it is too large Load Diff