@@ -74,7 +74,7 @@ model MfaBackupCode {
7474 /// Hash of the actual code
7575 code String
7676
77- user User @relation (fields : [userId ] , references : [id ] )
77+ user User @relation (fields : [userId ] , references : [id ] , onDelete : Cascade , onUpdate : Cascade )
7878 userId String
7979
8080 usedAt DateTime ?
@@ -131,7 +131,7 @@ model PersonalAccessToken {
131131 /// This is used to find the token in the database
132132 hashedToken String @unique
133133
134- user User @relation (fields : [userId ] , references : [id ] )
134+ user User @relation (fields : [userId ] , references : [id ] , onDelete : Cascade , onUpdate : Cascade )
135135 userId String
136136
137137 revokedAt DateTime ?
@@ -2590,6 +2590,32 @@ model ImpersonationAuditLog {
25902590 @@index ([createdAt ] )
25912591}
25922592
2593+ model UserDeletionAuditLog {
2594+ id String @id @default (cuid () )
2595+
2596+ /// Denormalized — audit row must survive after the target user is deleted.
2597+ /// No FKs to User; store IDs and emails as plain text.
2598+ adminUserId String
2599+ adminEmail String
2600+ targetUserId String
2601+ targetEmail String
2602+
2603+ /// Organization IDs that were soft-deleted as part of this user delete
2604+ /// (orgs where the deleted user was the sole member).
2605+ softDeletedOrgIds String []
2606+
2607+ /// Optional: ticket link / GDPR request id / free-text SE note.
2608+ reason String ?
2609+
2610+ ipAddress String ?
2611+
2612+ createdAt DateTime @default (now () )
2613+
2614+ @@index ([adminUserId ] )
2615+ @@index ([targetUserId ] )
2616+ @@index ([createdAt ] )
2617+ }
2618+
25932619enum CustomerQuerySource {
25942620 DASHBOARD
25952621 API
0 commit comments