@valentine-efagene/qshelter-common 2.0.95 → 2.0.98
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/src/auth/policy-evaluator.d.ts +5 -5
- package/dist/src/auth/policy-evaluator.js +7 -7
- package/dist/src/config/config.service.d.ts +12 -2
- package/dist/src/config/config.service.js +18 -4
- package/dist/src/events/notifications/notification-enums.d.ts +5 -5
- package/dist/src/events/notifications/notification-enums.js +6 -6
- package/dist/src/events/payments/payment-event.d.ts +2 -2
- package/dist/src/events/payments/payment-publisher.d.ts +1 -1
- package/package.json +1 -1
- package/prisma/migrations/20260112080730_rename_contract_to_application/migration.sql +223 -459
- package/prisma/migrations/20260112081422_cleanup_rename_contract_to_application/migration.sql +14 -0
|
@@ -2,21 +2,21 @@
|
|
|
2
2
|
* Policy evaluation utilities for scope-based authorization
|
|
3
3
|
*
|
|
4
4
|
* Scopes follow a resource:action pattern with wildcard support:
|
|
5
|
-
* - "
|
|
6
|
-
* - "
|
|
5
|
+
* - "application:read" - specific action on specific resource
|
|
6
|
+
* - "application:*" - all actions on contracts
|
|
7
7
|
* - "*" - superuser access
|
|
8
8
|
*
|
|
9
9
|
* @example
|
|
10
10
|
* ```typescript
|
|
11
11
|
* import { hasScope, requireScope } from '@valentine-efagene/qshelter-common';
|
|
12
12
|
*
|
|
13
|
-
* const scopes = ['
|
|
13
|
+
* const scopes = ['application:read', 'payment:*'];
|
|
14
14
|
*
|
|
15
|
-
* hasScope(scopes, '
|
|
15
|
+
* hasScope(scopes, 'application:read'); // true
|
|
16
16
|
* hasScope(scopes, 'payment:create'); // true (wildcard match)
|
|
17
17
|
* hasScope(scopes, 'user:read'); // false
|
|
18
18
|
*
|
|
19
|
-
* requireScope(scopes, '
|
|
19
|
+
* requireScope(scopes, 'application:read'); // passes
|
|
20
20
|
* requireScope(scopes, 'user:read'); // throws 403 error
|
|
21
21
|
* ```
|
|
22
22
|
*/
|
|
@@ -2,21 +2,21 @@
|
|
|
2
2
|
* Policy evaluation utilities for scope-based authorization
|
|
3
3
|
*
|
|
4
4
|
* Scopes follow a resource:action pattern with wildcard support:
|
|
5
|
-
* - "
|
|
6
|
-
* - "
|
|
5
|
+
* - "application:read" - specific action on specific resource
|
|
6
|
+
* - "application:*" - all actions on contracts
|
|
7
7
|
* - "*" - superuser access
|
|
8
8
|
*
|
|
9
9
|
* @example
|
|
10
10
|
* ```typescript
|
|
11
11
|
* import { hasScope, requireScope } from '@valentine-efagene/qshelter-common';
|
|
12
12
|
*
|
|
13
|
-
* const scopes = ['
|
|
13
|
+
* const scopes = ['application:read', 'payment:*'];
|
|
14
14
|
*
|
|
15
|
-
* hasScope(scopes, '
|
|
15
|
+
* hasScope(scopes, 'application:read'); // true
|
|
16
16
|
* hasScope(scopes, 'payment:create'); // true (wildcard match)
|
|
17
17
|
* hasScope(scopes, 'user:read'); // false
|
|
18
18
|
*
|
|
19
|
-
* requireScope(scopes, '
|
|
19
|
+
* requireScope(scopes, 'application:read'); // passes
|
|
20
20
|
* requireScope(scopes, 'user:read'); // throws 403 error
|
|
21
21
|
* ```
|
|
22
22
|
*/
|
|
@@ -40,9 +40,9 @@ export function hasScope(scopes, required) {
|
|
|
40
40
|
// Exact match
|
|
41
41
|
if (s === required)
|
|
42
42
|
return true;
|
|
43
|
-
// Wildcard match: "
|
|
43
|
+
// Wildcard match: "application:*" matches "application:read"
|
|
44
44
|
if (s.endsWith(':*')) {
|
|
45
|
-
const prefix = s.slice(0, -1); // "
|
|
45
|
+
const prefix = s.slice(0, -1); // "application:"
|
|
46
46
|
return required.startsWith(prefix);
|
|
47
47
|
}
|
|
48
48
|
return false;
|
|
@@ -59,11 +59,21 @@ export declare class ConfigService {
|
|
|
59
59
|
*/
|
|
60
60
|
getParameter(name: string): Promise<string>;
|
|
61
61
|
/**
|
|
62
|
-
* Get JWT
|
|
62
|
+
* Get JWT access secret from Secrets Manager
|
|
63
|
+
* Used for signing and verifying access tokens
|
|
64
|
+
*/
|
|
65
|
+
getJwtAccessSecret(stage?: string): Promise<JwtSecrets>;
|
|
66
|
+
/**
|
|
67
|
+
* Get JWT refresh token secret from Secrets Manager
|
|
68
|
+
* Used for signing and verifying refresh tokens
|
|
69
|
+
*/
|
|
70
|
+
getJwtRefreshSecret(stage?: string): Promise<JwtSecrets>;
|
|
71
|
+
/**
|
|
72
|
+
* @deprecated Use getJwtAccessSecret instead
|
|
63
73
|
*/
|
|
64
74
|
getJwtSecret(stage?: string): Promise<JwtSecrets>;
|
|
65
75
|
/**
|
|
66
|
-
*
|
|
76
|
+
* @deprecated Use getJwtRefreshSecret instead
|
|
67
77
|
*/
|
|
68
78
|
getRefreshTokenSecret(stage?: string): Promise<JwtSecrets>;
|
|
69
79
|
/**
|
|
@@ -90,16 +90,30 @@ export class ConfigService {
|
|
|
90
90
|
}
|
|
91
91
|
}
|
|
92
92
|
/**
|
|
93
|
-
* Get JWT
|
|
93
|
+
* Get JWT access secret from Secrets Manager
|
|
94
|
+
* Used for signing and verifying access tokens
|
|
95
|
+
*/
|
|
96
|
+
async getJwtAccessSecret(stage = process.env.NODE_ENV || 'dev') {
|
|
97
|
+
return this.getSecret(`qshelter/${stage}/jwt-access-secret`);
|
|
98
|
+
}
|
|
99
|
+
/**
|
|
100
|
+
* Get JWT refresh token secret from Secrets Manager
|
|
101
|
+
* Used for signing and verifying refresh tokens
|
|
102
|
+
*/
|
|
103
|
+
async getJwtRefreshSecret(stage = process.env.NODE_ENV || 'dev') {
|
|
104
|
+
return this.getSecret(`qshelter/${stage}/jwt-refresh-secret`);
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* @deprecated Use getJwtAccessSecret instead
|
|
94
108
|
*/
|
|
95
109
|
async getJwtSecret(stage = process.env.NODE_ENV || 'dev') {
|
|
96
|
-
return this.
|
|
110
|
+
return this.getJwtAccessSecret(stage);
|
|
97
111
|
}
|
|
98
112
|
/**
|
|
99
|
-
*
|
|
113
|
+
* @deprecated Use getJwtRefreshSecret instead
|
|
100
114
|
*/
|
|
101
115
|
async getRefreshTokenSecret(stage = process.env.NODE_ENV || 'dev') {
|
|
102
|
-
return this.
|
|
116
|
+
return this.getJwtRefreshSecret(stage);
|
|
103
117
|
}
|
|
104
118
|
/**
|
|
105
119
|
* Get database credentials - combines secret and infrastructure config
|
|
@@ -18,11 +18,11 @@ export declare enum NotificationType {
|
|
|
18
18
|
PREQUALIFICATION_SUBMITTED = "prequalificationSubmitted",
|
|
19
19
|
PREQUALIFICATION_APPROVED = "prequalificationApproved",
|
|
20
20
|
PREQUALIFICATION_REJECTED = "prequalificationRejected",
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
21
|
+
APPLICATION_CREATED = "applicationCreated",
|
|
22
|
+
APPLICATION_ACTIVATED = "applicationActivated",
|
|
23
|
+
APPLICATION_TERMINATION_REQUESTED = "applicationTerminationRequested",
|
|
24
|
+
APPLICATION_TERMINATION_APPROVED = "applicationTerminationApproved",
|
|
25
|
+
APPLICATION_TERMINATED = "applicationTerminated",
|
|
26
26
|
OFFER_LETTER_SENT = "offerLetterSent",
|
|
27
27
|
OFFER_LETTER_SIGNED = "offerLetterSigned",
|
|
28
28
|
OFFER_LETTER_EXPIRED = "offerLetterExpired",
|
|
@@ -24,12 +24,12 @@ export var NotificationType;
|
|
|
24
24
|
NotificationType["PREQUALIFICATION_SUBMITTED"] = "prequalificationSubmitted";
|
|
25
25
|
NotificationType["PREQUALIFICATION_APPROVED"] = "prequalificationApproved";
|
|
26
26
|
NotificationType["PREQUALIFICATION_REJECTED"] = "prequalificationRejected";
|
|
27
|
-
//
|
|
28
|
-
NotificationType["
|
|
29
|
-
NotificationType["
|
|
30
|
-
NotificationType["
|
|
31
|
-
NotificationType["
|
|
32
|
-
NotificationType["
|
|
27
|
+
// Application
|
|
28
|
+
NotificationType["APPLICATION_CREATED"] = "applicationCreated";
|
|
29
|
+
NotificationType["APPLICATION_ACTIVATED"] = "applicationActivated";
|
|
30
|
+
NotificationType["APPLICATION_TERMINATION_REQUESTED"] = "applicationTerminationRequested";
|
|
31
|
+
NotificationType["APPLICATION_TERMINATION_APPROVED"] = "applicationTerminationApproved";
|
|
32
|
+
NotificationType["APPLICATION_TERMINATED"] = "applicationTerminated";
|
|
33
33
|
// Offer Letters
|
|
34
34
|
NotificationType["OFFER_LETTER_SENT"] = "offerLetterSent";
|
|
35
35
|
NotificationType["OFFER_LETTER_SIGNED"] = "offerLetterSigned";
|
|
@@ -53,8 +53,8 @@ export interface WalletCreditedPayload {
|
|
|
53
53
|
export interface AllocateToInstallmentsPayload {
|
|
54
54
|
userId: string;
|
|
55
55
|
walletId: string;
|
|
56
|
-
/** Optional: limit to specific
|
|
57
|
-
|
|
56
|
+
/** Optional: limit to specific application */
|
|
57
|
+
applicationId?: string;
|
|
58
58
|
/** Optional: limit to specific amount */
|
|
59
59
|
maxAmount?: number;
|
|
60
60
|
}
|
|
@@ -39,7 +39,7 @@ export declare class PaymentEventPublisher {
|
|
|
39
39
|
publishAllocateToInstallments(payload: {
|
|
40
40
|
userId: string;
|
|
41
41
|
walletId: string;
|
|
42
|
-
|
|
42
|
+
applicationId?: string;
|
|
43
43
|
maxAmount?: number;
|
|
44
44
|
}, meta?: Partial<PaymentEventMeta>): Promise<string>;
|
|
45
45
|
}
|
package/package.json
CHANGED
|
@@ -1,529 +1,293 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
- The values [CONTRACT_TERMINATION] on the enum `approval_requests_type` will be removed. If these variants are still used in the database, this will fail.
|
|
5
|
-
- The values [CONTRACT_PHASE] on the enum `document_requirement_rules_context` will be removed. If these variants are still used in the database, this will fail.
|
|
6
|
-
- You are about to drop the column `contractId` on the `offer_letters` table. All the data in the column will be lost.
|
|
7
|
-
- You are about to drop the column `contractId` on the `payment_method_change_requests` table. All the data in the column will be lost.
|
|
8
|
-
- You are about to drop the column `sourceContractId` on the `property_transfer_requests` table. All the data in the column will be lost.
|
|
9
|
-
- You are about to drop the column `targetContractId` on the `property_transfer_requests` table. All the data in the column will be lost.
|
|
10
|
-
- You are about to drop the `contract_documents` table. If the table is not empty, all the data it contains will be lost.
|
|
11
|
-
- You are about to drop the `contract_events` table. If the table is not empty, all the data it contains will be lost.
|
|
12
|
-
- You are about to drop the `contract_installments` table. If the table is not empty, all the data it contains will be lost.
|
|
13
|
-
- You are about to drop the `contract_payments` table. If the table is not empty, all the data it contains will be lost.
|
|
14
|
-
- You are about to drop the `contract_phases` table. If the table is not empty, all the data it contains will be lost.
|
|
15
|
-
- You are about to drop the `contract_refunds` table. If the table is not empty, all the data it contains will be lost.
|
|
16
|
-
- You are about to drop the `contract_terminations` table. If the table is not empty, all the data it contains will be lost.
|
|
17
|
-
- You are about to drop the `contracts` table. If the table is not empty, all the data it contains will be lost.
|
|
18
|
-
- Added the required column `applicationId` to the `offer_letters` table without a default value. This is not possible if the table is not empty.
|
|
19
|
-
- Added the required column `applicationId` to the `payment_method_change_requests` table without a default value. This is not possible if the table is not empty.
|
|
20
|
-
- Added the required column `sourceApplicationId` to the `property_transfer_requests` table without a default value. This is not possible if the table is not empty.
|
|
21
|
-
|
|
22
|
-
*/
|
|
23
|
-
-- DropForeignKey
|
|
24
|
-
ALTER TABLE `contract_documents` DROP FOREIGN KEY `contract_documents_contractId_fkey`;
|
|
25
|
-
|
|
26
|
-
-- DropForeignKey
|
|
27
|
-
ALTER TABLE `contract_documents` DROP FOREIGN KEY `contract_documents_uploadedById_fkey`;
|
|
1
|
+
-- Safe Migration: Rename Contract to Application
|
|
2
|
+
-- This migration uses RENAME TABLE and RENAME COLUMN to preserve data
|
|
28
3
|
|
|
29
|
-
--
|
|
30
|
-
ALTER TABLE `
|
|
4
|
+
-- Step 1: Update enum values in approval_requests
|
|
5
|
+
ALTER TABLE `approval_requests` MODIFY `type` ENUM('PROPERTY_TRANSFER', 'PROPERTY_UPDATE', 'USER_WORKFLOW', 'CREDIT_CHECK', 'CONTRACT_TERMINATION', 'APPLICATION_TERMINATION', 'REFUND_APPROVAL') NOT NULL;
|
|
6
|
+
UPDATE `approval_requests` SET `type` = 'APPLICATION_TERMINATION' WHERE `type` = 'CONTRACT_TERMINATION';
|
|
7
|
+
ALTER TABLE `approval_requests` MODIFY `type` ENUM('PROPERTY_TRANSFER', 'PROPERTY_UPDATE', 'USER_WORKFLOW', 'CREDIT_CHECK', 'APPLICATION_TERMINATION', 'REFUND_APPROVAL') NOT NULL;
|
|
31
8
|
|
|
32
|
-
--
|
|
33
|
-
ALTER TABLE `
|
|
9
|
+
-- Step 2: Update enum values in document_requirement_rules
|
|
10
|
+
ALTER TABLE `document_requirement_rules` MODIFY `context` ENUM('CONTRACT_PHASE', 'APPLICATION_PHASE', 'PAYMENT_METHOD_CHANGE') NOT NULL;
|
|
11
|
+
UPDATE `document_requirement_rules` SET `context` = 'APPLICATION_PHASE' WHERE `context` = 'CONTRACT_PHASE';
|
|
12
|
+
ALTER TABLE `document_requirement_rules` MODIFY `context` ENUM('APPLICATION_PHASE', 'PAYMENT_METHOD_CHANGE') NOT NULL;
|
|
34
13
|
|
|
35
|
-
--
|
|
36
|
-
|
|
14
|
+
-- Step 3: Drop existing foreign keys that reference contract tables
|
|
15
|
+
-- contracts table foreign keys
|
|
16
|
+
ALTER TABLE `contracts` DROP FOREIGN KEY `contracts_tenantId_fkey`;
|
|
17
|
+
ALTER TABLE `contracts` DROP FOREIGN KEY `contracts_propertyUnitId_fkey`;
|
|
18
|
+
ALTER TABLE `contracts` DROP FOREIGN KEY `contracts_buyerId_fkey`;
|
|
19
|
+
ALTER TABLE `contracts` DROP FOREIGN KEY `contracts_sellerId_fkey`;
|
|
20
|
+
ALTER TABLE `contracts` DROP FOREIGN KEY `contracts_paymentMethodId_fkey`;
|
|
21
|
+
ALTER TABLE `contracts` DROP FOREIGN KEY `contracts_currentPhaseId_fkey`;
|
|
22
|
+
ALTER TABLE `contracts` DROP FOREIGN KEY `contracts_transferredFromId_fkey`;
|
|
37
23
|
|
|
38
|
-
--
|
|
39
|
-
ALTER TABLE `
|
|
24
|
+
-- contract_phases foreign keys
|
|
25
|
+
ALTER TABLE `contract_phases` DROP FOREIGN KEY `contract_phases_contractId_fkey`;
|
|
40
26
|
|
|
41
|
-
--
|
|
42
|
-
ALTER TABLE `
|
|
27
|
+
-- contract_events foreign keys
|
|
28
|
+
ALTER TABLE `contract_events` DROP FOREIGN KEY `contract_events_contractId_fkey`;
|
|
43
29
|
|
|
44
|
-
--
|
|
30
|
+
-- contract_payments foreign keys
|
|
31
|
+
ALTER TABLE `contract_payments` DROP FOREIGN KEY `contract_payments_contractId_fkey`;
|
|
45
32
|
ALTER TABLE `contract_payments` DROP FOREIGN KEY `contract_payments_phaseId_fkey`;
|
|
33
|
+
ALTER TABLE `contract_payments` DROP FOREIGN KEY `contract_payments_installmentId_fkey`;
|
|
34
|
+
ALTER TABLE `contract_payments` DROP FOREIGN KEY `contract_payments_payerId_fkey`;
|
|
46
35
|
|
|
47
|
-
--
|
|
48
|
-
ALTER TABLE `
|
|
49
|
-
|
|
50
|
-
-- DropForeignKey
|
|
51
|
-
ALTER TABLE `contract_refunds` DROP FOREIGN KEY `contract_refunds_approvedById_fkey`;
|
|
36
|
+
-- contract_documents foreign keys
|
|
37
|
+
ALTER TABLE `contract_documents` DROP FOREIGN KEY `contract_documents_contractId_fkey`;
|
|
38
|
+
ALTER TABLE `contract_documents` DROP FOREIGN KEY `contract_documents_uploadedById_fkey`;
|
|
52
39
|
|
|
53
|
-
--
|
|
40
|
+
-- contract_refunds foreign keys
|
|
41
|
+
ALTER TABLE `contract_refunds` DROP FOREIGN KEY `contract_refunds_tenantId_fkey`;
|
|
54
42
|
ALTER TABLE `contract_refunds` DROP FOREIGN KEY `contract_refunds_contractId_fkey`;
|
|
55
|
-
|
|
56
|
-
-- DropForeignKey
|
|
57
|
-
ALTER TABLE `contract_refunds` DROP FOREIGN KEY `contract_refunds_processedById_fkey`;
|
|
58
|
-
|
|
59
|
-
-- DropForeignKey
|
|
60
43
|
ALTER TABLE `contract_refunds` DROP FOREIGN KEY `contract_refunds_requestedById_fkey`;
|
|
44
|
+
ALTER TABLE `contract_refunds` DROP FOREIGN KEY `contract_refunds_approvedById_fkey`;
|
|
45
|
+
ALTER TABLE `contract_refunds` DROP FOREIGN KEY `contract_refunds_processedById_fkey`;
|
|
61
46
|
|
|
62
|
-
--
|
|
63
|
-
ALTER TABLE `contract_refunds` DROP FOREIGN KEY `contract_refunds_tenantId_fkey`;
|
|
64
|
-
|
|
65
|
-
-- DropForeignKey
|
|
47
|
+
-- contract_terminations foreign keys
|
|
66
48
|
ALTER TABLE `contract_terminations` DROP FOREIGN KEY `contract_terminations_contractId_fkey`;
|
|
67
|
-
|
|
68
|
-
-- DropForeignKey
|
|
49
|
+
ALTER TABLE `contract_terminations` DROP FOREIGN KEY `contract_terminations_tenantId_fkey`;
|
|
69
50
|
ALTER TABLE `contract_terminations` DROP FOREIGN KEY `contract_terminations_initiatorId_fkey`;
|
|
70
|
-
|
|
71
|
-
-- DropForeignKey
|
|
72
51
|
ALTER TABLE `contract_terminations` DROP FOREIGN KEY `contract_terminations_reviewedBy_fkey`;
|
|
73
52
|
|
|
74
|
-
--
|
|
75
|
-
ALTER TABLE `
|
|
76
|
-
|
|
77
|
-
-- DropForeignKey
|
|
78
|
-
ALTER TABLE `contracts` DROP FOREIGN KEY `contracts_buyerId_fkey`;
|
|
79
|
-
|
|
80
|
-
-- DropForeignKey
|
|
81
|
-
ALTER TABLE `contracts` DROP FOREIGN KEY `contracts_currentPhaseId_fkey`;
|
|
82
|
-
|
|
83
|
-
-- DropForeignKey
|
|
84
|
-
ALTER TABLE `contracts` DROP FOREIGN KEY `contracts_paymentMethodId_fkey`;
|
|
85
|
-
|
|
86
|
-
-- DropForeignKey
|
|
87
|
-
ALTER TABLE `contracts` DROP FOREIGN KEY `contracts_propertyUnitId_fkey`;
|
|
88
|
-
|
|
89
|
-
-- DropForeignKey
|
|
90
|
-
ALTER TABLE `contracts` DROP FOREIGN KEY `contracts_sellerId_fkey`;
|
|
91
|
-
|
|
92
|
-
-- DropForeignKey
|
|
93
|
-
ALTER TABLE `contracts` DROP FOREIGN KEY `contracts_tenantId_fkey`;
|
|
94
|
-
|
|
95
|
-
-- DropForeignKey
|
|
96
|
-
ALTER TABLE `contracts` DROP FOREIGN KEY `contracts_transferredFromId_fkey`;
|
|
97
|
-
|
|
98
|
-
-- DropForeignKey
|
|
99
|
-
ALTER TABLE `documentation_phases` DROP FOREIGN KEY `documentation_phases_phaseId_fkey`;
|
|
53
|
+
-- contract_installments foreign keys
|
|
54
|
+
ALTER TABLE `contract_installments` DROP FOREIGN KEY `contract_installments_paymentPhaseId_fkey`;
|
|
100
55
|
|
|
101
|
-
--
|
|
56
|
+
-- other tables referencing contracts
|
|
102
57
|
ALTER TABLE `offer_letters` DROP FOREIGN KEY `offer_letters_contractId_fkey`;
|
|
103
|
-
|
|
104
|
-
-- DropForeignKey
|
|
105
58
|
ALTER TABLE `payment_method_change_requests` DROP FOREIGN KEY `payment_method_change_requests_contractId_fkey`;
|
|
106
|
-
|
|
107
|
-
-- DropForeignKey
|
|
108
|
-
ALTER TABLE `payment_phases` DROP FOREIGN KEY `payment_phases_phaseId_fkey`;
|
|
109
|
-
|
|
110
|
-
-- DropForeignKey
|
|
111
59
|
ALTER TABLE `property_transfer_requests` DROP FOREIGN KEY `property_transfer_requests_sourceContractId_fkey`;
|
|
112
|
-
|
|
113
|
-
-- DropForeignKey
|
|
114
60
|
ALTER TABLE `property_transfer_requests` DROP FOREIGN KEY `property_transfer_requests_targetContractId_fkey`;
|
|
115
61
|
|
|
116
|
-
--
|
|
62
|
+
-- questionnaire_phases, documentation_phases, payment_phases reference contract_phases
|
|
117
63
|
ALTER TABLE `questionnaire_phases` DROP FOREIGN KEY `questionnaire_phases_phaseId_fkey`;
|
|
64
|
+
ALTER TABLE `documentation_phases` DROP FOREIGN KEY `documentation_phases_phaseId_fkey`;
|
|
65
|
+
ALTER TABLE `payment_phases` DROP FOREIGN KEY `payment_phases_phaseId_fkey`;
|
|
118
66
|
|
|
119
|
-
--
|
|
120
|
-
|
|
67
|
+
-- Step 4: Rename tables
|
|
68
|
+
RENAME TABLE `contracts` TO `applications`;
|
|
69
|
+
RENAME TABLE `contract_phases` TO `application_phases`;
|
|
70
|
+
RENAME TABLE `contract_events` TO `application_events`;
|
|
71
|
+
RENAME TABLE `contract_payments` TO `application_payments`;
|
|
72
|
+
RENAME TABLE `contract_documents` TO `application_documents`;
|
|
73
|
+
RENAME TABLE `contract_refunds` TO `application_refunds`;
|
|
74
|
+
RENAME TABLE `contract_terminations` TO `application_terminations`;
|
|
75
|
+
RENAME TABLE `contract_installments` TO `payment_installments`;
|
|
76
|
+
|
|
77
|
+
-- Step 5: Rename columns in applications table
|
|
78
|
+
ALTER TABLE `applications` CHANGE `contractNumber` `applicationNumber` VARCHAR(191) NOT NULL;
|
|
79
|
+
ALTER TABLE `applications` CHANGE `contractType` `applicationType` VARCHAR(191) NOT NULL;
|
|
80
|
+
|
|
81
|
+
-- Step 6: Rename columns in related tables (contractId -> applicationId)
|
|
82
|
+
ALTER TABLE `application_phases` CHANGE `contractId` `applicationId` VARCHAR(191) NOT NULL;
|
|
83
|
+
ALTER TABLE `application_events` CHANGE `contractId` `applicationId` VARCHAR(191) NOT NULL;
|
|
84
|
+
ALTER TABLE `application_payments` CHANGE `contractId` `applicationId` VARCHAR(191) NOT NULL;
|
|
85
|
+
ALTER TABLE `application_documents` CHANGE `contractId` `applicationId` VARCHAR(191) NOT NULL;
|
|
86
|
+
ALTER TABLE `application_refunds` CHANGE `contractId` `applicationId` VARCHAR(191) NOT NULL;
|
|
87
|
+
ALTER TABLE `application_terminations` CHANGE `contractId` `applicationId` VARCHAR(191) NOT NULL;
|
|
88
|
+
|
|
89
|
+
-- Rename columns in other tables that reference contracts
|
|
90
|
+
ALTER TABLE `offer_letters` CHANGE `contractId` `applicationId` VARCHAR(191) NOT NULL;
|
|
91
|
+
ALTER TABLE `payment_method_change_requests` CHANGE `contractId` `applicationId` VARCHAR(191) NOT NULL;
|
|
92
|
+
ALTER TABLE `property_transfer_requests` CHANGE `sourceContractId` `sourceApplicationId` VARCHAR(191) NOT NULL;
|
|
93
|
+
ALTER TABLE `property_transfer_requests` CHANGE `targetContractId` `targetApplicationId` VARCHAR(191) NULL;
|
|
94
|
+
|
|
95
|
+
-- Step 7: Update enum for application_events.eventType
|
|
96
|
+
-- First add new values, then update, then remove old values
|
|
97
|
+
ALTER TABLE `application_events` MODIFY `eventType` ENUM(
|
|
98
|
+
'CONTRACT_CREATED', 'CONTRACT_STATE_CHANGED',
|
|
99
|
+
'APPLICATION_CREATED', 'APPLICATION_STATE_CHANGED',
|
|
100
|
+
'PHASE_ACTIVATED', 'PHASE_COMPLETED', 'STEP_COMPLETED', 'STEP_REJECTED',
|
|
101
|
+
'DOCUMENT_SUBMITTED', 'DOCUMENT_APPROVED', 'DOCUMENT_REJECTED',
|
|
102
|
+
'PAYMENT_INITIATED', 'PAYMENT_COMPLETED', 'PAYMENT_FAILED', 'INSTALLMENTS_GENERATED',
|
|
103
|
+
'CONTRACT_SIGNED', 'CONTRACT_TERMINATED', 'CONTRACT_TRANSFERRED',
|
|
104
|
+
'APPLICATION_SIGNED', 'APPLICATION_TERMINATED', 'APPLICATION_TRANSFERRED',
|
|
105
|
+
'UNDERWRITING_COMPLETED', 'OFFER_LETTER_GENERATED'
|
|
106
|
+
) NOT NULL;
|
|
107
|
+
|
|
108
|
+
UPDATE `application_events` SET `eventType` = 'APPLICATION_CREATED' WHERE `eventType` = 'CONTRACT_CREATED';
|
|
109
|
+
UPDATE `application_events` SET `eventType` = 'APPLICATION_STATE_CHANGED' WHERE `eventType` = 'CONTRACT_STATE_CHANGED';
|
|
110
|
+
UPDATE `application_events` SET `eventType` = 'APPLICATION_SIGNED' WHERE `eventType` = 'CONTRACT_SIGNED';
|
|
111
|
+
UPDATE `application_events` SET `eventType` = 'APPLICATION_TERMINATED' WHERE `eventType` = 'CONTRACT_TERMINATED';
|
|
112
|
+
UPDATE `application_events` SET `eventType` = 'APPLICATION_TRANSFERRED' WHERE `eventType` = 'CONTRACT_TRANSFERRED';
|
|
113
|
+
|
|
114
|
+
ALTER TABLE `application_events` MODIFY `eventType` ENUM(
|
|
115
|
+
'APPLICATION_CREATED', 'APPLICATION_STATE_CHANGED',
|
|
116
|
+
'PHASE_ACTIVATED', 'PHASE_COMPLETED', 'STEP_COMPLETED', 'STEP_REJECTED',
|
|
117
|
+
'DOCUMENT_SUBMITTED', 'DOCUMENT_APPROVED', 'DOCUMENT_REJECTED',
|
|
118
|
+
'PAYMENT_INITIATED', 'PAYMENT_COMPLETED', 'PAYMENT_FAILED', 'INSTALLMENTS_GENERATED',
|
|
119
|
+
'APPLICATION_SIGNED', 'APPLICATION_TERMINATED', 'APPLICATION_TRANSFERRED',
|
|
120
|
+
'UNDERWRITING_COMPLETED', 'OFFER_LETTER_GENERATED'
|
|
121
|
+
) NOT NULL;
|
|
122
|
+
|
|
123
|
+
-- Step 8: Drop old indexes
|
|
124
|
+
DROP INDEX `contracts_contractNumber_key` ON `applications`;
|
|
125
|
+
DROP INDEX `contracts_transferredFromId_key` ON `applications`;
|
|
126
|
+
DROP INDEX `contracts_tenantId_idx` ON `applications`;
|
|
127
|
+
DROP INDEX `contracts_propertyUnitId_idx` ON `applications`;
|
|
128
|
+
DROP INDEX `contracts_buyerId_idx` ON `applications`;
|
|
129
|
+
DROP INDEX `contracts_sellerId_idx` ON `applications`;
|
|
130
|
+
DROP INDEX `contracts_paymentMethodId_idx` ON `applications`;
|
|
131
|
+
DROP INDEX `contracts_status_idx` ON `applications`;
|
|
132
|
+
DROP INDEX `contracts_currentPhaseId_idx` ON `applications`;
|
|
133
|
+
|
|
134
|
+
DROP INDEX `contract_phases_contractId_idx` ON `application_phases`;
|
|
135
|
+
DROP INDEX `contract_phases_phaseCategory_idx` ON `application_phases`;
|
|
136
|
+
DROP INDEX `contract_phases_status_idx` ON `application_phases`;
|
|
137
|
+
DROP INDEX `contract_phases_order_idx` ON `application_phases`;
|
|
138
|
+
|
|
139
|
+
DROP INDEX `contract_events_contractId_idx` ON `application_events`;
|
|
140
|
+
DROP INDEX `contract_events_eventType_idx` ON `application_events`;
|
|
141
|
+
DROP INDEX `contract_events_eventGroup_idx` ON `application_events`;
|
|
142
|
+
DROP INDEX `contract_events_occurredAt_idx` ON `application_events`;
|
|
143
|
+
|
|
144
|
+
DROP INDEX `contract_payments_contractId_idx` ON `application_payments`;
|
|
145
|
+
DROP INDEX `contract_payments_phaseId_idx` ON `application_payments`;
|
|
146
|
+
DROP INDEX `contract_payments_installmentId_idx` ON `application_payments`;
|
|
147
|
+
DROP INDEX `contract_payments_payerId_idx` ON `application_payments`;
|
|
148
|
+
DROP INDEX `contract_payments_status_idx` ON `application_payments`;
|
|
149
|
+
DROP INDEX `contract_payments_reference_key` ON `application_payments`;
|
|
150
|
+
DROP INDEX `contract_payments_reference_idx` ON `application_payments`;
|
|
151
|
+
|
|
152
|
+
DROP INDEX `contract_documents_contractId_idx` ON `application_documents`;
|
|
153
|
+
DROP INDEX `contract_documents_phaseId_idx` ON `application_documents`;
|
|
154
|
+
DROP INDEX `contract_documents_stepId_idx` ON `application_documents`;
|
|
155
|
+
DROP INDEX `contract_documents_type_idx` ON `application_documents`;
|
|
156
|
+
DROP INDEX `contract_documents_status_idx` ON `application_documents`;
|
|
157
|
+
|
|
158
|
+
DROP INDEX `contract_refunds_contractId_idx` ON `application_refunds`;
|
|
159
|
+
DROP INDEX `contract_refunds_status_idx` ON `application_refunds`;
|
|
160
|
+
DROP INDEX `contract_refunds_tenantId_idx` ON `application_refunds`;
|
|
161
|
+
DROP INDEX `contract_refunds_requestedById_idx` ON `application_refunds`;
|
|
162
|
+
|
|
163
|
+
DROP INDEX `contract_terminations_contractId_idx` ON `application_terminations`;
|
|
164
|
+
DROP INDEX `contract_terminations_tenantId_idx` ON `application_terminations`;
|
|
165
|
+
DROP INDEX `contract_terminations_status_idx` ON `application_terminations`;
|
|
166
|
+
DROP INDEX `contract_terminations_type_idx` ON `application_terminations`;
|
|
167
|
+
DROP INDEX `contract_terminations_initiatorId_idx` ON `application_terminations`;
|
|
168
|
+
DROP INDEX `contract_terminations_requestedAt_idx` ON `application_terminations`;
|
|
169
|
+
DROP INDEX `contract_terminations_requestNumber_key` ON `application_terminations`;
|
|
170
|
+
DROP INDEX `contract_terminations_idempotencyKey_key` ON `application_terminations`;
|
|
171
|
+
|
|
172
|
+
DROP INDEX `contract_installments_paymentPhaseId_idx` ON `payment_installments`;
|
|
173
|
+
DROP INDEX `contract_installments_dueDate_idx` ON `payment_installments`;
|
|
174
|
+
DROP INDEX `contract_installments_status_idx` ON `payment_installments`;
|
|
121
175
|
|
|
122
|
-
|
|
176
|
+
DROP INDEX `offer_letters_contractId_idx` ON `offer_letters`;
|
|
123
177
|
DROP INDEX `payment_method_change_requests_contractId_idx` ON `payment_method_change_requests`;
|
|
124
|
-
|
|
125
|
-
-- DropIndex
|
|
126
178
|
DROP INDEX `property_transfer_requests_sourceContractId_idx` ON `property_transfer_requests`;
|
|
127
|
-
|
|
128
|
-
-- DropIndex
|
|
129
179
|
DROP INDEX `property_transfer_requests_targetContractId_fkey` ON `property_transfer_requests`;
|
|
130
180
|
|
|
131
|
-
--
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
181
|
+
-- Step 9: Create new indexes with new names
|
|
182
|
+
CREATE UNIQUE INDEX `applications_applicationNumber_key` ON `applications`(`applicationNumber`);
|
|
183
|
+
CREATE UNIQUE INDEX `applications_transferredFromId_key` ON `applications`(`transferredFromId`);
|
|
184
|
+
CREATE INDEX `applications_tenantId_idx` ON `applications`(`tenantId`);
|
|
185
|
+
CREATE INDEX `applications_propertyUnitId_idx` ON `applications`(`propertyUnitId`);
|
|
186
|
+
CREATE INDEX `applications_buyerId_idx` ON `applications`(`buyerId`);
|
|
187
|
+
CREATE INDEX `applications_sellerId_idx` ON `applications`(`sellerId`);
|
|
188
|
+
CREATE INDEX `applications_paymentMethodId_idx` ON `applications`(`paymentMethodId`);
|
|
189
|
+
CREATE INDEX `applications_status_idx` ON `applications`(`status`);
|
|
190
|
+
CREATE INDEX `applications_currentPhaseId_idx` ON `applications`(`currentPhaseId`);
|
|
191
|
+
|
|
192
|
+
CREATE INDEX `application_phases_applicationId_idx` ON `application_phases`(`applicationId`);
|
|
193
|
+
CREATE INDEX `application_phases_phaseCategory_idx` ON `application_phases`(`phaseCategory`);
|
|
194
|
+
CREATE INDEX `application_phases_status_idx` ON `application_phases`(`status`);
|
|
195
|
+
CREATE INDEX `application_phases_order_idx` ON `application_phases`(`order`);
|
|
196
|
+
|
|
197
|
+
CREATE INDEX `application_events_applicationId_idx` ON `application_events`(`applicationId`);
|
|
198
|
+
CREATE INDEX `application_events_eventType_idx` ON `application_events`(`eventType`);
|
|
199
|
+
CREATE INDEX `application_events_eventGroup_idx` ON `application_events`(`eventGroup`);
|
|
200
|
+
CREATE INDEX `application_events_occurredAt_idx` ON `application_events`(`occurredAt`);
|
|
201
|
+
|
|
202
|
+
CREATE INDEX `application_payments_applicationId_idx` ON `application_payments`(`applicationId`);
|
|
203
|
+
CREATE INDEX `application_payments_phaseId_idx` ON `application_payments`(`phaseId`);
|
|
204
|
+
CREATE INDEX `application_payments_installmentId_idx` ON `application_payments`(`installmentId`);
|
|
205
|
+
CREATE INDEX `application_payments_payerId_idx` ON `application_payments`(`payerId`);
|
|
206
|
+
CREATE INDEX `application_payments_status_idx` ON `application_payments`(`status`);
|
|
207
|
+
CREATE UNIQUE INDEX `application_payments_reference_key` ON `application_payments`(`reference`);
|
|
208
|
+
CREATE INDEX `application_payments_reference_idx` ON `application_payments`(`reference`);
|
|
209
|
+
|
|
210
|
+
CREATE INDEX `application_documents_applicationId_idx` ON `application_documents`(`applicationId`);
|
|
211
|
+
CREATE INDEX `application_documents_phaseId_idx` ON `application_documents`(`phaseId`);
|
|
212
|
+
CREATE INDEX `application_documents_stepId_idx` ON `application_documents`(`stepId`);
|
|
213
|
+
CREATE INDEX `application_documents_type_idx` ON `application_documents`(`type`);
|
|
214
|
+
CREATE INDEX `application_documents_status_idx` ON `application_documents`(`status`);
|
|
215
|
+
|
|
216
|
+
CREATE INDEX `application_refunds_applicationId_idx` ON `application_refunds`(`applicationId`);
|
|
217
|
+
CREATE INDEX `application_refunds_status_idx` ON `application_refunds`(`status`);
|
|
218
|
+
CREATE INDEX `application_refunds_tenantId_idx` ON `application_refunds`(`tenantId`);
|
|
219
|
+
CREATE INDEX `application_refunds_requestedById_idx` ON `application_refunds`(`requestedById`);
|
|
220
|
+
|
|
221
|
+
CREATE INDEX `application_terminations_applicationId_idx` ON `application_terminations`(`applicationId`);
|
|
222
|
+
CREATE INDEX `application_terminations_tenantId_idx` ON `application_terminations`(`tenantId`);
|
|
223
|
+
CREATE INDEX `application_terminations_status_idx` ON `application_terminations`(`status`);
|
|
224
|
+
CREATE INDEX `application_terminations_type_idx` ON `application_terminations`(`type`);
|
|
225
|
+
CREATE INDEX `application_terminations_initiatorId_idx` ON `application_terminations`(`initiatorId`);
|
|
226
|
+
CREATE INDEX `application_terminations_requestedAt_idx` ON `application_terminations`(`requestedAt`);
|
|
227
|
+
CREATE UNIQUE INDEX `application_terminations_requestNumber_key` ON `application_terminations`(`requestNumber`);
|
|
228
|
+
CREATE UNIQUE INDEX `application_terminations_idempotencyKey_key` ON `application_terminations`(`idempotencyKey`);
|
|
229
|
+
|
|
230
|
+
CREATE INDEX `payment_installments_paymentPhaseId_idx` ON `payment_installments`(`paymentPhaseId`);
|
|
231
|
+
CREATE INDEX `payment_installments_dueDate_idx` ON `payment_installments`(`dueDate`);
|
|
232
|
+
CREATE INDEX `payment_installments_status_idx` ON `payment_installments`(`status`);
|
|
136
233
|
|
|
137
|
-
-- AlterTable
|
|
138
|
-
ALTER TABLE `offer_letters` DROP COLUMN `contractId`,
|
|
139
|
-
ADD COLUMN `applicationId` VARCHAR(191) NOT NULL;
|
|
140
|
-
|
|
141
|
-
-- AlterTable
|
|
142
|
-
ALTER TABLE `payment_method_change_requests` DROP COLUMN `contractId`,
|
|
143
|
-
ADD COLUMN `applicationId` VARCHAR(191) NOT NULL;
|
|
144
|
-
|
|
145
|
-
-- AlterTable
|
|
146
|
-
ALTER TABLE `property_transfer_requests` DROP COLUMN `sourceContractId`,
|
|
147
|
-
DROP COLUMN `targetContractId`,
|
|
148
|
-
ADD COLUMN `sourceApplicationId` VARCHAR(191) NOT NULL,
|
|
149
|
-
ADD COLUMN `targetApplicationId` VARCHAR(191) NULL;
|
|
150
|
-
|
|
151
|
-
-- DropTable
|
|
152
|
-
DROP TABLE `contract_documents`;
|
|
153
|
-
|
|
154
|
-
-- DropTable
|
|
155
|
-
DROP TABLE `contract_events`;
|
|
156
|
-
|
|
157
|
-
-- DropTable
|
|
158
|
-
DROP TABLE `contract_installments`;
|
|
159
|
-
|
|
160
|
-
-- DropTable
|
|
161
|
-
DROP TABLE `contract_payments`;
|
|
162
|
-
|
|
163
|
-
-- DropTable
|
|
164
|
-
DROP TABLE `contract_phases`;
|
|
165
|
-
|
|
166
|
-
-- DropTable
|
|
167
|
-
DROP TABLE `contract_refunds`;
|
|
168
|
-
|
|
169
|
-
-- DropTable
|
|
170
|
-
DROP TABLE `contract_terminations`;
|
|
171
|
-
|
|
172
|
-
-- DropTable
|
|
173
|
-
DROP TABLE `contracts`;
|
|
174
|
-
|
|
175
|
-
-- CreateTable
|
|
176
|
-
CREATE TABLE `applications` (
|
|
177
|
-
`id` VARCHAR(191) NOT NULL,
|
|
178
|
-
`tenantId` VARCHAR(191) NOT NULL,
|
|
179
|
-
`propertyUnitId` VARCHAR(191) NOT NULL,
|
|
180
|
-
`buyerId` VARCHAR(191) NOT NULL,
|
|
181
|
-
`sellerId` VARCHAR(191) NULL,
|
|
182
|
-
`paymentMethodId` VARCHAR(191) NULL,
|
|
183
|
-
`applicationNumber` VARCHAR(191) NOT NULL,
|
|
184
|
-
`title` VARCHAR(191) NOT NULL,
|
|
185
|
-
`description` TEXT NULL,
|
|
186
|
-
`applicationType` VARCHAR(191) NOT NULL,
|
|
187
|
-
`totalAmount` DOUBLE NOT NULL,
|
|
188
|
-
`status` ENUM('DRAFT', 'PENDING', 'ACTIVE', 'COMPLETED', 'CANCELLED', 'TERMINATED', 'TRANSFERRED') NOT NULL DEFAULT 'DRAFT',
|
|
189
|
-
`currentPhaseId` VARCHAR(191) NULL,
|
|
190
|
-
`nextPaymentDueDate` DATETIME(3) NULL,
|
|
191
|
-
`lastReminderSentAt` DATETIME(3) NULL,
|
|
192
|
-
`startDate` DATETIME(3) NULL,
|
|
193
|
-
`endDate` DATETIME(3) NULL,
|
|
194
|
-
`signedAt` DATETIME(3) NULL,
|
|
195
|
-
`terminatedAt` DATETIME(3) NULL,
|
|
196
|
-
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
197
|
-
`updatedAt` DATETIME(3) NOT NULL,
|
|
198
|
-
`transferredFromId` VARCHAR(191) NULL,
|
|
199
|
-
|
|
200
|
-
UNIQUE INDEX `applications_applicationNumber_key`(`applicationNumber`),
|
|
201
|
-
UNIQUE INDEX `applications_transferredFromId_key`(`transferredFromId`),
|
|
202
|
-
INDEX `applications_tenantId_idx`(`tenantId`),
|
|
203
|
-
INDEX `applications_propertyUnitId_idx`(`propertyUnitId`),
|
|
204
|
-
INDEX `applications_buyerId_idx`(`buyerId`),
|
|
205
|
-
INDEX `applications_sellerId_idx`(`sellerId`),
|
|
206
|
-
INDEX `applications_paymentMethodId_idx`(`paymentMethodId`),
|
|
207
|
-
INDEX `applications_status_idx`(`status`),
|
|
208
|
-
INDEX `applications_currentPhaseId_idx`(`currentPhaseId`),
|
|
209
|
-
PRIMARY KEY (`id`)
|
|
210
|
-
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
211
|
-
|
|
212
|
-
-- CreateTable
|
|
213
|
-
CREATE TABLE `application_refunds` (
|
|
214
|
-
`id` VARCHAR(191) NOT NULL,
|
|
215
|
-
`tenantId` VARCHAR(191) NOT NULL,
|
|
216
|
-
`applicationId` VARCHAR(191) NOT NULL,
|
|
217
|
-
`amount` DOUBLE NOT NULL,
|
|
218
|
-
`reason` TEXT NOT NULL,
|
|
219
|
-
`status` ENUM('PENDING', 'APPROVED', 'REJECTED', 'PROCESSING', 'COMPLETED', 'FAILED', 'CANCELLED') NOT NULL DEFAULT 'PENDING',
|
|
220
|
-
`requestedById` VARCHAR(191) NOT NULL,
|
|
221
|
-
`approvedById` VARCHAR(191) NULL,
|
|
222
|
-
`processedById` VARCHAR(191) NULL,
|
|
223
|
-
`paymentMethod` VARCHAR(191) NULL,
|
|
224
|
-
`referenceNumber` VARCHAR(191) NULL,
|
|
225
|
-
`recipientName` VARCHAR(191) NULL,
|
|
226
|
-
`recipientAccount` VARCHAR(191) NULL,
|
|
227
|
-
`recipientBank` VARCHAR(191) NULL,
|
|
228
|
-
`requestedAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
229
|
-
`approvedAt` DATETIME(3) NULL,
|
|
230
|
-
`rejectedAt` DATETIME(3) NULL,
|
|
231
|
-
`processedAt` DATETIME(3) NULL,
|
|
232
|
-
`approvalNotes` TEXT NULL,
|
|
233
|
-
`rejectionNotes` TEXT NULL,
|
|
234
|
-
`processingNotes` TEXT NULL,
|
|
235
|
-
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
236
|
-
`updatedAt` DATETIME(3) NOT NULL,
|
|
237
|
-
|
|
238
|
-
INDEX `application_refunds_applicationId_idx`(`applicationId`),
|
|
239
|
-
INDEX `application_refunds_status_idx`(`status`),
|
|
240
|
-
INDEX `application_refunds_tenantId_idx`(`tenantId`),
|
|
241
|
-
INDEX `application_refunds_requestedById_idx`(`requestedById`),
|
|
242
|
-
PRIMARY KEY (`id`)
|
|
243
|
-
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
244
|
-
|
|
245
|
-
-- CreateTable
|
|
246
|
-
CREATE TABLE `application_phases` (
|
|
247
|
-
`id` VARCHAR(191) NOT NULL,
|
|
248
|
-
`applicationId` VARCHAR(191) NOT NULL,
|
|
249
|
-
`name` VARCHAR(191) NOT NULL,
|
|
250
|
-
`description` TEXT NULL,
|
|
251
|
-
`phaseCategory` ENUM('QUESTIONNAIRE', 'DOCUMENTATION', 'PAYMENT') NOT NULL,
|
|
252
|
-
`phaseType` ENUM('PRE_APPROVAL', 'UNDERWRITING', 'KYC', 'VERIFICATION', 'DOWNPAYMENT', 'MORTGAGE', 'BALLOON', 'CUSTOM') NOT NULL,
|
|
253
|
-
`order` INTEGER NOT NULL,
|
|
254
|
-
`status` ENUM('PENDING', 'IN_PROGRESS', 'AWAITING_APPROVAL', 'ACTIVE', 'COMPLETED', 'SKIPPED', 'FAILED', 'SUPERSEDED') NOT NULL DEFAULT 'PENDING',
|
|
255
|
-
`dueDate` DATETIME(3) NULL,
|
|
256
|
-
`startDate` DATETIME(3) NULL,
|
|
257
|
-
`endDate` DATETIME(3) NULL,
|
|
258
|
-
`activatedAt` DATETIME(3) NULL,
|
|
259
|
-
`completedAt` DATETIME(3) NULL,
|
|
260
|
-
`requiresPreviousPhaseCompletion` BOOLEAN NOT NULL DEFAULT true,
|
|
261
|
-
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
262
|
-
`updatedAt` DATETIME(3) NOT NULL,
|
|
263
|
-
|
|
264
|
-
INDEX `application_phases_applicationId_idx`(`applicationId`),
|
|
265
|
-
INDEX `application_phases_phaseCategory_idx`(`phaseCategory`),
|
|
266
|
-
INDEX `application_phases_status_idx`(`status`),
|
|
267
|
-
INDEX `application_phases_order_idx`(`order`),
|
|
268
|
-
PRIMARY KEY (`id`)
|
|
269
|
-
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
270
|
-
|
|
271
|
-
-- CreateTable
|
|
272
|
-
CREATE TABLE `application_events` (
|
|
273
|
-
`id` VARCHAR(191) NOT NULL,
|
|
274
|
-
`applicationId` VARCHAR(191) NOT NULL,
|
|
275
|
-
`eventType` ENUM('APPLICATION_CREATED', 'APPLICATION_STATE_CHANGED', 'PHASE_ACTIVATED', 'PHASE_COMPLETED', 'STEP_COMPLETED', 'STEP_REJECTED', 'DOCUMENT_SUBMITTED', 'DOCUMENT_APPROVED', 'DOCUMENT_REJECTED', 'PAYMENT_INITIATED', 'PAYMENT_COMPLETED', 'PAYMENT_FAILED', 'INSTALLMENTS_GENERATED', 'APPLICATION_SIGNED', 'APPLICATION_TERMINATED', 'APPLICATION_TRANSFERRED', 'UNDERWRITING_COMPLETED', 'OFFER_LETTER_GENERATED') NOT NULL,
|
|
276
|
-
`eventGroup` ENUM('STATE_CHANGE', 'PAYMENT', 'DOCUMENT', 'NOTIFICATION', 'WORKFLOW') NULL,
|
|
277
|
-
`fromState` VARCHAR(191) NULL,
|
|
278
|
-
`toState` VARCHAR(191) NULL,
|
|
279
|
-
`trigger` VARCHAR(191) NULL,
|
|
280
|
-
`data` JSON NULL,
|
|
281
|
-
`actorId` VARCHAR(191) NULL,
|
|
282
|
-
`actorType` ENUM('USER', 'SYSTEM', 'WEBHOOK', 'ADMIN') NULL,
|
|
283
|
-
`occurredAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
284
|
-
|
|
285
|
-
INDEX `application_events_applicationId_idx`(`applicationId`),
|
|
286
|
-
INDEX `application_events_eventType_idx`(`eventType`),
|
|
287
|
-
INDEX `application_events_eventGroup_idx`(`eventGroup`),
|
|
288
|
-
INDEX `application_events_occurredAt_idx`(`occurredAt`),
|
|
289
|
-
PRIMARY KEY (`id`)
|
|
290
|
-
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
291
|
-
|
|
292
|
-
-- CreateTable
|
|
293
|
-
CREATE TABLE `payment_installments` (
|
|
294
|
-
`id` VARCHAR(191) NOT NULL,
|
|
295
|
-
`paymentPhaseId` VARCHAR(191) NOT NULL,
|
|
296
|
-
`installmentNumber` INTEGER NOT NULL,
|
|
297
|
-
`amount` DOUBLE NOT NULL,
|
|
298
|
-
`principalAmount` DOUBLE NOT NULL DEFAULT 0,
|
|
299
|
-
`interestAmount` DOUBLE NOT NULL DEFAULT 0,
|
|
300
|
-
`dueDate` DATETIME(3) NOT NULL,
|
|
301
|
-
`status` ENUM('PENDING', 'PAID', 'OVERDUE', 'PARTIALLY_PAID', 'WAIVED') NOT NULL DEFAULT 'PENDING',
|
|
302
|
-
`paidAmount` DOUBLE NOT NULL DEFAULT 0,
|
|
303
|
-
`paidDate` DATETIME(3) NULL,
|
|
304
|
-
`lateFee` DOUBLE NOT NULL DEFAULT 0,
|
|
305
|
-
`lateFeeWaived` BOOLEAN NOT NULL DEFAULT false,
|
|
306
|
-
`gracePeriodDays` INTEGER NOT NULL DEFAULT 0,
|
|
307
|
-
`gracePeriodEndDate` DATETIME(3) NULL,
|
|
308
|
-
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
309
|
-
`updatedAt` DATETIME(3) NOT NULL,
|
|
310
|
-
|
|
311
|
-
INDEX `payment_installments_paymentPhaseId_idx`(`paymentPhaseId`),
|
|
312
|
-
INDEX `payment_installments_dueDate_idx`(`dueDate`),
|
|
313
|
-
INDEX `payment_installments_status_idx`(`status`),
|
|
314
|
-
PRIMARY KEY (`id`)
|
|
315
|
-
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
316
|
-
|
|
317
|
-
-- CreateTable
|
|
318
|
-
CREATE TABLE `application_payments` (
|
|
319
|
-
`id` VARCHAR(191) NOT NULL,
|
|
320
|
-
`applicationId` VARCHAR(191) NOT NULL,
|
|
321
|
-
`phaseId` VARCHAR(191) NULL,
|
|
322
|
-
`installmentId` VARCHAR(191) NULL,
|
|
323
|
-
`payerId` VARCHAR(191) NULL,
|
|
324
|
-
`amount` DOUBLE NOT NULL,
|
|
325
|
-
`principalAmount` DOUBLE NOT NULL DEFAULT 0,
|
|
326
|
-
`interestAmount` DOUBLE NOT NULL DEFAULT 0,
|
|
327
|
-
`lateFeeAmount` DOUBLE NOT NULL DEFAULT 0,
|
|
328
|
-
`paymentMethod` VARCHAR(191) NOT NULL,
|
|
329
|
-
`status` ENUM('INITIATED', 'PENDING', 'COMPLETED', 'FAILED', 'REFUNDED') NOT NULL DEFAULT 'INITIATED',
|
|
330
|
-
`reference` VARCHAR(191) NULL,
|
|
331
|
-
`gatewayResponse` TEXT NULL,
|
|
332
|
-
`processedAt` DATETIME(3) NULL,
|
|
333
|
-
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
334
|
-
`updatedAt` DATETIME(3) NOT NULL,
|
|
335
|
-
|
|
336
|
-
UNIQUE INDEX `application_payments_reference_key`(`reference`),
|
|
337
|
-
INDEX `application_payments_applicationId_idx`(`applicationId`),
|
|
338
|
-
INDEX `application_payments_phaseId_idx`(`phaseId`),
|
|
339
|
-
INDEX `application_payments_installmentId_idx`(`installmentId`),
|
|
340
|
-
INDEX `application_payments_payerId_idx`(`payerId`),
|
|
341
|
-
INDEX `application_payments_status_idx`(`status`),
|
|
342
|
-
INDEX `application_payments_reference_idx`(`reference`),
|
|
343
|
-
PRIMARY KEY (`id`)
|
|
344
|
-
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
345
|
-
|
|
346
|
-
-- CreateTable
|
|
347
|
-
CREATE TABLE `application_documents` (
|
|
348
|
-
`id` VARCHAR(191) NOT NULL,
|
|
349
|
-
`applicationId` VARCHAR(191) NOT NULL,
|
|
350
|
-
`phaseId` VARCHAR(191) NULL,
|
|
351
|
-
`stepId` VARCHAR(191) NULL,
|
|
352
|
-
`name` VARCHAR(191) NOT NULL,
|
|
353
|
-
`url` VARCHAR(191) NOT NULL,
|
|
354
|
-
`type` VARCHAR(191) NOT NULL,
|
|
355
|
-
`uploadedById` VARCHAR(191) NULL,
|
|
356
|
-
`status` ENUM('DRAFT', 'PENDING', 'PENDING_SIGNATURE', 'SENT', 'VIEWED', 'SIGNED', 'APPROVED', 'REJECTED', 'EXPIRED', 'CANCELLED') NOT NULL DEFAULT 'PENDING',
|
|
357
|
-
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
358
|
-
`updatedAt` DATETIME(3) NOT NULL,
|
|
359
|
-
|
|
360
|
-
INDEX `application_documents_applicationId_idx`(`applicationId`),
|
|
361
|
-
INDEX `application_documents_phaseId_idx`(`phaseId`),
|
|
362
|
-
INDEX `application_documents_stepId_idx`(`stepId`),
|
|
363
|
-
INDEX `application_documents_type_idx`(`type`),
|
|
364
|
-
INDEX `application_documents_status_idx`(`status`),
|
|
365
|
-
PRIMARY KEY (`id`)
|
|
366
|
-
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
367
|
-
|
|
368
|
-
-- CreateTable
|
|
369
|
-
CREATE TABLE `application_terminations` (
|
|
370
|
-
`id` VARCHAR(191) NOT NULL,
|
|
371
|
-
`applicationId` VARCHAR(191) NOT NULL,
|
|
372
|
-
`tenantId` VARCHAR(191) NOT NULL,
|
|
373
|
-
`requestNumber` VARCHAR(191) NOT NULL,
|
|
374
|
-
`initiatedBy` ENUM('BUYER', 'SELLER', 'ADMIN', 'SYSTEM') NOT NULL,
|
|
375
|
-
`initiatorId` VARCHAR(191) NULL,
|
|
376
|
-
`type` ENUM('BUYER_WITHDRAWAL', 'SELLER_WITHDRAWAL', 'MUTUAL_AGREEMENT', 'PAYMENT_DEFAULT', 'DOCUMENT_FAILURE', 'FRAUD', 'FORCE_MAJEURE', 'PROPERTY_UNAVAILABLE', 'REGULATORY', 'OTHER') NOT NULL,
|
|
377
|
-
`reason` TEXT NULL,
|
|
378
|
-
`supportingDocs` JSON NULL,
|
|
379
|
-
`status` ENUM('REQUESTED', 'PENDING_REVIEW', 'PENDING_REFUND', 'REFUND_IN_PROGRESS', 'REFUND_COMPLETED', 'COMPLETED', 'REJECTED', 'CANCELLED') NOT NULL DEFAULT 'REQUESTED',
|
|
380
|
-
`requiresApproval` BOOLEAN NOT NULL DEFAULT true,
|
|
381
|
-
`autoApproveEligible` BOOLEAN NOT NULL DEFAULT false,
|
|
382
|
-
`reviewedBy` VARCHAR(191) NULL,
|
|
383
|
-
`reviewedAt` DATETIME(3) NULL,
|
|
384
|
-
`reviewNotes` TEXT NULL,
|
|
385
|
-
`rejectionReason` TEXT NULL,
|
|
386
|
-
`applicationSnapshot` JSON NOT NULL,
|
|
387
|
-
`totalApplicationAmount` DOUBLE NOT NULL,
|
|
388
|
-
`totalPaidToDate` DOUBLE NOT NULL,
|
|
389
|
-
`outstandingBalance` DOUBLE NOT NULL,
|
|
390
|
-
`refundableAmount` DOUBLE NOT NULL DEFAULT 0,
|
|
391
|
-
`penaltyAmount` DOUBLE NOT NULL DEFAULT 0,
|
|
392
|
-
`forfeitedAmount` DOUBLE NOT NULL DEFAULT 0,
|
|
393
|
-
`adminFeeAmount` DOUBLE NOT NULL DEFAULT 0,
|
|
394
|
-
`netRefundAmount` DOUBLE NOT NULL DEFAULT 0,
|
|
395
|
-
`settlementNotes` TEXT NULL,
|
|
396
|
-
`refundStatus` ENUM('PENDING', 'APPROVED', 'REJECTED', 'PROCESSING', 'COMPLETED', 'FAILED', 'CANCELLED') NOT NULL DEFAULT 'PENDING',
|
|
397
|
-
`refundReference` VARCHAR(191) NULL,
|
|
398
|
-
`refundMethod` VARCHAR(191) NULL,
|
|
399
|
-
`refundAccountDetails` JSON NULL,
|
|
400
|
-
`refundInitiatedAt` DATETIME(3) NULL,
|
|
401
|
-
`refundCompletedAt` DATETIME(3) NULL,
|
|
402
|
-
`refundFailureReason` TEXT NULL,
|
|
403
|
-
`unitReleasedAt` DATETIME(3) NULL,
|
|
404
|
-
`unitReservedForId` VARCHAR(191) NULL,
|
|
405
|
-
`requestedAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
406
|
-
`approvedAt` DATETIME(3) NULL,
|
|
407
|
-
`executedAt` DATETIME(3) NULL,
|
|
408
|
-
`completedAt` DATETIME(3) NULL,
|
|
409
|
-
`cancelledAt` DATETIME(3) NULL,
|
|
410
|
-
`idempotencyKey` VARCHAR(191) NULL,
|
|
411
|
-
`metadata` JSON NULL,
|
|
412
|
-
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
413
|
-
`updatedAt` DATETIME(3) NOT NULL,
|
|
414
|
-
|
|
415
|
-
UNIQUE INDEX `application_terminations_requestNumber_key`(`requestNumber`),
|
|
416
|
-
UNIQUE INDEX `application_terminations_idempotencyKey_key`(`idempotencyKey`),
|
|
417
|
-
INDEX `application_terminations_applicationId_idx`(`applicationId`),
|
|
418
|
-
INDEX `application_terminations_tenantId_idx`(`tenantId`),
|
|
419
|
-
INDEX `application_terminations_status_idx`(`status`),
|
|
420
|
-
INDEX `application_terminations_type_idx`(`type`),
|
|
421
|
-
INDEX `application_terminations_initiatorId_idx`(`initiatorId`),
|
|
422
|
-
INDEX `application_terminations_requestedAt_idx`(`requestedAt`),
|
|
423
|
-
PRIMARY KEY (`id`)
|
|
424
|
-
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
425
|
-
|
|
426
|
-
-- CreateIndex
|
|
427
234
|
CREATE INDEX `offer_letters_applicationId_idx` ON `offer_letters`(`applicationId`);
|
|
428
|
-
|
|
429
|
-
-- CreateIndex
|
|
430
235
|
CREATE INDEX `payment_method_change_requests_applicationId_idx` ON `payment_method_change_requests`(`applicationId`);
|
|
431
|
-
|
|
432
|
-
-- CreateIndex
|
|
433
236
|
CREATE INDEX `property_transfer_requests_sourceApplicationId_idx` ON `property_transfer_requests`(`sourceApplicationId`);
|
|
434
237
|
|
|
435
|
-
--
|
|
238
|
+
-- Step 10: Recreate foreign keys with new names
|
|
239
|
+
-- applications table
|
|
436
240
|
ALTER TABLE `applications` ADD CONSTRAINT `applications_tenantId_fkey` FOREIGN KEY (`tenantId`) REFERENCES `tenants`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
|
|
437
|
-
|
|
438
|
-
-- AddForeignKey
|
|
439
241
|
ALTER TABLE `applications` ADD CONSTRAINT `applications_propertyUnitId_fkey` FOREIGN KEY (`propertyUnitId`) REFERENCES `property_units`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
|
|
440
|
-
|
|
441
|
-
-- AddForeignKey
|
|
442
242
|
ALTER TABLE `applications` ADD CONSTRAINT `applications_buyerId_fkey` FOREIGN KEY (`buyerId`) REFERENCES `users`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
|
|
443
|
-
|
|
444
|
-
-- AddForeignKey
|
|
445
243
|
ALTER TABLE `applications` ADD CONSTRAINT `applications_sellerId_fkey` FOREIGN KEY (`sellerId`) REFERENCES `users`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
|
|
446
|
-
|
|
447
|
-
-- AddForeignKey
|
|
448
244
|
ALTER TABLE `applications` ADD CONSTRAINT `applications_paymentMethodId_fkey` FOREIGN KEY (`paymentMethodId`) REFERENCES `property_payment_methods`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
|
|
449
|
-
|
|
450
|
-
-- AddForeignKey
|
|
451
245
|
ALTER TABLE `applications` ADD CONSTRAINT `applications_currentPhaseId_fkey` FOREIGN KEY (`currentPhaseId`) REFERENCES `application_phases`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
|
|
452
|
-
|
|
453
|
-
-- AddForeignKey
|
|
454
246
|
ALTER TABLE `applications` ADD CONSTRAINT `applications_transferredFromId_fkey` FOREIGN KEY (`transferredFromId`) REFERENCES `applications`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
|
|
455
247
|
|
|
456
|
-
--
|
|
457
|
-
ALTER TABLE `application_refunds` ADD CONSTRAINT `application_refunds_tenantId_fkey` FOREIGN KEY (`tenantId`) REFERENCES `tenants`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
|
|
458
|
-
|
|
459
|
-
-- AddForeignKey
|
|
460
|
-
ALTER TABLE `application_refunds` ADD CONSTRAINT `application_refunds_applicationId_fkey` FOREIGN KEY (`applicationId`) REFERENCES `applications`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
|
|
461
|
-
|
|
462
|
-
-- AddForeignKey
|
|
463
|
-
ALTER TABLE `application_refunds` ADD CONSTRAINT `application_refunds_requestedById_fkey` FOREIGN KEY (`requestedById`) REFERENCES `users`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
464
|
-
|
|
465
|
-
-- AddForeignKey
|
|
466
|
-
ALTER TABLE `application_refunds` ADD CONSTRAINT `application_refunds_approvedById_fkey` FOREIGN KEY (`approvedById`) REFERENCES `users`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
|
|
467
|
-
|
|
468
|
-
-- AddForeignKey
|
|
469
|
-
ALTER TABLE `application_refunds` ADD CONSTRAINT `application_refunds_processedById_fkey` FOREIGN KEY (`processedById`) REFERENCES `users`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
|
|
470
|
-
|
|
471
|
-
-- AddForeignKey
|
|
248
|
+
-- application_phases
|
|
472
249
|
ALTER TABLE `application_phases` ADD CONSTRAINT `application_phases_applicationId_fkey` FOREIGN KEY (`applicationId`) REFERENCES `applications`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
|
|
473
250
|
|
|
474
|
-
--
|
|
251
|
+
-- questionnaire_phases, documentation_phases, payment_phases
|
|
475
252
|
ALTER TABLE `questionnaire_phases` ADD CONSTRAINT `questionnaire_phases_phaseId_fkey` FOREIGN KEY (`phaseId`) REFERENCES `application_phases`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
|
|
476
|
-
|
|
477
|
-
-- AddForeignKey
|
|
478
253
|
ALTER TABLE `documentation_phases` ADD CONSTRAINT `documentation_phases_phaseId_fkey` FOREIGN KEY (`phaseId`) REFERENCES `application_phases`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
|
|
479
|
-
|
|
480
|
-
-- AddForeignKey
|
|
481
254
|
ALTER TABLE `payment_phases` ADD CONSTRAINT `payment_phases_phaseId_fkey` FOREIGN KEY (`phaseId`) REFERENCES `application_phases`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
|
|
482
255
|
|
|
483
|
-
--
|
|
256
|
+
-- application_events
|
|
484
257
|
ALTER TABLE `application_events` ADD CONSTRAINT `application_events_applicationId_fkey` FOREIGN KEY (`applicationId`) REFERENCES `applications`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
|
|
485
258
|
|
|
486
|
-
--
|
|
259
|
+
-- payment_installments
|
|
487
260
|
ALTER TABLE `payment_installments` ADD CONSTRAINT `payment_installments_paymentPhaseId_fkey` FOREIGN KEY (`paymentPhaseId`) REFERENCES `payment_phases`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
|
|
488
261
|
|
|
489
|
-
--
|
|
262
|
+
-- application_payments
|
|
490
263
|
ALTER TABLE `application_payments` ADD CONSTRAINT `application_payments_applicationId_fkey` FOREIGN KEY (`applicationId`) REFERENCES `applications`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
|
|
491
|
-
|
|
492
|
-
-- AddForeignKey
|
|
493
264
|
ALTER TABLE `application_payments` ADD CONSTRAINT `application_payments_phaseId_fkey` FOREIGN KEY (`phaseId`) REFERENCES `application_phases`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
|
|
494
|
-
|
|
495
|
-
-- AddForeignKey
|
|
496
265
|
ALTER TABLE `application_payments` ADD CONSTRAINT `application_payments_installmentId_fkey` FOREIGN KEY (`installmentId`) REFERENCES `payment_installments`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
|
|
497
|
-
|
|
498
|
-
-- AddForeignKey
|
|
499
266
|
ALTER TABLE `application_payments` ADD CONSTRAINT `application_payments_payerId_fkey` FOREIGN KEY (`payerId`) REFERENCES `users`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
|
|
500
267
|
|
|
501
|
-
--
|
|
268
|
+
-- application_documents
|
|
502
269
|
ALTER TABLE `application_documents` ADD CONSTRAINT `application_documents_applicationId_fkey` FOREIGN KEY (`applicationId`) REFERENCES `applications`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
|
|
503
|
-
|
|
504
|
-
-- AddForeignKey
|
|
505
270
|
ALTER TABLE `application_documents` ADD CONSTRAINT `application_documents_uploadedById_fkey` FOREIGN KEY (`uploadedById`) REFERENCES `users`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
|
|
506
271
|
|
|
507
|
-
--
|
|
508
|
-
ALTER TABLE `
|
|
272
|
+
-- application_refunds
|
|
273
|
+
ALTER TABLE `application_refunds` ADD CONSTRAINT `application_refunds_tenantId_fkey` FOREIGN KEY (`tenantId`) REFERENCES `tenants`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
|
|
274
|
+
ALTER TABLE `application_refunds` ADD CONSTRAINT `application_refunds_applicationId_fkey` FOREIGN KEY (`applicationId`) REFERENCES `applications`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
|
|
275
|
+
ALTER TABLE `application_refunds` ADD CONSTRAINT `application_refunds_requestedById_fkey` FOREIGN KEY (`requestedById`) REFERENCES `users`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
276
|
+
ALTER TABLE `application_refunds` ADD CONSTRAINT `application_refunds_approvedById_fkey` FOREIGN KEY (`approvedById`) REFERENCES `users`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
|
|
277
|
+
ALTER TABLE `application_refunds` ADD CONSTRAINT `application_refunds_processedById_fkey` FOREIGN KEY (`processedById`) REFERENCES `users`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
|
|
509
278
|
|
|
510
|
-
--
|
|
279
|
+
-- application_terminations
|
|
511
280
|
ALTER TABLE `application_terminations` ADD CONSTRAINT `application_terminations_applicationId_fkey` FOREIGN KEY (`applicationId`) REFERENCES `applications`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
|
|
512
|
-
|
|
513
|
-
-- AddForeignKey
|
|
514
281
|
ALTER TABLE `application_terminations` ADD CONSTRAINT `application_terminations_tenantId_fkey` FOREIGN KEY (`tenantId`) REFERENCES `tenants`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
|
|
515
|
-
|
|
516
|
-
-- AddForeignKey
|
|
517
282
|
ALTER TABLE `application_terminations` ADD CONSTRAINT `application_terminations_initiatorId_fkey` FOREIGN KEY (`initiatorId`) REFERENCES `users`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
|
|
518
|
-
|
|
519
|
-
-- AddForeignKey
|
|
520
283
|
ALTER TABLE `application_terminations` ADD CONSTRAINT `application_terminations_reviewedBy_fkey` FOREIGN KEY (`reviewedBy`) REFERENCES `users`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
|
|
521
284
|
|
|
522
|
-
--
|
|
285
|
+
-- offer_letters
|
|
286
|
+
ALTER TABLE `offer_letters` ADD CONSTRAINT `offer_letters_applicationId_fkey` FOREIGN KEY (`applicationId`) REFERENCES `applications`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
|
|
287
|
+
|
|
288
|
+
-- payment_method_change_requests
|
|
523
289
|
ALTER TABLE `payment_method_change_requests` ADD CONSTRAINT `payment_method_change_requests_applicationId_fkey` FOREIGN KEY (`applicationId`) REFERENCES `applications`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
|
|
524
290
|
|
|
525
|
-
--
|
|
291
|
+
-- property_transfer_requests
|
|
526
292
|
ALTER TABLE `property_transfer_requests` ADD CONSTRAINT `property_transfer_requests_sourceApplicationId_fkey` FOREIGN KEY (`sourceApplicationId`) REFERENCES `applications`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
|
|
527
|
-
|
|
528
|
-
-- AddForeignKey
|
|
529
293
|
ALTER TABLE `property_transfer_requests` ADD CONSTRAINT `property_transfer_requests_targetApplicationId_fkey` FOREIGN KEY (`targetApplicationId`) REFERENCES `applications`(`id`) ON DELETE SET NULL ON UPDATE CASCADE;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/*
|
|
2
|
+
Warnings:
|
|
3
|
+
|
|
4
|
+
- You are about to drop the column `contractSnapshot` on the `application_terminations` table. All the data in the column will be lost.
|
|
5
|
+
- You are about to drop the column `totalContractAmount` on the `application_terminations` table. All the data in the column will be lost.
|
|
6
|
+
- Added the required column `applicationSnapshot` to the `application_terminations` table without a default value. This is not possible if the table is not empty.
|
|
7
|
+
- Added the required column `totalApplicationAmount` to the `application_terminations` table without a default value. This is not possible if the table is not empty.
|
|
8
|
+
|
|
9
|
+
*/
|
|
10
|
+
-- AlterTable
|
|
11
|
+
ALTER TABLE `application_terminations` DROP COLUMN `contractSnapshot`,
|
|
12
|
+
DROP COLUMN `totalContractAmount`,
|
|
13
|
+
ADD COLUMN `applicationSnapshot` JSON NOT NULL,
|
|
14
|
+
ADD COLUMN `totalApplicationAmount` DOUBLE NOT NULL;
|