clhq-postgres-module 1.1.0-alpha.173 → 1.1.0-alpha.175
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/config/data-source.local.d.ts +3 -0
- package/dist/config/data-source.local.js +15 -0
- package/dist/migrations/1713000000001-InitialSchema.d.ts +6 -0
- package/dist/migrations/1713000000001-InitialSchema.js +196 -0
- package/dist/migrations/1713000000002-CoreBusinessTables.d.ts +6 -0
- package/dist/migrations/1713000000002-CoreBusinessTables.js +198 -0
- package/dist/migrations/1713000000003-RemainingCoreTables.d.ts +6 -0
- package/dist/migrations/1713000000003-RemainingCoreTables.js +160 -0
- package/dist/migrations/1713000000004-MediaConfigReferenceTables.d.ts +6 -0
- package/dist/migrations/1713000000004-MediaConfigReferenceTables.js +241 -0
- package/dist/migrations/1713000000005-VideoMediaTables.d.ts +6 -0
- package/dist/migrations/1713000000005-VideoMediaTables.js +98 -0
- package/dist/migrations/1713000000006-AddUserReferralColumns.d.ts +6 -0
- package/dist/migrations/1713000000006-AddUserReferralColumns.js +55 -0
- package/dist/migrations/1713000000007-AddUserProfileColumns.d.ts +6 -0
- package/dist/migrations/1713000000007-AddUserProfileColumns.js +73 -0
- package/dist/migrations/1713000000008-AddBillingInfoColumn.d.ts +6 -0
- package/dist/migrations/1713000000008-AddBillingInfoColumn.js +23 -0
- package/dist/migrations/1713000000009-AddWorkspaceStorageColumns.d.ts +6 -0
- package/dist/migrations/1713000000009-AddWorkspaceStorageColumns.js +49 -0
- package/dist/migrations/1713000000010-AddUniqueIdToAssets.d.ts +6 -0
- package/dist/migrations/1713000000010-AddUniqueIdToAssets.js +29 -0
- package/dist/migrations/{1713000000003-AddDescriptionToBrandKits.d.ts → 1713000000011-CreateReferralEventsTable.d.ts} +1 -1
- package/dist/migrations/1713000000011-CreateReferralEventsTable.js +72 -0
- package/dist/migrations/1713000000012-ExtendCreditTransactions.d.ts +6 -0
- package/dist/migrations/1713000000012-ExtendCreditTransactions.js +70 -0
- package/dist/migrations/1713000000013-AiVideoMakerTables.d.ts +6 -0
- package/dist/migrations/1713000000013-AiVideoMakerTables.js +122 -0
- package/dist/migrations/1713000000014-SeedReferralRewardRules.d.ts +6 -0
- package/dist/migrations/1713000000014-SeedReferralRewardRules.js +135 -0
- package/dist/migrations/{1713000000001-CreateSocialConnectionTables.d.ts → 1713000000015-CreateCreditAllocationsTable.d.ts} +1 -1
- package/dist/migrations/1713000000015-CreateCreditAllocationsTable.js +49 -0
- package/dist/migrations/1713000000016-CreateCreditConsumptionLogTable.d.ts +6 -0
- package/dist/migrations/1713000000016-CreateCreditConsumptionLogTable.js +55 -0
- package/dist/migrations/1713000000017-UpdateSubscriptionPlansCreditFields.d.ts +6 -0
- package/dist/migrations/1713000000017-UpdateSubscriptionPlansCreditFields.js +121 -0
- package/dist/migrations/{1713000000004-CreateKlingGenerationTables.d.ts → 1713000000018-CreateVideoProcessingTables.d.ts} +1 -1
- package/dist/migrations/1713000000018-CreateVideoProcessingTables.js +111 -0
- package/dist/migrations/1713000000019-CreateAudioWaveformsTable.d.ts +6 -0
- package/dist/migrations/1713000000019-CreateAudioWaveformsTable.js +62 -0
- package/dist/migrations/1713000000020-EnablePgvectorExtension.d.ts +6 -0
- package/dist/migrations/1713000000020-EnablePgvectorExtension.js +30 -0
- package/dist/migrations/1713000000021-CreateMetadataServiceTables.d.ts +6 -0
- package/dist/migrations/1713000000021-CreateMetadataServiceTables.js +410 -0
- package/dist/migrations/1713000000022-OptimizeMetadataIndexes.d.ts +6 -0
- package/dist/migrations/1713000000022-OptimizeMetadataIndexes.js +334 -0
- package/dist/migrations/1713000000023-CreateSceneGeneratorTables.d.ts +6 -0
- package/dist/migrations/1713000000023-CreateSceneGeneratorTables.js +97 -0
- package/dist/migrations/1713000000024-CreateRemotionRendersTable.d.ts +6 -0
- package/dist/migrations/1713000000024-CreateRemotionRendersTable.js +71 -0
- package/dist/migrations/1713000000025-ExtendCreditAllocationSystem.d.ts +6 -0
- package/dist/migrations/1713000000025-ExtendCreditAllocationSystem.js +114 -0
- package/dist/migrations/{1713000000002-AddIsActiveToWorkspaceMembers.d.ts → 1713000000026-AddStatusToCreditTransactions.d.ts} +1 -1
- package/dist/migrations/1713000000026-AddStatusToCreditTransactions.js +63 -0
- package/dist/migrations/1713000000027-MigrateProjectDurationToSeconds.d.ts +6 -0
- package/dist/migrations/1713000000027-MigrateProjectDurationToSeconds.js +43 -0
- package/dist/migrations/1713000000028-CreateSceneTimelineTables.d.ts +6 -0
- package/dist/migrations/1713000000028-CreateSceneTimelineTables.js +159 -0
- package/dist/migrations/1713000000029-ConvertScenesToSeconds.d.ts +6 -0
- package/dist/migrations/1713000000029-ConvertScenesToSeconds.js +106 -0
- package/dist/migrations/1713000000030-ChangeDurationToDecimal.d.ts +6 -0
- package/dist/migrations/1713000000030-ChangeDurationToDecimal.js +34 -0
- package/dist/migrations/1713000000031-CreateVideoSubtitlesTable.d.ts +6 -0
- package/dist/migrations/1713000000031-CreateVideoSubtitlesTable.js +51 -0
- package/dist/migrations/1713000000032-AddWebpThumbnailColumns.d.ts +6 -0
- package/dist/migrations/1713000000032-AddWebpThumbnailColumns.js +58 -0
- package/dist/migrations/1713000000033-AddFormatToProjectScenes.d.ts +6 -0
- package/dist/migrations/1713000000033-AddFormatToProjectScenes.js +77 -0
- package/dist/migrations/1713000000034-FixProjectScenesUniqueConstraint.d.ts +6 -0
- package/dist/migrations/1713000000034-FixProjectScenesUniqueConstraint.js +39 -0
- package/dist/migrations/1713000000035-AddMissingVideoSubtitlesColumns.d.ts +6 -0
- package/dist/migrations/1713000000035-AddMissingVideoSubtitlesColumns.js +29 -0
- package/dist/migrations/1713000000036-AddRemotionRenderCreditColumns.d.ts +6 -0
- package/dist/migrations/1713000000036-AddRemotionRenderCreditColumns.js +50 -0
- package/dist/migrations/1713000000037-CreateProjectSharesTable.d.ts +6 -0
- package/dist/migrations/1713000000037-CreateProjectSharesTable.js +60 -0
- package/dist/migrations/1713000000038-EnableRlsOnAllTables.d.ts +6 -0
- package/dist/migrations/1713000000038-EnableRlsOnAllTables.js +97 -0
- package/dist/migrations/1713000000039-AiVideoMakerKlingFreeColumns.d.ts +6 -0
- package/dist/migrations/1713000000039-AiVideoMakerKlingFreeColumns.js +85 -0
- package/dist/migrations/1713000000040-CreateBrandKitsTable.d.ts +6 -0
- package/dist/migrations/1713000000040-CreateBrandKitsTable.js +44 -0
- package/dist/migrations/1713000000041-CreateBrandAssetsTable.d.ts +6 -0
- package/dist/migrations/1713000000041-CreateBrandAssetsTable.js +57 -0
- package/dist/migrations/1713000000042-AddActiveBrandKitToWorkspaces.d.ts +6 -0
- package/dist/migrations/1713000000042-AddActiveBrandKitToWorkspaces.js +43 -0
- package/dist/migrations/1713000000043-CreateAssetCategoriesTable.d.ts +6 -0
- package/dist/migrations/1713000000043-CreateAssetCategoriesTable.js +47 -0
- package/dist/migrations/1713000000044-AddEnforcementModeToWorkspaces.d.ts +6 -0
- package/dist/migrations/1713000000044-AddEnforcementModeToWorkspaces.js +21 -0
- package/dist/migrations/1713000000045-CreateProjectBrandOverridesTable.d.ts +6 -0
- package/dist/migrations/1713000000045-CreateProjectBrandOverridesTable.js +33 -0
- package/dist/migrations/1713000000046-AddPdfRenderSupport.d.ts +6 -0
- package/dist/migrations/1713000000046-AddPdfRenderSupport.js +14 -0
- package/dist/migrations/1713000000047-CreateSocialConnectionTables.d.ts +6 -0
- package/dist/migrations/{1713000000001-CreateSocialConnectionTables.js → 1713000000047-CreateSocialConnectionTables.js} +4 -4
- package/dist/migrations/1713000000048-AddIsActiveToWorkspaceMembers.d.ts +6 -0
- package/dist/migrations/{1713000000002-AddIsActiveToWorkspaceMembers.js → 1713000000048-AddIsActiveToWorkspaceMembers.js} +4 -4
- package/dist/migrations/1713000000049-AddDescriptionToBrandKits.d.ts +6 -0
- package/dist/migrations/{1713000000003-AddDescriptionToBrandKits.js → 1713000000049-AddDescriptionToBrandKits.js} +4 -4
- package/dist/migrations/1713000000050-CreateKlingGenerationTables.d.ts +6 -0
- package/dist/migrations/{1713000000004-CreateKlingGenerationTables.js → 1713000000050-CreateKlingGenerationTables.js} +7 -5
- package/dist/migrations/1713000000051-AddAiVideoSceneCanvasIdsAndThumbnail.d.ts +6 -0
- package/dist/migrations/1713000000051-AddAiVideoSceneCanvasIdsAndThumbnail.js +49 -0
- package/dist/migrations/1713000000052-AddAiVideoSourceMetadataAndMusicMeta.d.ts +6 -0
- package/dist/migrations/1713000000052-AddAiVideoSourceMetadataAndMusicMeta.js +67 -0
- package/package.json +8 -1
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CreateReferralEventsTable1713000000011 = void 0;
|
|
4
|
+
class CreateReferralEventsTable1713000000011 {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.name = 'CreateReferralEventsTable1713000000011';
|
|
7
|
+
}
|
|
8
|
+
async up(queryRunner) {
|
|
9
|
+
await queryRunner.query(`
|
|
10
|
+
CREATE TABLE IF NOT EXISTS referral_events (
|
|
11
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
12
|
+
referrer_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
|
13
|
+
referred_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
|
14
|
+
referral_code VARCHAR(50) NOT NULL,
|
|
15
|
+
status VARCHAR(20) NOT NULL DEFAULT 'signup',
|
|
16
|
+
conversion_type VARCHAR(50),
|
|
17
|
+
conversion_value DECIMAL(10, 2) DEFAULT 0,
|
|
18
|
+
referrer_reward_amount DECIMAL(10, 2) DEFAULT 0,
|
|
19
|
+
referred_reward_amount DECIMAL(10, 2) DEFAULT 0,
|
|
20
|
+
reward_status VARCHAR(20) DEFAULT 'pending',
|
|
21
|
+
reward_processed_at TIMESTAMP,
|
|
22
|
+
attribution_source VARCHAR(100),
|
|
23
|
+
utm_source VARCHAR(100),
|
|
24
|
+
utm_medium VARCHAR(100),
|
|
25
|
+
utm_campaign VARCHAR(100),
|
|
26
|
+
metadata JSONB DEFAULT '{}',
|
|
27
|
+
ip_address INET,
|
|
28
|
+
user_agent TEXT,
|
|
29
|
+
signup_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
|
30
|
+
converted_at TIMESTAMP,
|
|
31
|
+
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
|
32
|
+
updated_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
|
33
|
+
CONSTRAINT unique_referral_pair UNIQUE (referrer_id, referred_id),
|
|
34
|
+
CONSTRAINT valid_status CHECK (status IN ('signup', 'email_verified', 'first_project', 'converted', 'churned')),
|
|
35
|
+
CONSTRAINT valid_reward_status CHECK (reward_status IN ('pending', 'processing', 'completed', 'failed', 'expired'))
|
|
36
|
+
)
|
|
37
|
+
`);
|
|
38
|
+
await queryRunner.query(`
|
|
39
|
+
CREATE INDEX idx_referral_events_referrer ON referral_events(referrer_id)
|
|
40
|
+
`);
|
|
41
|
+
await queryRunner.query(`
|
|
42
|
+
CREATE INDEX idx_referral_events_referred ON referral_events(referred_id)
|
|
43
|
+
`);
|
|
44
|
+
await queryRunner.query(`
|
|
45
|
+
CREATE INDEX idx_referral_events_code ON referral_events(referral_code)
|
|
46
|
+
`);
|
|
47
|
+
await queryRunner.query(`
|
|
48
|
+
CREATE INDEX idx_referral_events_status ON referral_events(status)
|
|
49
|
+
`);
|
|
50
|
+
await queryRunner.query(`
|
|
51
|
+
CREATE INDEX idx_referral_events_created ON referral_events(created_at)
|
|
52
|
+
`);
|
|
53
|
+
await queryRunner.query(`
|
|
54
|
+
CREATE INDEX idx_referral_events_conversion ON referral_events(conversion_type) WHERE conversion_type IS NOT NULL
|
|
55
|
+
`);
|
|
56
|
+
await queryRunner.query(`
|
|
57
|
+
COMMENT ON TABLE referral_events IS 'Tracks the complete lifecycle of referral relationships'
|
|
58
|
+
`);
|
|
59
|
+
await queryRunner.query(`
|
|
60
|
+
COMMENT ON COLUMN referral_events.status IS 'Current stage in the referral funnel'
|
|
61
|
+
`);
|
|
62
|
+
await queryRunner.query(`
|
|
63
|
+
COMMENT ON COLUMN referral_events.conversion_type IS 'Type of subscription that triggered conversion'
|
|
64
|
+
`);
|
|
65
|
+
}
|
|
66
|
+
async down(queryRunner) {
|
|
67
|
+
await queryRunner.query(`
|
|
68
|
+
DROP TABLE IF EXISTS referral_events
|
|
69
|
+
`);
|
|
70
|
+
}
|
|
71
|
+
}
|
|
72
|
+
exports.CreateReferralEventsTable1713000000011 = CreateReferralEventsTable1713000000011;
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ExtendCreditTransactions1713000000012 = void 0;
|
|
4
|
+
class ExtendCreditTransactions1713000000012 {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.name = 'ExtendCreditTransactions1713000000012';
|
|
7
|
+
}
|
|
8
|
+
async up(queryRunner) {
|
|
9
|
+
await queryRunner.query(`
|
|
10
|
+
ALTER TABLE credit_transactions
|
|
11
|
+
ADD COLUMN IF NOT EXISTS source VARCHAR(50)
|
|
12
|
+
`);
|
|
13
|
+
await queryRunner.query(`
|
|
14
|
+
ALTER TABLE credit_transactions
|
|
15
|
+
ADD COLUMN IF NOT EXISTS reference_id UUID
|
|
16
|
+
`);
|
|
17
|
+
await queryRunner.query(`
|
|
18
|
+
ALTER TABLE credit_transactions
|
|
19
|
+
ADD COLUMN IF NOT EXISTS expires_at TIMESTAMP
|
|
20
|
+
`);
|
|
21
|
+
await queryRunner.query(`
|
|
22
|
+
ALTER TABLE credit_transactions
|
|
23
|
+
DROP CONSTRAINT IF EXISTS credit_transactions_type_check
|
|
24
|
+
`);
|
|
25
|
+
await queryRunner.query(`
|
|
26
|
+
ALTER TABLE credit_transactions
|
|
27
|
+
ADD CONSTRAINT credit_transactions_type_check
|
|
28
|
+
CHECK (type IN ('purchase', 'usage', 'refund', 'bonus', 'referral_reward', 'signup_bonus', 'promo', 'compensation', 'expired'))
|
|
29
|
+
`);
|
|
30
|
+
await queryRunner.query(`
|
|
31
|
+
CREATE INDEX IF NOT EXISTS idx_credit_transactions_expires ON credit_transactions(expires_at) WHERE expires_at IS NOT NULL
|
|
32
|
+
`);
|
|
33
|
+
await queryRunner.query(`
|
|
34
|
+
CREATE INDEX IF NOT EXISTS idx_credit_transactions_source ON credit_transactions(source) WHERE source IS NOT NULL
|
|
35
|
+
`);
|
|
36
|
+
await queryRunner.query(`
|
|
37
|
+
CREATE INDEX IF NOT EXISTS idx_credit_transactions_reference ON credit_transactions(reference_id) WHERE reference_id IS NOT NULL
|
|
38
|
+
`);
|
|
39
|
+
await queryRunner.query(`
|
|
40
|
+
COMMENT ON COLUMN credit_transactions.source IS 'Origin of credit: referral, promo_code, admin_grant, purchase'
|
|
41
|
+
`);
|
|
42
|
+
await queryRunner.query(`
|
|
43
|
+
COMMENT ON COLUMN credit_transactions.reference_id IS 'Links to referral_events.id or promo campaign id'
|
|
44
|
+
`);
|
|
45
|
+
await queryRunner.query(`
|
|
46
|
+
COMMENT ON COLUMN credit_transactions.expires_at IS 'When promotional credits expire'
|
|
47
|
+
`);
|
|
48
|
+
}
|
|
49
|
+
async down(queryRunner) {
|
|
50
|
+
await queryRunner.query(`
|
|
51
|
+
DROP INDEX IF EXISTS idx_credit_transactions_expires
|
|
52
|
+
`);
|
|
53
|
+
await queryRunner.query(`
|
|
54
|
+
DROP INDEX IF EXISTS idx_credit_transactions_source
|
|
55
|
+
`);
|
|
56
|
+
await queryRunner.query(`
|
|
57
|
+
DROP INDEX IF EXISTS idx_credit_transactions_reference
|
|
58
|
+
`);
|
|
59
|
+
await queryRunner.query(`
|
|
60
|
+
ALTER TABLE credit_transactions DROP COLUMN IF EXISTS source
|
|
61
|
+
`);
|
|
62
|
+
await queryRunner.query(`
|
|
63
|
+
ALTER TABLE credit_transactions DROP COLUMN IF EXISTS reference_id
|
|
64
|
+
`);
|
|
65
|
+
await queryRunner.query(`
|
|
66
|
+
ALTER TABLE credit_transactions DROP COLUMN IF EXISTS expires_at
|
|
67
|
+
`);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
exports.ExtendCreditTransactions1713000000012 = ExtendCreditTransactions1713000000012;
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.AiVideoMakerTables1713000000013 = void 0;
|
|
4
|
+
class AiVideoMakerTables1713000000013 {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.name = 'AiVideoMakerTables1713000000013';
|
|
7
|
+
}
|
|
8
|
+
async up(queryRunner) {
|
|
9
|
+
await queryRunner.query(`
|
|
10
|
+
CREATE TABLE IF NOT EXISTS ai_video_jobs (
|
|
11
|
+
id VARCHAR PRIMARY KEY,
|
|
12
|
+
user_id VARCHAR NOT NULL,
|
|
13
|
+
project_id VARCHAR,
|
|
14
|
+
project_title VARCHAR,
|
|
15
|
+
prompt TEXT NOT NULL,
|
|
16
|
+
agent_id VARCHAR NOT NULL,
|
|
17
|
+
duration INTEGER NOT NULL,
|
|
18
|
+
aspect_ratio VARCHAR NOT NULL DEFAULT '16:9',
|
|
19
|
+
language VARCHAR NOT NULL DEFAULT 'en',
|
|
20
|
+
style VARCHAR NOT NULL DEFAULT 'cinematic',
|
|
21
|
+
voice_enabled BOOLEAN NOT NULL DEFAULT FALSE,
|
|
22
|
+
voice_id VARCHAR,
|
|
23
|
+
status VARCHAR NOT NULL DEFAULT 'pending',
|
|
24
|
+
progress INTEGER NOT NULL DEFAULT 0,
|
|
25
|
+
total_duration_seconds INTEGER NOT NULL DEFAULT 0,
|
|
26
|
+
total_scenes INTEGER NOT NULL DEFAULT 0,
|
|
27
|
+
script TEXT,
|
|
28
|
+
voice_audio_url TEXT,
|
|
29
|
+
canvas_project_id VARCHAR,
|
|
30
|
+
error_message TEXT,
|
|
31
|
+
created_at TIMESTAMPTZ DEFAULT NOW(),
|
|
32
|
+
updated_at TIMESTAMPTZ DEFAULT NOW()
|
|
33
|
+
)
|
|
34
|
+
`);
|
|
35
|
+
await queryRunner.query(`
|
|
36
|
+
CREATE TABLE IF NOT EXISTS ai_video_scene_tasks (
|
|
37
|
+
id VARCHAR PRIMARY KEY,
|
|
38
|
+
job_id VARCHAR NOT NULL REFERENCES ai_video_jobs(id) ON DELETE CASCADE,
|
|
39
|
+
scene_order INTEGER NOT NULL,
|
|
40
|
+
scene_title VARCHAR,
|
|
41
|
+
description TEXT,
|
|
42
|
+
narration TEXT,
|
|
43
|
+
duration_seconds INTEGER,
|
|
44
|
+
style VARCHAR,
|
|
45
|
+
stock_search_query TEXT,
|
|
46
|
+
stock_video_url TEXT,
|
|
47
|
+
stock_video_confidence DECIMAL(3,2),
|
|
48
|
+
kling_task_id VARCHAR,
|
|
49
|
+
output_url TEXT,
|
|
50
|
+
s3_url TEXT,
|
|
51
|
+
kling_submit_request JSONB,
|
|
52
|
+
kling_submit_response JSONB,
|
|
53
|
+
kling_poll_log JSONB DEFAULT '[]',
|
|
54
|
+
status VARCHAR NOT NULL DEFAULT 'pending',
|
|
55
|
+
progress INTEGER NOT NULL DEFAULT 0,
|
|
56
|
+
error_message TEXT,
|
|
57
|
+
created_at TIMESTAMPTZ DEFAULT NOW(),
|
|
58
|
+
updated_at TIMESTAMPTZ DEFAULT NOW()
|
|
59
|
+
)
|
|
60
|
+
`);
|
|
61
|
+
await queryRunner.query(`
|
|
62
|
+
CREATE INDEX IF NOT EXISTS idx_ai_video_jobs_user_id ON ai_video_jobs(user_id)
|
|
63
|
+
`);
|
|
64
|
+
await queryRunner.query(`
|
|
65
|
+
CREATE INDEX IF NOT EXISTS idx_ai_video_jobs_status ON ai_video_jobs(status)
|
|
66
|
+
`);
|
|
67
|
+
await queryRunner.query(`
|
|
68
|
+
CREATE INDEX IF NOT EXISTS idx_ai_video_jobs_created_at ON ai_video_jobs(created_at)
|
|
69
|
+
`);
|
|
70
|
+
await queryRunner.query(`
|
|
71
|
+
CREATE INDEX IF NOT EXISTS idx_ai_video_scene_tasks_job_id ON ai_video_scene_tasks(job_id)
|
|
72
|
+
`);
|
|
73
|
+
await queryRunner.query(`
|
|
74
|
+
CREATE INDEX IF NOT EXISTS idx_ai_video_scene_tasks_status ON ai_video_scene_tasks(status)
|
|
75
|
+
`);
|
|
76
|
+
await queryRunner.query(`
|
|
77
|
+
CREATE INDEX IF NOT EXISTS idx_ai_video_scene_tasks_scene_order ON ai_video_scene_tasks(job_id, scene_order)
|
|
78
|
+
`);
|
|
79
|
+
await queryRunner.query(`
|
|
80
|
+
COMMENT ON TABLE ai_video_jobs IS 'Tracks AI Video Maker generation jobs with multi-stage pipeline progress'
|
|
81
|
+
`);
|
|
82
|
+
await queryRunner.query(`
|
|
83
|
+
COMMENT ON TABLE ai_video_scene_tasks IS 'Individual scene tasks within AI Video Maker jobs, including stock search and Kling generation'
|
|
84
|
+
`);
|
|
85
|
+
await queryRunner.query(`
|
|
86
|
+
COMMENT ON COLUMN ai_video_jobs.prompt IS 'User-provided prompt for video generation'
|
|
87
|
+
`);
|
|
88
|
+
await queryRunner.query(`
|
|
89
|
+
COMMENT ON COLUMN ai_video_jobs.agent_id IS 'Agent persona influencing script tone and generation preferences'
|
|
90
|
+
`);
|
|
91
|
+
await queryRunner.query(`
|
|
92
|
+
COMMENT ON COLUMN ai_video_jobs.voice_audio_url IS 'S3 URL to generated voiceover audio file'
|
|
93
|
+
`);
|
|
94
|
+
await queryRunner.query(`
|
|
95
|
+
COMMENT ON COLUMN ai_video_jobs.canvas_project_id IS 'ID of created canvas project for editing'
|
|
96
|
+
`);
|
|
97
|
+
await queryRunner.query(`
|
|
98
|
+
COMMENT ON COLUMN ai_video_scene_tasks.stock_search_query IS 'Query used for Pexels/Unsplash stock video search'
|
|
99
|
+
`);
|
|
100
|
+
await queryRunner.query(`
|
|
101
|
+
COMMENT ON COLUMN ai_video_scene_tasks.stock_video_confidence IS 'Confidence score of stock video match (0.00-1.00)'
|
|
102
|
+
`);
|
|
103
|
+
await queryRunner.query(`
|
|
104
|
+
COMMENT ON COLUMN ai_video_scene_tasks.kling_task_id IS 'Kling AI task ID for video generation'
|
|
105
|
+
`);
|
|
106
|
+
await queryRunner.query(`
|
|
107
|
+
COMMENT ON COLUMN ai_video_scene_tasks.output_url IS 'Direct URL from Kling API'
|
|
108
|
+
`);
|
|
109
|
+
await queryRunner.query(`
|
|
110
|
+
COMMENT ON COLUMN ai_video_scene_tasks.s3_url IS 'Permanent S3 copy URL'
|
|
111
|
+
`);
|
|
112
|
+
}
|
|
113
|
+
async down(queryRunner) {
|
|
114
|
+
await queryRunner.query(`
|
|
115
|
+
DROP TABLE IF EXISTS ai_video_scene_tasks
|
|
116
|
+
`);
|
|
117
|
+
await queryRunner.query(`
|
|
118
|
+
DROP TABLE IF EXISTS ai_video_jobs
|
|
119
|
+
`);
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
exports.AiVideoMakerTables1713000000013 = AiVideoMakerTables1713000000013;
|
|
@@ -0,0 +1,135 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SeedReferralRewardRules1713000000014 = void 0;
|
|
4
|
+
class SeedReferralRewardRules1713000000014 {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.name = 'SeedReferralRewardRules1713000000014';
|
|
7
|
+
}
|
|
8
|
+
async up(queryRunner) {
|
|
9
|
+
await queryRunner.query(`
|
|
10
|
+
INSERT INTO reward_rules (id, rule_name, description, reward_type, reward_value, trigger_event, conditions, is_active, max_uses_per_user, created_at, updated_at)
|
|
11
|
+
VALUES
|
|
12
|
+
(
|
|
13
|
+
gen_random_uuid(),
|
|
14
|
+
'referral_signup_bonus',
|
|
15
|
+
'Bonus credits when a referred user signs up',
|
|
16
|
+
'credits',
|
|
17
|
+
5.00,
|
|
18
|
+
'referral_signup',
|
|
19
|
+
'{"require_email_verified": false}'::jsonb,
|
|
20
|
+
true,
|
|
21
|
+
NULL,
|
|
22
|
+
NOW(),
|
|
23
|
+
NOW()
|
|
24
|
+
),
|
|
25
|
+
(
|
|
26
|
+
gen_random_uuid(),
|
|
27
|
+
'referral_conversion_basic',
|
|
28
|
+
'Credits when referred user subscribes to Basic plan',
|
|
29
|
+
'credits',
|
|
30
|
+
10.00,
|
|
31
|
+
'referral_conversion',
|
|
32
|
+
'{"subscription_plan": "basic", "minimum_tenure_days": 0}'::jsonb,
|
|
33
|
+
true,
|
|
34
|
+
NULL,
|
|
35
|
+
NOW(),
|
|
36
|
+
NOW()
|
|
37
|
+
),
|
|
38
|
+
(
|
|
39
|
+
gen_random_uuid(),
|
|
40
|
+
'referral_conversion_pro',
|
|
41
|
+
'Credits when referred user subscribes to Pro plan',
|
|
42
|
+
'credits',
|
|
43
|
+
25.00,
|
|
44
|
+
'referral_conversion',
|
|
45
|
+
'{"subscription_plan": "pro", "minimum_tenure_days": 0}'::jsonb,
|
|
46
|
+
true,
|
|
47
|
+
NULL,
|
|
48
|
+
NOW(),
|
|
49
|
+
NOW()
|
|
50
|
+
),
|
|
51
|
+
(
|
|
52
|
+
gen_random_uuid(),
|
|
53
|
+
'referral_conversion_business',
|
|
54
|
+
'Credits when referred user subscribes to Business plan',
|
|
55
|
+
'credits',
|
|
56
|
+
50.00,
|
|
57
|
+
'referral_conversion',
|
|
58
|
+
'{"subscription_plan": "business", "minimum_tenure_days": 0}'::jsonb,
|
|
59
|
+
true,
|
|
60
|
+
NULL,
|
|
61
|
+
NOW(),
|
|
62
|
+
NOW()
|
|
63
|
+
),
|
|
64
|
+
(
|
|
65
|
+
gen_random_uuid(),
|
|
66
|
+
'new_user_referral_bonus',
|
|
67
|
+
'Welcome bonus for users who sign up with a referral code',
|
|
68
|
+
'credits',
|
|
69
|
+
5.00,
|
|
70
|
+
'signup_with_referral',
|
|
71
|
+
'{"require_referral_code": true}'::jsonb,
|
|
72
|
+
true,
|
|
73
|
+
1,
|
|
74
|
+
NOW(),
|
|
75
|
+
NOW()
|
|
76
|
+
),
|
|
77
|
+
(
|
|
78
|
+
gen_random_uuid(),
|
|
79
|
+
'referral_milestone_5',
|
|
80
|
+
'Bonus for reaching 5 successful referrals',
|
|
81
|
+
'credits',
|
|
82
|
+
25.00,
|
|
83
|
+
'referral_milestone',
|
|
84
|
+
'{"milestone_count": 5}'::jsonb,
|
|
85
|
+
true,
|
|
86
|
+
1,
|
|
87
|
+
NOW(),
|
|
88
|
+
NOW()
|
|
89
|
+
),
|
|
90
|
+
(
|
|
91
|
+
gen_random_uuid(),
|
|
92
|
+
'referral_milestone_10',
|
|
93
|
+
'Bonus for reaching 10 successful referrals',
|
|
94
|
+
'credits',
|
|
95
|
+
75.00,
|
|
96
|
+
'referral_milestone',
|
|
97
|
+
'{"milestone_count": 10}'::jsonb,
|
|
98
|
+
true,
|
|
99
|
+
1,
|
|
100
|
+
NOW(),
|
|
101
|
+
NOW()
|
|
102
|
+
),
|
|
103
|
+
(
|
|
104
|
+
gen_random_uuid(),
|
|
105
|
+
'referral_milestone_25',
|
|
106
|
+
'Bonus for reaching 25 successful referrals - Unlock Ambassador status',
|
|
107
|
+
'feature_unlock',
|
|
108
|
+
0,
|
|
109
|
+
'referral_milestone',
|
|
110
|
+
'{"milestone_count": 25, "unlock_feature": "ambassador_status", "bonus_credits": 200}'::jsonb,
|
|
111
|
+
true,
|
|
112
|
+
1,
|
|
113
|
+
NOW(),
|
|
114
|
+
NOW()
|
|
115
|
+
)
|
|
116
|
+
ON CONFLICT (rule_name) DO NOTHING
|
|
117
|
+
`);
|
|
118
|
+
}
|
|
119
|
+
async down(queryRunner) {
|
|
120
|
+
await queryRunner.query(`
|
|
121
|
+
DELETE FROM reward_rules
|
|
122
|
+
WHERE rule_name IN (
|
|
123
|
+
'referral_signup_bonus',
|
|
124
|
+
'referral_conversion_basic',
|
|
125
|
+
'referral_conversion_pro',
|
|
126
|
+
'referral_conversion_business',
|
|
127
|
+
'new_user_referral_bonus',
|
|
128
|
+
'referral_milestone_5',
|
|
129
|
+
'referral_milestone_10',
|
|
130
|
+
'referral_milestone_25'
|
|
131
|
+
)
|
|
132
|
+
`);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
exports.SeedReferralRewardRules1713000000014 = SeedReferralRewardRules1713000000014;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { MigrationInterface, QueryRunner } from 'typeorm';
|
|
2
|
-
export declare class
|
|
2
|
+
export declare class CreateCreditAllocationsTable1713000000015 implements MigrationInterface {
|
|
3
3
|
name: string;
|
|
4
4
|
up(queryRunner: QueryRunner): Promise<void>;
|
|
5
5
|
down(queryRunner: QueryRunner): Promise<void>;
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CreateCreditAllocationsTable1713000000015 = void 0;
|
|
4
|
+
class CreateCreditAllocationsTable1713000000015 {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.name = 'CreateCreditAllocationsTable1713000000015';
|
|
7
|
+
}
|
|
8
|
+
async up(queryRunner) {
|
|
9
|
+
await queryRunner.query(`
|
|
10
|
+
CREATE TABLE IF NOT EXISTS credit_allocations (
|
|
11
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
12
|
+
user_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
|
13
|
+
plan_id VARCHAR(50) NOT NULL,
|
|
14
|
+
credits_allocated INTEGER NOT NULL,
|
|
15
|
+
credits_remaining INTEGER NOT NULL,
|
|
16
|
+
ai_credits_allocated INTEGER DEFAULT 0,
|
|
17
|
+
ai_credits_remaining INTEGER DEFAULT 0,
|
|
18
|
+
period_start TIMESTAMP NOT NULL,
|
|
19
|
+
period_end TIMESTAMP NOT NULL,
|
|
20
|
+
rollover_credits INTEGER DEFAULT 0,
|
|
21
|
+
status VARCHAR(20) DEFAULT 'active',
|
|
22
|
+
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
|
23
|
+
updated_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
|
24
|
+
CONSTRAINT unique_user_period UNIQUE (user_id, period_start)
|
|
25
|
+
)
|
|
26
|
+
`);
|
|
27
|
+
await queryRunner.query(`
|
|
28
|
+
CREATE INDEX idx_credit_allocations_user ON credit_allocations(user_id)
|
|
29
|
+
`);
|
|
30
|
+
await queryRunner.query(`
|
|
31
|
+
CREATE INDEX idx_credit_allocations_period ON credit_allocations(period_start, period_end)
|
|
32
|
+
`);
|
|
33
|
+
await queryRunner.query(`
|
|
34
|
+
CREATE INDEX idx_credit_allocations_status ON credit_allocations(status)
|
|
35
|
+
`);
|
|
36
|
+
await queryRunner.query(`
|
|
37
|
+
COMMENT ON TABLE credit_allocations IS 'Monthly credit allocations per user subscription'
|
|
38
|
+
`);
|
|
39
|
+
await queryRunner.query(`
|
|
40
|
+
COMMENT ON COLUMN credit_allocations.credits_remaining IS 'Real-time remaining credits for the period'
|
|
41
|
+
`);
|
|
42
|
+
}
|
|
43
|
+
async down(queryRunner) {
|
|
44
|
+
await queryRunner.query(`
|
|
45
|
+
DROP TABLE IF EXISTS credit_allocations
|
|
46
|
+
`);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
exports.CreateCreditAllocationsTable1713000000015 = CreateCreditAllocationsTable1713000000015;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { MigrationInterface, QueryRunner } from 'typeorm';
|
|
2
|
+
export declare class CreateCreditConsumptionLogTable1713000000016 implements MigrationInterface {
|
|
3
|
+
name: string;
|
|
4
|
+
up(queryRunner: QueryRunner): Promise<void>;
|
|
5
|
+
down(queryRunner: QueryRunner): Promise<void>;
|
|
6
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.CreateCreditConsumptionLogTable1713000000016 = void 0;
|
|
4
|
+
class CreateCreditConsumptionLogTable1713000000016 {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.name = 'CreateCreditConsumptionLogTable1713000000016';
|
|
7
|
+
}
|
|
8
|
+
async up(queryRunner) {
|
|
9
|
+
await queryRunner.query(`
|
|
10
|
+
CREATE TABLE IF NOT EXISTS credit_consumption_log (
|
|
11
|
+
id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
|
|
12
|
+
user_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
|
13
|
+
allocation_id UUID REFERENCES credit_allocations(id),
|
|
14
|
+
transaction_id UUID REFERENCES credit_transactions(id),
|
|
15
|
+
operation_type VARCHAR(50) NOT NULL,
|
|
16
|
+
operation_id VARCHAR(100),
|
|
17
|
+
base_credits DECIMAL(10, 2) NOT NULL,
|
|
18
|
+
modifier_credits DECIMAL(10, 2) DEFAULT 0,
|
|
19
|
+
total_credits DECIMAL(10, 2) NOT NULL,
|
|
20
|
+
operation_params JSONB DEFAULT '{}',
|
|
21
|
+
status VARCHAR(20) DEFAULT 'pending',
|
|
22
|
+
started_at TIMESTAMP DEFAULT NOW(),
|
|
23
|
+
completed_at TIMESTAMP,
|
|
24
|
+
result_url TEXT,
|
|
25
|
+
error_message TEXT,
|
|
26
|
+
created_at TIMESTAMP NOT NULL DEFAULT NOW(),
|
|
27
|
+
updated_at TIMESTAMP NOT NULL DEFAULT NOW()
|
|
28
|
+
)
|
|
29
|
+
`);
|
|
30
|
+
await queryRunner.query(`
|
|
31
|
+
CREATE INDEX idx_consumption_log_user ON credit_consumption_log(user_id)
|
|
32
|
+
`);
|
|
33
|
+
await queryRunner.query(`
|
|
34
|
+
CREATE INDEX idx_consumption_log_operation ON credit_consumption_log(operation_type)
|
|
35
|
+
`);
|
|
36
|
+
await queryRunner.query(`
|
|
37
|
+
CREATE INDEX idx_consumption_log_status ON credit_consumption_log(status)
|
|
38
|
+
`);
|
|
39
|
+
await queryRunner.query(`
|
|
40
|
+
CREATE INDEX idx_consumption_log_created ON credit_consumption_log(created_at)
|
|
41
|
+
`);
|
|
42
|
+
await queryRunner.query(`
|
|
43
|
+
COMMENT ON TABLE credit_consumption_log IS 'Detailed log of all credit-consuming operations'
|
|
44
|
+
`);
|
|
45
|
+
await queryRunner.query(`
|
|
46
|
+
COMMENT ON COLUMN credit_consumption_log.operation_type IS 'Type of operation that consumed credits'
|
|
47
|
+
`);
|
|
48
|
+
}
|
|
49
|
+
async down(queryRunner) {
|
|
50
|
+
await queryRunner.query(`
|
|
51
|
+
DROP TABLE IF EXISTS credit_consumption_log
|
|
52
|
+
`);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
exports.CreateCreditConsumptionLogTable1713000000016 = CreateCreditConsumptionLogTable1713000000016;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { MigrationInterface, QueryRunner } from 'typeorm';
|
|
2
|
+
export declare class UpdateSubscriptionPlansCreditFields1713000000017 implements MigrationInterface {
|
|
3
|
+
name: string;
|
|
4
|
+
up(queryRunner: QueryRunner): Promise<void>;
|
|
5
|
+
down(queryRunner: QueryRunner): Promise<void>;
|
|
6
|
+
}
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.UpdateSubscriptionPlansCreditFields1713000000017 = void 0;
|
|
4
|
+
class UpdateSubscriptionPlansCreditFields1713000000017 {
|
|
5
|
+
constructor() {
|
|
6
|
+
this.name = 'UpdateSubscriptionPlansCreditFields1713000000017';
|
|
7
|
+
}
|
|
8
|
+
async up(queryRunner) {
|
|
9
|
+
await queryRunner.query(`
|
|
10
|
+
ALTER TABLE subscription_plans
|
|
11
|
+
ADD COLUMN IF NOT EXISTS monthly_credits INTEGER DEFAULT 0
|
|
12
|
+
`);
|
|
13
|
+
await queryRunner.query(`
|
|
14
|
+
ALTER TABLE subscription_plans
|
|
15
|
+
ADD COLUMN IF NOT EXISTS ai_credits_monthly INTEGER DEFAULT 0
|
|
16
|
+
`);
|
|
17
|
+
await queryRunner.query(`
|
|
18
|
+
ALTER TABLE subscription_plans
|
|
19
|
+
ADD COLUMN IF NOT EXISTS rollover_enabled BOOLEAN DEFAULT false
|
|
20
|
+
`);
|
|
21
|
+
await queryRunner.query(`
|
|
22
|
+
ALTER TABLE subscription_plans
|
|
23
|
+
ADD COLUMN IF NOT EXISTS max_rollover_credits INTEGER DEFAULT 0
|
|
24
|
+
`);
|
|
25
|
+
await queryRunner.query(`
|
|
26
|
+
ALTER TABLE subscription_plans
|
|
27
|
+
ADD COLUMN IF NOT EXISTS signup_bonus_credits INTEGER DEFAULT 0
|
|
28
|
+
`);
|
|
29
|
+
await queryRunner.query(`
|
|
30
|
+
ALTER TABLE subscription_plans
|
|
31
|
+
ADD COLUMN IF NOT EXISTS referral_bonus_credits INTEGER DEFAULT 0
|
|
32
|
+
`);
|
|
33
|
+
await queryRunner.query(`
|
|
34
|
+
UPDATE subscription_plans SET
|
|
35
|
+
monthly_credits = 10,
|
|
36
|
+
ai_credits_monthly = 0,
|
|
37
|
+
rollover_enabled = false,
|
|
38
|
+
signup_bonus_credits = 5,
|
|
39
|
+
referral_bonus_credits = 5
|
|
40
|
+
WHERE plan_key = 'free'
|
|
41
|
+
`);
|
|
42
|
+
await queryRunner.query(`
|
|
43
|
+
UPDATE subscription_plans SET
|
|
44
|
+
monthly_credits = 100,
|
|
45
|
+
ai_credits_monthly = 10,
|
|
46
|
+
rollover_enabled = true,
|
|
47
|
+
max_rollover_credits = 50,
|
|
48
|
+
signup_bonus_credits = 10,
|
|
49
|
+
referral_bonus_credits = 10
|
|
50
|
+
WHERE plan_key = 'basic'
|
|
51
|
+
`);
|
|
52
|
+
await queryRunner.query(`
|
|
53
|
+
UPDATE subscription_plans SET
|
|
54
|
+
monthly_credits = 500,
|
|
55
|
+
ai_credits_monthly = 100,
|
|
56
|
+
rollover_enabled = true,
|
|
57
|
+
max_rollover_credits = 250,
|
|
58
|
+
signup_bonus_credits = 25,
|
|
59
|
+
referral_bonus_credits = 25
|
|
60
|
+
WHERE plan_key = 'pro'
|
|
61
|
+
`);
|
|
62
|
+
await queryRunner.query(`
|
|
63
|
+
UPDATE subscription_plans SET
|
|
64
|
+
monthly_credits = 2000,
|
|
65
|
+
ai_credits_monthly = 500,
|
|
66
|
+
rollover_enabled = true,
|
|
67
|
+
max_rollover_credits = 1000,
|
|
68
|
+
signup_bonus_credits = 100,
|
|
69
|
+
referral_bonus_credits = 50
|
|
70
|
+
WHERE plan_key = 'business'
|
|
71
|
+
`);
|
|
72
|
+
await queryRunner.query(`
|
|
73
|
+
UPDATE subscription_plans SET
|
|
74
|
+
monthly_credits = -1,
|
|
75
|
+
ai_credits_monthly = -1,
|
|
76
|
+
rollover_enabled = false,
|
|
77
|
+
signup_bonus_credits = 0,
|
|
78
|
+
referral_bonus_credits = 0
|
|
79
|
+
WHERE plan_key = 'enterprise'
|
|
80
|
+
`);
|
|
81
|
+
await queryRunner.query(`
|
|
82
|
+
COMMENT ON COLUMN subscription_plans.monthly_credits IS 'Monthly credit allocation for the plan'
|
|
83
|
+
`);
|
|
84
|
+
await queryRunner.query(`
|
|
85
|
+
COMMENT ON COLUMN subscription_plans.ai_credits_monthly IS 'Monthly AI credit allocation'
|
|
86
|
+
`);
|
|
87
|
+
await queryRunner.query(`
|
|
88
|
+
COMMENT ON COLUMN subscription_plans.rollover_enabled IS 'Whether unused credits can roll over to next month'
|
|
89
|
+
`);
|
|
90
|
+
await queryRunner.query(`
|
|
91
|
+
COMMENT ON COLUMN subscription_plans.max_rollover_credits IS 'Maximum credits that can be rolled over'
|
|
92
|
+
`);
|
|
93
|
+
await queryRunner.query(`
|
|
94
|
+
COMMENT ON COLUMN subscription_plans.signup_bonus_credits IS 'Bonus credits awarded on signup'
|
|
95
|
+
`);
|
|
96
|
+
await queryRunner.query(`
|
|
97
|
+
COMMENT ON COLUMN subscription_plans.referral_bonus_credits IS 'Bonus credits awarded for referrals'
|
|
98
|
+
`);
|
|
99
|
+
}
|
|
100
|
+
async down(queryRunner) {
|
|
101
|
+
await queryRunner.query(`
|
|
102
|
+
ALTER TABLE subscription_plans DROP COLUMN IF EXISTS monthly_credits
|
|
103
|
+
`);
|
|
104
|
+
await queryRunner.query(`
|
|
105
|
+
ALTER TABLE subscription_plans DROP COLUMN IF EXISTS ai_credits_monthly
|
|
106
|
+
`);
|
|
107
|
+
await queryRunner.query(`
|
|
108
|
+
ALTER TABLE subscription_plans DROP COLUMN IF EXISTS rollover_enabled
|
|
109
|
+
`);
|
|
110
|
+
await queryRunner.query(`
|
|
111
|
+
ALTER TABLE subscription_plans DROP COLUMN IF EXISTS max_rollover_credits
|
|
112
|
+
`);
|
|
113
|
+
await queryRunner.query(`
|
|
114
|
+
ALTER TABLE subscription_plans DROP COLUMN IF EXISTS signup_bonus_credits
|
|
115
|
+
`);
|
|
116
|
+
await queryRunner.query(`
|
|
117
|
+
ALTER TABLE subscription_plans DROP COLUMN IF EXISTS referral_bonus_credits
|
|
118
|
+
`);
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
exports.UpdateSubscriptionPlansCreditFields1713000000017 = UpdateSubscriptionPlansCreditFields1713000000017;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { MigrationInterface, QueryRunner } from 'typeorm';
|
|
2
|
-
export declare class
|
|
2
|
+
export declare class CreateVideoProcessingTables1713000000018 implements MigrationInterface {
|
|
3
3
|
name: string;
|
|
4
4
|
up(queryRunner: QueryRunner): Promise<void>;
|
|
5
5
|
down(queryRunner: QueryRunner): Promise<void>;
|