@valentine-efagene/qshelter-common 2.0.75 → 2.0.77
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/generated/client/browser.d.ts +5 -5
- package/dist/generated/client/client.d.ts +5 -5
- package/dist/generated/client/enums.d.ts +36 -0
- package/dist/generated/client/enums.js +33 -0
- package/dist/generated/client/internal/class.d.ts +11 -11
- package/dist/generated/client/internal/class.js +2 -2
- package/dist/generated/client/internal/prismaNamespace.d.ts +95 -95
- package/dist/generated/client/internal/prismaNamespace.js +25 -25
- package/dist/generated/client/internal/prismaNamespaceBrowser.d.ts +27 -27
- package/dist/generated/client/internal/prismaNamespaceBrowser.js +25 -25
- package/dist/generated/client/models/Contract.d.ts +155 -155
- package/dist/generated/client/models/index.d.ts +3 -0
- package/dist/generated/client/models/index.js +3 -0
- package/dist/generated/client/models.d.ts +1 -1
- package/dist/src/events/bus/event-bus.service.d.ts +84 -0
- package/dist/src/events/bus/event-bus.service.js +372 -0
- package/dist/src/events/bus/event-bus.types.d.ts +73 -0
- package/dist/src/events/bus/event-bus.types.js +22 -0
- package/dist/src/events/index.d.ts +5 -6
- package/dist/src/events/index.js +7 -8
- package/dist/src/events/notifications/event-publisher.d.ts +41 -0
- package/dist/src/events/notifications/event-publisher.js +111 -0
- package/dist/src/events/notifications/notification-enums.d.ts +46 -0
- package/dist/src/events/notifications/notification-enums.js +59 -0
- package/dist/src/events/notifications/notification-event.d.ts +76 -0
- package/dist/src/events/notifications/notification-event.js +1 -0
- package/dist/src/events/unified/unified-event.service.d.ts +157 -0
- package/dist/src/events/unified/unified-event.service.js +177 -0
- package/dist/src/events/workflow/event-config.service.d.ts +123 -0
- package/dist/src/events/workflow/event-config.service.js +416 -0
- package/dist/src/events/workflow/event-seeder.d.ts +80 -0
- package/dist/src/events/workflow/event-seeder.js +343 -0
- package/dist/src/events/workflow/workflow-event.service.d.ts +230 -0
- package/dist/src/events/workflow/workflow-event.service.js +682 -0
- package/dist/src/events/workflow/workflow-types.d.ts +364 -0
- package/dist/src/events/workflow/workflow-types.js +22 -0
- package/package.json +4 -1
- package/prisma/schema.prisma +123 -79
package/prisma/schema.prisma
CHANGED
|
@@ -204,6 +204,42 @@ enum OfferLetterStatus {
|
|
|
204
204
|
CANCELLED
|
|
205
205
|
}
|
|
206
206
|
|
|
207
|
+
enum ContractEventType {
|
|
208
|
+
CONTRACT_CREATED
|
|
209
|
+
CONTRACT_STATE_CHANGED
|
|
210
|
+
PHASE_ACTIVATED
|
|
211
|
+
PHASE_COMPLETED
|
|
212
|
+
STEP_COMPLETED
|
|
213
|
+
STEP_REJECTED
|
|
214
|
+
DOCUMENT_SUBMITTED
|
|
215
|
+
DOCUMENT_APPROVED
|
|
216
|
+
DOCUMENT_REJECTED
|
|
217
|
+
PAYMENT_INITIATED
|
|
218
|
+
PAYMENT_COMPLETED
|
|
219
|
+
PAYMENT_FAILED
|
|
220
|
+
INSTALLMENTS_GENERATED
|
|
221
|
+
CONTRACT_SIGNED
|
|
222
|
+
CONTRACT_TERMINATED
|
|
223
|
+
CONTRACT_TRANSFERRED
|
|
224
|
+
UNDERWRITING_COMPLETED
|
|
225
|
+
OFFER_LETTER_GENERATED
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
enum ContractEventGroup {
|
|
229
|
+
STATE_CHANGE
|
|
230
|
+
PAYMENT
|
|
231
|
+
DOCUMENT
|
|
232
|
+
NOTIFICATION
|
|
233
|
+
WORKFLOW
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
enum EventActorType {
|
|
237
|
+
USER
|
|
238
|
+
SYSTEM
|
|
239
|
+
WEBHOOK
|
|
240
|
+
ADMIN
|
|
241
|
+
}
|
|
242
|
+
|
|
207
243
|
// =============================================================================
|
|
208
244
|
// EVENT-DRIVEN WORKFLOW ENUMS
|
|
209
245
|
// =============================================================================
|
|
@@ -211,12 +247,12 @@ enum OfferLetterStatus {
|
|
|
211
247
|
/// Handler Type - What kind of action the handler performs
|
|
212
248
|
/// These are business-friendly names that admins can understand
|
|
213
249
|
enum EventHandlerType {
|
|
214
|
-
SEND_EMAIL
|
|
215
|
-
SEND_SMS
|
|
216
|
-
SEND_PUSH
|
|
217
|
-
CALL_WEBHOOK
|
|
250
|
+
SEND_EMAIL // Send an email notification to recipient(s)
|
|
251
|
+
SEND_SMS // Send an SMS text message
|
|
252
|
+
SEND_PUSH // Send a push notification
|
|
253
|
+
CALL_WEBHOOK // Call an external API/webhook
|
|
218
254
|
ADVANCE_WORKFLOW // Advance or complete a workflow step
|
|
219
|
-
RUN_AUTOMATION
|
|
255
|
+
RUN_AUTOMATION // Execute internal business logic
|
|
220
256
|
}
|
|
221
257
|
|
|
222
258
|
/// Actor Type - Who triggered an event
|
|
@@ -430,33 +466,33 @@ model Tenant {
|
|
|
430
466
|
// =============================================================================
|
|
431
467
|
|
|
432
468
|
model ApiKey {
|
|
433
|
-
id
|
|
434
|
-
tenantId
|
|
435
|
-
tenant
|
|
469
|
+
id String @id @default(cuid())
|
|
470
|
+
tenantId String
|
|
471
|
+
tenant Tenant @relation(fields: [tenantId], references: [id], onDelete: Cascade)
|
|
436
472
|
|
|
437
473
|
// Identification
|
|
438
|
-
name String
|
|
439
|
-
description String?
|
|
440
|
-
provider String
|
|
474
|
+
name String // Human-readable name (e.g., "Paystack Integration")
|
|
475
|
+
description String? @db.Text // Optional description
|
|
476
|
+
provider String // Partner/vendor name (e.g., "paystack", "flutterwave")
|
|
441
477
|
|
|
442
478
|
// Secret management (NEVER store raw secret in DB)
|
|
443
|
-
secretRef
|
|
479
|
+
secretRef String // AWS Secrets Manager ARN or name
|
|
444
480
|
|
|
445
481
|
// Permissions - scopes this API key is allowed to request
|
|
446
482
|
// Examples: ["contract:read", "payment:*", "property:read"]
|
|
447
|
-
scopes
|
|
483
|
+
scopes Json // JSON array of scope strings
|
|
448
484
|
|
|
449
485
|
// Lifecycle
|
|
450
|
-
enabled
|
|
451
|
-
expiresAt
|
|
452
|
-
lastUsedAt
|
|
453
|
-
revokedAt
|
|
454
|
-
revokedBy
|
|
486
|
+
enabled Boolean @default(true)
|
|
487
|
+
expiresAt DateTime? // Optional expiration date
|
|
488
|
+
lastUsedAt DateTime? // Updated on each token exchange
|
|
489
|
+
revokedAt DateTime? // Set when key is revoked
|
|
490
|
+
revokedBy String? // User ID who revoked
|
|
455
491
|
|
|
456
492
|
// Audit
|
|
457
|
-
createdBy
|
|
458
|
-
createdAt
|
|
459
|
-
updatedAt
|
|
493
|
+
createdBy String? // User ID who created
|
|
494
|
+
createdAt DateTime @default(now())
|
|
495
|
+
updatedAt DateTime @updatedAt
|
|
460
496
|
|
|
461
497
|
@@index([tenantId])
|
|
462
498
|
@@index([provider])
|
|
@@ -994,7 +1030,7 @@ model PaymentMethodPhaseStep {
|
|
|
994
1030
|
/// Step Event Attachment - Links event handlers to step template triggers
|
|
995
1031
|
/// When a step transitions (complete, reject, etc.), attached handlers fire
|
|
996
1032
|
model StepEventAttachment {
|
|
997
|
-
id String
|
|
1033
|
+
id String @id @default(cuid())
|
|
998
1034
|
stepId String
|
|
999
1035
|
step PaymentMethodPhaseStep @relation(fields: [stepId], references: [id], onDelete: Cascade)
|
|
1000
1036
|
|
|
@@ -1104,7 +1140,6 @@ model Contract {
|
|
|
1104
1140
|
phases ContractPhase[]
|
|
1105
1141
|
documents ContractDocument[]
|
|
1106
1142
|
payments ContractPayment[]
|
|
1107
|
-
events ContractEvent[]
|
|
1108
1143
|
terminations ContractTermination[]
|
|
1109
1144
|
offerLetters OfferLetter[]
|
|
1110
1145
|
|
|
@@ -1121,6 +1156,9 @@ model Contract {
|
|
|
1121
1156
|
// Transfer requests where this contract is the target (created after approval)
|
|
1122
1157
|
incomingTransferRequests PropertyTransferRequest[] @relation("TargetContract")
|
|
1123
1158
|
|
|
1159
|
+
// Audit trail
|
|
1160
|
+
events ContractEvent[]
|
|
1161
|
+
|
|
1124
1162
|
@@index([tenantId])
|
|
1125
1163
|
@@index([propertyUnitId])
|
|
1126
1164
|
@@index([buyerId])
|
|
@@ -1212,6 +1250,44 @@ model ContractPhase {
|
|
|
1212
1250
|
@@map("contract_phases")
|
|
1213
1251
|
}
|
|
1214
1252
|
|
|
1253
|
+
// =============================================================================
|
|
1254
|
+
// CONTRACT EVENTS - Audit trail for contract lifecycle
|
|
1255
|
+
// =============================================================================
|
|
1256
|
+
// Tracks all significant events in a contract's lifecycle for audit, compliance,
|
|
1257
|
+
// and debugging. Unlike DomainEvent (which is for inter-service communication),
|
|
1258
|
+
// ContractEvent is purely for historical tracking and state machine transitions.
|
|
1259
|
+
// =============================================================================
|
|
1260
|
+
model ContractEvent {
|
|
1261
|
+
id String @id @default(cuid())
|
|
1262
|
+
contractId String
|
|
1263
|
+
contract Contract @relation(fields: [contractId], references: [id], onDelete: Cascade)
|
|
1264
|
+
|
|
1265
|
+
// Event classification
|
|
1266
|
+
eventType ContractEventType
|
|
1267
|
+
eventGroup ContractEventGroup?
|
|
1268
|
+
|
|
1269
|
+
// For state transitions (optional - only populated for CONTRACT_STATE_CHANGED events)
|
|
1270
|
+
fromState String?
|
|
1271
|
+
toState String?
|
|
1272
|
+
trigger String?
|
|
1273
|
+
|
|
1274
|
+
// Event payload (all event-specific data)
|
|
1275
|
+
data Json?
|
|
1276
|
+
|
|
1277
|
+
// Actor tracking
|
|
1278
|
+
actorId String?
|
|
1279
|
+
actorType EventActorType?
|
|
1280
|
+
|
|
1281
|
+
// Timing
|
|
1282
|
+
occurredAt DateTime @default(now())
|
|
1283
|
+
|
|
1284
|
+
@@index([contractId])
|
|
1285
|
+
@@index([eventType])
|
|
1286
|
+
@@index([eventGroup])
|
|
1287
|
+
@@index([occurredAt])
|
|
1288
|
+
@@map("contract_events")
|
|
1289
|
+
}
|
|
1290
|
+
|
|
1215
1291
|
// Steps within a DOCUMENTATION phase (FSM for document collection/approval)
|
|
1216
1292
|
model DocumentationStep {
|
|
1217
1293
|
id String @id @default(cuid())
|
|
@@ -1403,38 +1479,6 @@ model ContractDocument {
|
|
|
1403
1479
|
@@map("contract_documents")
|
|
1404
1480
|
}
|
|
1405
1481
|
|
|
1406
|
-
// Contract domain events (FSM transitions, payments, documents, etc.)
|
|
1407
|
-
model ContractEvent {
|
|
1408
|
-
id String @id @default(cuid())
|
|
1409
|
-
contractId String
|
|
1410
|
-
contract Contract @relation(fields: [contractId], references: [id], onDelete: Cascade)
|
|
1411
|
-
|
|
1412
|
-
// Event classification
|
|
1413
|
-
eventType String // STATE.TRANSITION, PHASE.ACTIVATED, PAYMENT.COMPLETED, etc.
|
|
1414
|
-
eventGroup String? // STATE_CHANGE, PAYMENT, DOCUMENT, NOTIFICATION (for filtering)
|
|
1415
|
-
|
|
1416
|
-
// For state transitions (optional - only populated for STATE.TRANSITION events)
|
|
1417
|
-
fromState String?
|
|
1418
|
-
toState String?
|
|
1419
|
-
trigger String?
|
|
1420
|
-
|
|
1421
|
-
// Event payload (all event-specific data)
|
|
1422
|
-
data Json?
|
|
1423
|
-
|
|
1424
|
-
// Actor tracking
|
|
1425
|
-
actorId String?
|
|
1426
|
-
actorType String? // USER, SYSTEM, WEBHOOK
|
|
1427
|
-
|
|
1428
|
-
// Timing
|
|
1429
|
-
occurredAt DateTime @default(now())
|
|
1430
|
-
|
|
1431
|
-
@@index([contractId])
|
|
1432
|
-
@@index([eventType])
|
|
1433
|
-
@@index([eventGroup])
|
|
1434
|
-
@@index([occurredAt])
|
|
1435
|
-
@@map("contract_events")
|
|
1436
|
-
}
|
|
1437
|
-
|
|
1438
1482
|
// =============================================================================
|
|
1439
1483
|
// OFFER LETTERS - Provisional and Final offer documents
|
|
1440
1484
|
// =============================================================================
|
|
@@ -1760,9 +1804,9 @@ model DocumentRequirementRule {
|
|
|
1760
1804
|
/// Event Channel - A logical grouping of events
|
|
1761
1805
|
/// Channels help organize events and route them to appropriate handlers
|
|
1762
1806
|
model EventChannel {
|
|
1763
|
-
id
|
|
1764
|
-
tenantId
|
|
1765
|
-
tenant
|
|
1807
|
+
id String @id @default(cuid())
|
|
1808
|
+
tenantId String
|
|
1809
|
+
tenant Tenant @relation(fields: [tenantId], references: [id], onDelete: Cascade)
|
|
1766
1810
|
|
|
1767
1811
|
/// Unique code for the channel (e.g., "CONTRACTS", "PAYMENTS")
|
|
1768
1812
|
code String
|
|
@@ -1772,7 +1816,7 @@ model EventChannel {
|
|
|
1772
1816
|
description String? @db.Text
|
|
1773
1817
|
|
|
1774
1818
|
/// Whether this channel is active
|
|
1775
|
-
enabled
|
|
1819
|
+
enabled Boolean @default(true)
|
|
1776
1820
|
|
|
1777
1821
|
/// Event types that belong to this channel
|
|
1778
1822
|
eventTypes EventType[]
|
|
@@ -1788,9 +1832,9 @@ model EventChannel {
|
|
|
1788
1832
|
/// Event Type - Defines a type of event that can occur
|
|
1789
1833
|
/// Each event type belongs to a channel and can have multiple handlers
|
|
1790
1834
|
model EventType {
|
|
1791
|
-
id
|
|
1792
|
-
tenantId
|
|
1793
|
-
tenant
|
|
1835
|
+
id String @id @default(cuid())
|
|
1836
|
+
tenantId String
|
|
1837
|
+
tenant Tenant @relation(fields: [tenantId], references: [id], onDelete: Cascade)
|
|
1794
1838
|
|
|
1795
1839
|
/// The channel this event type belongs to
|
|
1796
1840
|
channelId String
|
|
@@ -1828,9 +1872,9 @@ model EventType {
|
|
|
1828
1872
|
/// Event Handler - Defines what should happen when an event fires
|
|
1829
1873
|
/// Handlers can be internal (call a service), external (webhook), or workflow triggers
|
|
1830
1874
|
model EventHandler {
|
|
1831
|
-
id
|
|
1832
|
-
tenantId
|
|
1833
|
-
tenant
|
|
1875
|
+
id String @id @default(cuid())
|
|
1876
|
+
tenantId String
|
|
1877
|
+
tenant Tenant @relation(fields: [tenantId], references: [id], onDelete: Cascade)
|
|
1834
1878
|
|
|
1835
1879
|
/// The event type this handler responds to
|
|
1836
1880
|
eventTypeId String
|
|
@@ -2053,7 +2097,7 @@ model PropertyTransferRequest {
|
|
|
2053
2097
|
sourceTotalAmount Float? // Original contract total
|
|
2054
2098
|
targetTotalAmount Float? // New contract total (based on target property)
|
|
2055
2099
|
priceAdjustment Float? // Difference (positive = buyer owes more)
|
|
2056
|
-
paymentsMigrated Int?
|
|
2100
|
+
paymentsMigrated Int? // Number of payments migrated
|
|
2057
2101
|
|
|
2058
2102
|
// Result - new contract created after approval
|
|
2059
2103
|
targetContractId String?
|
|
@@ -2078,21 +2122,21 @@ model PropertyTransferRequest {
|
|
|
2078
2122
|
// =============================================================================
|
|
2079
2123
|
|
|
2080
2124
|
enum ApprovalRequestType {
|
|
2081
|
-
PROPERTY_TRANSFER
|
|
2082
|
-
PROPERTY_UPDATE
|
|
2083
|
-
USER_WORKFLOW
|
|
2084
|
-
CREDIT_CHECK
|
|
2125
|
+
PROPERTY_TRANSFER // Property unit transfer between contracts
|
|
2126
|
+
PROPERTY_UPDATE // Property/unit listing update requiring approval
|
|
2127
|
+
USER_WORKFLOW // User workflow step approval
|
|
2128
|
+
CREDIT_CHECK // Credit check result review
|
|
2085
2129
|
CONTRACT_TERMINATION // Contract termination approval
|
|
2086
|
-
REFUND_APPROVAL
|
|
2130
|
+
REFUND_APPROVAL // Refund request approval
|
|
2087
2131
|
}
|
|
2088
2132
|
|
|
2089
2133
|
enum ApprovalRequestStatus {
|
|
2090
|
-
PENDING
|
|
2091
|
-
IN_REVIEW
|
|
2092
|
-
APPROVED
|
|
2093
|
-
REJECTED
|
|
2094
|
-
CANCELLED
|
|
2095
|
-
EXPIRED
|
|
2134
|
+
PENDING // Awaiting review
|
|
2135
|
+
IN_REVIEW // Assigned to reviewer
|
|
2136
|
+
APPROVED // Approved by reviewer
|
|
2137
|
+
REJECTED // Rejected by reviewer
|
|
2138
|
+
CANCELLED // Cancelled by requestor
|
|
2139
|
+
EXPIRED // Auto-expired (if TTL configured)
|
|
2096
2140
|
}
|
|
2097
2141
|
|
|
2098
2142
|
enum ApprovalRequestPriority {
|
|
@@ -2119,7 +2163,7 @@ model ApprovalRequest {
|
|
|
2119
2163
|
|
|
2120
2164
|
// Request metadata
|
|
2121
2165
|
title String @db.VarChar(255) // Human-readable title for the request
|
|
2122
|
-
description String? @db.Text
|
|
2166
|
+
description String? @db.Text // Detailed description
|
|
2123
2167
|
|
|
2124
2168
|
// Payload for any additional context (JSON)
|
|
2125
2169
|
payload Json? // Flexible data storage for type-specific details
|
|
@@ -2137,7 +2181,7 @@ model ApprovalRequest {
|
|
|
2137
2181
|
reviewedBy User? @relation("ApprovalReviewer", fields: [reviewedById], references: [id])
|
|
2138
2182
|
|
|
2139
2183
|
// Review details
|
|
2140
|
-
reviewNotes String?
|
|
2184
|
+
reviewNotes String? @db.Text // Reviewer's notes/comments
|
|
2141
2185
|
decision ApprovalDecision? // APPROVED, REJECTED, REQUEST_CHANGES
|
|
2142
2186
|
|
|
2143
2187
|
// Expiration
|