diff --git a/_database/sql/migrations/2026-05-13-225030-0000_user_referrals/down.sql b/_database/sql/migrations/2026-05-13-225030-0000_user_referrals/down.sql new file mode 100644 index 0000000000..84dedb70b4 --- /dev/null +++ b/_database/sql/migrations/2026-05-13-225030-0000_user_referrals/down.sql @@ -0,0 +1,5 @@ +-- noinspection SqlDialectInspectionForFile +-- noinspection SqlNoDataSourceInspectionForFile +-- noinspection SqlResolveForFile + +DROP TABLE IF EXISTS user_referrals; diff --git a/_database/sql/migrations/2026-05-13-225030-0000_user_referrals/up.sql b/_database/sql/migrations/2026-05-13-225030-0000_user_referrals/up.sql new file mode 100644 index 0000000000..5dbf8cb55a --- /dev/null +++ b/_database/sql/migrations/2026-05-13-225030-0000_user_referrals/up.sql @@ -0,0 +1,31 @@ +-- noinspection SqlDialectInspectionForFile +-- noinspection SqlNoDataSourceInspectionForFile +-- noinspection SqlResolveForFile + +CREATE TABLE user_referrals ( + id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT, + + -- The user who was invited/referred. + invited_user_token VARCHAR(32) NOT NULL, + + -- The user who referred the invited user. + referrer_user_token VARCHAR(32) NOT NULL, + + -- OPTIONAL. The referral code token used, if any. + maybe_referral_code_token VARCHAR(32) DEFAULT NULL, + + -- OPTIONAL. The referral URL the invited user arrived from. + maybe_referral_url VARCHAR(255) DEFAULT NULL, + + -- OPTIONAL. The landing URL the invited user first visited. + maybe_landing_url VARCHAR(255) DEFAULT NULL, + + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + + -- INDICES -- + PRIMARY KEY (id), + UNIQUE KEY unique_invited_user_token (invited_user_token), + KEY index_referrer_user_token (referrer_user_token), + KEY index_created_at (created_at) + +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; diff --git a/_database/sql/migrations/2026-05-13-225037-0000_user_referral_codes/down.sql b/_database/sql/migrations/2026-05-13-225037-0000_user_referral_codes/down.sql new file mode 100644 index 0000000000..d80c3457fd --- /dev/null +++ b/_database/sql/migrations/2026-05-13-225037-0000_user_referral_codes/down.sql @@ -0,0 +1,5 @@ +-- noinspection SqlDialectInspectionForFile +-- noinspection SqlNoDataSourceInspectionForFile +-- noinspection SqlResolveForFile + +DROP TABLE IF EXISTS user_referral_codes; diff --git a/_database/sql/migrations/2026-05-13-225037-0000_user_referral_codes/up.sql b/_database/sql/migrations/2026-05-13-225037-0000_user_referral_codes/up.sql new file mode 100644 index 0000000000..8bcbfec60a --- /dev/null +++ b/_database/sql/migrations/2026-05-13-225037-0000_user_referral_codes/up.sql @@ -0,0 +1,31 @@ +-- noinspection SqlDialectInspectionForFile +-- noinspection SqlNoDataSourceInspectionForFile +-- noinspection SqlResolveForFile + +CREATE TABLE user_referral_codes ( + id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT, + + -- Unique token identifier for this referral code record. + token VARCHAR(32) NOT NULL, + + -- The human-readable referral code (e.g. a username or custom code). + -- This can be changed. + -- These must be unique. + code VARCHAR(32) NOT NULL, + + -- The user who owns this referral code. + owner_user_token VARCHAR(32) NOT NULL, + + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + + -- Soft delete. + deleted_at TIMESTAMP NULL, + + -- INDICES -- + PRIMARY KEY (id), + UNIQUE KEY unique_token (token), + UNIQUE KEY unique_code (code), + KEY index_owner_user_token (owner_user_token) + +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; diff --git a/_database/sql/migrations_squashed/user_tables/user_referral_codes.sql b/_database/sql/migrations_squashed/user_tables/user_referral_codes.sql new file mode 100644 index 0000000000..f75c5bd7d8 --- /dev/null +++ b/_database/sql/migrations_squashed/user_tables/user_referral_codes.sql @@ -0,0 +1,29 @@ +-- noinspection SqlDialectInspectionForFile +-- noinspection SqlNoDataSourceInspectionForFile +-- noinspection SqlResolveForFile + +CREATE TABLE user_referral_codes ( + id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT, + + -- Unique token identifier for this referral code record. + token VARCHAR(32) NOT NULL, + + -- The human-readable referral code (e.g. a username or custom code). + code VARCHAR(32) NOT NULL, + + -- The user who owns this referral code. + owner_user_token VARCHAR(32) NOT NULL, + + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + updated_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, + + -- Soft delete. + deleted_at TIMESTAMP NULL, + + -- INDICES -- + PRIMARY KEY (id), + UNIQUE KEY unique_token (token), + UNIQUE KEY unique_code (code), + KEY index_owner_user_token (owner_user_token) + +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin; diff --git a/_database/sql/migrations_squashed/user_tables/user_referrals.sql b/_database/sql/migrations_squashed/user_tables/user_referrals.sql new file mode 100644 index 0000000000..5dbf8cb55a --- /dev/null +++ b/_database/sql/migrations_squashed/user_tables/user_referrals.sql @@ -0,0 +1,31 @@ +-- noinspection SqlDialectInspectionForFile +-- noinspection SqlNoDataSourceInspectionForFile +-- noinspection SqlResolveForFile + +CREATE TABLE user_referrals ( + id BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT, + + -- The user who was invited/referred. + invited_user_token VARCHAR(32) NOT NULL, + + -- The user who referred the invited user. + referrer_user_token VARCHAR(32) NOT NULL, + + -- OPTIONAL. The referral code token used, if any. + maybe_referral_code_token VARCHAR(32) DEFAULT NULL, + + -- OPTIONAL. The referral URL the invited user arrived from. + maybe_referral_url VARCHAR(255) DEFAULT NULL, + + -- OPTIONAL. The landing URL the invited user first visited. + maybe_landing_url VARCHAR(255) DEFAULT NULL, + + created_at TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, + + -- INDICES -- + PRIMARY KEY (id), + UNIQUE KEY unique_invited_user_token (invited_user_token), + KEY index_referrer_user_token (referrer_user_token), + KEY index_created_at (created_at) + +) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_bin;