-- CreateTable CREATE TABLE `PdfTemplate` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `name` VARCHAR(191) NOT NULL, `description` VARCHAR(191) NULL, `providerName` VARCHAR(191) NULL, `templatePath` VARCHAR(191) NOT NULL, `originalName` VARCHAR(191) NOT NULL, `fieldMapping` LONGTEXT NOT NULL, `phoneFieldPrefix` VARCHAR(191) NULL, `maxPhoneFields` INTEGER NULL DEFAULT 8, `isActive` BOOLEAN NOT NULL DEFAULT true, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updatedAt` DATETIME(3) NOT NULL, UNIQUE INDEX `PdfTemplate_name_key`(`name`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `EmailLog` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `fromAddress` VARCHAR(191) NOT NULL, `toAddress` VARCHAR(191) NOT NULL, `subject` VARCHAR(191) NOT NULL, `context` VARCHAR(191) NOT NULL, `customerId` INTEGER NULL, `triggeredBy` VARCHAR(191) NULL, `smtpServer` VARCHAR(191) NOT NULL, `smtpPort` INTEGER NOT NULL, `smtpEncryption` VARCHAR(191) NOT NULL, `smtpUser` VARCHAR(191) NOT NULL, `success` BOOLEAN NOT NULL, `messageId` VARCHAR(191) NULL, `errorMessage` TEXT NULL, `smtpResponse` TEXT NULL, `sentAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), INDEX `EmailLog_sentAt_idx`(`sentAt`), INDEX `EmailLog_customerId_idx`(`customerId`), INDEX `EmailLog_success_idx`(`success`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `AppSetting` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `key` VARCHAR(191) NOT NULL, `value` TEXT NOT NULL, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updatedAt` DATETIME(3) NOT NULL, UNIQUE INDEX `AppSetting_key_key`(`key`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `User` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `email` VARCHAR(191) NOT NULL, `password` VARCHAR(191) NOT NULL, `firstName` VARCHAR(191) NOT NULL, `lastName` VARCHAR(191) NOT NULL, `isActive` BOOLEAN NOT NULL DEFAULT true, `tokenInvalidatedAt` DATETIME(3) NULL, `passwordResetToken` VARCHAR(191) NULL, `passwordResetExpiresAt` DATETIME(3) NULL, `whatsappNumber` VARCHAR(191) NULL, `telegramUsername` VARCHAR(191) NULL, `signalNumber` VARCHAR(191) NULL, `customerId` INTEGER NULL, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updatedAt` DATETIME(3) NOT NULL, UNIQUE INDEX `User_email_key`(`email`), UNIQUE INDEX `User_passwordResetToken_key`(`passwordResetToken`), UNIQUE INDEX `User_customerId_key`(`customerId`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `Role` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `name` VARCHAR(191) NOT NULL, `description` VARCHAR(191) NULL, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updatedAt` DATETIME(3) NOT NULL, UNIQUE INDEX `Role_name_key`(`name`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `Permission` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `resource` VARCHAR(191) NOT NULL, `action` VARCHAR(191) NOT NULL, UNIQUE INDEX `Permission_resource_action_key`(`resource`, `action`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `RolePermission` ( `roleId` INTEGER NOT NULL, `permissionId` INTEGER NOT NULL, PRIMARY KEY (`roleId`, `permissionId`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `UserRole` ( `userId` INTEGER NOT NULL, `roleId` INTEGER NOT NULL, PRIMARY KEY (`userId`, `roleId`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `Customer` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `customerNumber` VARCHAR(191) NOT NULL, `type` ENUM('PRIVATE', 'BUSINESS') NOT NULL DEFAULT 'PRIVATE', `salutation` VARCHAR(191) NULL, `firstName` VARCHAR(191) NOT NULL, `lastName` VARCHAR(191) NOT NULL, `companyName` VARCHAR(191) NULL, `foundingDate` DATETIME(3) NULL, `birthDate` DATETIME(3) NULL, `birthPlace` VARCHAR(191) NULL, `email` VARCHAR(191) NULL, `phone` VARCHAR(191) NULL, `mobile` VARCHAR(191) NULL, `taxNumber` VARCHAR(191) NULL, `businessRegistrationPath` VARCHAR(191) NULL, `commercialRegisterPath` VARCHAR(191) NULL, `commercialRegisterNumber` VARCHAR(191) NULL, `privacyPolicyPath` VARCHAR(191) NULL, `consentHash` VARCHAR(191) NULL, `notes` TEXT NULL, `portalEnabled` BOOLEAN NOT NULL DEFAULT false, `portalEmail` VARCHAR(191) NULL, `portalPasswordHash` VARCHAR(191) NULL, `portalPasswordEncrypted` VARCHAR(191) NULL, `portalLastLogin` DATETIME(3) NULL, `portalPasswordResetToken` VARCHAR(191) NULL, `portalPasswordResetExpiresAt` DATETIME(3) NULL, `portalTokenInvalidatedAt` DATETIME(3) NULL, `lastBirthdayGreetingYear` INTEGER NULL, `useInformalAddress` BOOLEAN NOT NULL DEFAULT false, `autoBirthdayGreeting` BOOLEAN NOT NULL DEFAULT false, `autoBirthdayChannel` VARCHAR(191) NULL, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updatedAt` DATETIME(3) NOT NULL, UNIQUE INDEX `Customer_customerNumber_key`(`customerNumber`), UNIQUE INDEX `Customer_consentHash_key`(`consentHash`), UNIQUE INDEX `Customer_portalEmail_key`(`portalEmail`), UNIQUE INDEX `Customer_portalPasswordResetToken_key`(`portalPasswordResetToken`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `CustomerRepresentative` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `customerId` INTEGER NOT NULL, `representativeId` INTEGER NOT NULL, `notes` VARCHAR(191) NULL, `isActive` BOOLEAN NOT NULL DEFAULT true, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updatedAt` DATETIME(3) NOT NULL, UNIQUE INDEX `CustomerRepresentative_customerId_representativeId_key`(`customerId`, `representativeId`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `RepresentativeAuthorization` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `customerId` INTEGER NOT NULL, `representativeId` INTEGER NOT NULL, `isGranted` BOOLEAN NOT NULL DEFAULT false, `grantedAt` DATETIME(3) NULL, `withdrawnAt` DATETIME(3) NULL, `source` VARCHAR(191) NULL, `documentPath` VARCHAR(191) NULL, `notes` TEXT NULL, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updatedAt` DATETIME(3) NOT NULL, UNIQUE INDEX `RepresentativeAuthorization_customerId_representativeId_key`(`customerId`, `representativeId`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `Address` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `customerId` INTEGER NOT NULL, `type` ENUM('DELIVERY_RESIDENCE', 'BILLING') NOT NULL DEFAULT 'DELIVERY_RESIDENCE', `street` VARCHAR(191) NOT NULL, `houseNumber` VARCHAR(191) NOT NULL, `postalCode` VARCHAR(191) NOT NULL, `city` VARCHAR(191) NOT NULL, `country` VARCHAR(191) NOT NULL DEFAULT 'Deutschland', `isDefault` BOOLEAN NOT NULL DEFAULT false, `ownerCompany` VARCHAR(191) NULL, `ownerFirstName` VARCHAR(191) NULL, `ownerLastName` VARCHAR(191) NULL, `ownerStreet` VARCHAR(191) NULL, `ownerHouseNumber` VARCHAR(191) NULL, `ownerPostalCode` VARCHAR(191) NULL, `ownerCity` VARCHAR(191) NULL, `ownerPhone` VARCHAR(191) NULL, `ownerMobile` VARCHAR(191) NULL, `ownerEmail` VARCHAR(191) NULL, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updatedAt` DATETIME(3) NOT NULL, PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `BankCard` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `customerId` INTEGER NOT NULL, `accountHolder` VARCHAR(191) NOT NULL, `iban` VARCHAR(191) NOT NULL, `bic` VARCHAR(191) NULL, `bankName` VARCHAR(191) NULL, `expiryDate` DATETIME(3) NULL, `documentPath` VARCHAR(191) NULL, `isActive` BOOLEAN NOT NULL DEFAULT true, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updatedAt` DATETIME(3) NOT NULL, PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `IdentityDocument` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `customerId` INTEGER NOT NULL, `type` ENUM('ID_CARD', 'PASSPORT', 'DRIVERS_LICENSE', 'OTHER') NOT NULL DEFAULT 'ID_CARD', `documentNumber` VARCHAR(191) NOT NULL, `issuingAuthority` VARCHAR(191) NULL, `issueDate` DATETIME(3) NULL, `expiryDate` DATETIME(3) NULL, `documentPath` VARCHAR(191) NULL, `isActive` BOOLEAN NOT NULL DEFAULT true, `licenseClasses` VARCHAR(191) NULL, `licenseIssueDate` DATETIME(3) NULL, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updatedAt` DATETIME(3) NOT NULL, PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `EmailProviderConfig` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `name` VARCHAR(191) NOT NULL, `type` ENUM('PLESK', 'CPANEL', 'DIRECTADMIN') NOT NULL, `apiUrl` VARCHAR(191) NOT NULL, `apiKey` VARCHAR(191) NULL, `username` VARCHAR(191) NULL, `passwordEncrypted` VARCHAR(191) NULL, `domain` VARCHAR(191) NOT NULL, `defaultForwardEmail` VARCHAR(191) NULL, `imapServer` VARCHAR(191) NULL, `imapPort` INTEGER NULL DEFAULT 993, `smtpServer` VARCHAR(191) NULL, `smtpPort` INTEGER NULL DEFAULT 465, `imapEncryption` ENUM('SSL', 'STARTTLS', 'NONE') NOT NULL DEFAULT 'SSL', `smtpEncryption` ENUM('SSL', 'STARTTLS', 'NONE') NOT NULL DEFAULT 'SSL', `allowSelfSignedCerts` BOOLEAN NOT NULL DEFAULT false, `systemEmailAddress` VARCHAR(191) NULL, `systemEmailPasswordEncrypted` VARCHAR(191) NULL, `customerEmailLabel` VARCHAR(191) NULL, `isActive` BOOLEAN NOT NULL DEFAULT true, `isDefault` BOOLEAN NOT NULL DEFAULT false, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updatedAt` DATETIME(3) NOT NULL, UNIQUE INDEX `EmailProviderConfig_name_key`(`name`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `StressfreiEmail` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `customerId` INTEGER NOT NULL, `email` VARCHAR(191) NOT NULL, `platform` VARCHAR(191) NULL, `notes` TEXT NULL, `isActive` BOOLEAN NOT NULL DEFAULT true, `isProvisioned` BOOLEAN NOT NULL DEFAULT false, `provisionedAt` DATETIME(3) NULL, `provisionError` TEXT NULL, `hasMailbox` BOOLEAN NOT NULL DEFAULT false, `emailPasswordEncrypted` VARCHAR(191) NULL, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updatedAt` DATETIME(3) NOT NULL, PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `CachedEmail` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `stressfreiEmailId` INTEGER NOT NULL, `folder` ENUM('INBOX', 'SENT') NOT NULL DEFAULT 'INBOX', `messageId` VARCHAR(191) NOT NULL, `uid` INTEGER NOT NULL, `subject` VARCHAR(191) NULL, `fromAddress` VARCHAR(191) NOT NULL, `fromName` VARCHAR(191) NULL, `toAddresses` TEXT NOT NULL, `ccAddresses` TEXT NULL, `receivedAt` DATETIME(3) NOT NULL, `textBody` LONGTEXT NULL, `htmlBody` LONGTEXT NULL, `hasAttachments` BOOLEAN NOT NULL DEFAULT false, `attachmentNames` TEXT NULL, `contractId` INTEGER NULL, `assignedAt` DATETIME(3) NULL, `assignedBy` INTEGER NULL, `isAutoAssigned` BOOLEAN NOT NULL DEFAULT false, `isRead` BOOLEAN NOT NULL DEFAULT false, `isStarred` BOOLEAN NOT NULL DEFAULT false, `isDeleted` BOOLEAN NOT NULL DEFAULT false, `deletedAt` DATETIME(3) NULL, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updatedAt` DATETIME(3) NOT NULL, INDEX `CachedEmail_contractId_idx`(`contractId`), INDEX `CachedEmail_stressfreiEmailId_folder_receivedAt_idx`(`stressfreiEmailId`, `folder`, `receivedAt`), INDEX `CachedEmail_stressfreiEmailId_isDeleted_idx`(`stressfreiEmailId`, `isDeleted`), UNIQUE INDEX `CachedEmail_stressfreiEmailId_messageId_folder_key`(`stressfreiEmailId`, `messageId`, `folder`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `Meter` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `customerId` INTEGER NOT NULL, `meterNumber` VARCHAR(191) NOT NULL, `type` ENUM('ELECTRICITY', 'GAS') NOT NULL, `tariffModel` ENUM('SINGLE', 'DUAL') NOT NULL DEFAULT 'SINGLE', `location` VARCHAR(191) NULL, `isActive` BOOLEAN NOT NULL DEFAULT true, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updatedAt` DATETIME(3) NOT NULL, PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `MeterReading` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `meterId` INTEGER NOT NULL, `readingDate` DATETIME(3) NOT NULL, `value` DOUBLE NOT NULL, `valueNt` DOUBLE NULL, `unit` VARCHAR(191) NOT NULL DEFAULT 'kWh', `notes` VARCHAR(191) NULL, `reportedBy` VARCHAR(191) NULL, `status` ENUM('RECORDED', 'REPORTED', 'TRANSFERRED') NOT NULL DEFAULT 'RECORDED', `transferredAt` DATETIME(3) NULL, `transferredBy` VARCHAR(191) NULL, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `SalesPlatform` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `name` VARCHAR(191) NOT NULL, `contactInfo` TEXT NULL, `isActive` BOOLEAN NOT NULL DEFAULT true, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updatedAt` DATETIME(3) NOT NULL, UNIQUE INDEX `SalesPlatform_name_key`(`name`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `CancellationPeriod` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `code` VARCHAR(191) NOT NULL, `description` VARCHAR(191) NOT NULL, `isActive` BOOLEAN NOT NULL DEFAULT true, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updatedAt` DATETIME(3) NOT NULL, UNIQUE INDEX `CancellationPeriod_code_key`(`code`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `ContractDuration` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `code` VARCHAR(191) NOT NULL, `description` VARCHAR(191) NOT NULL, `isActive` BOOLEAN NOT NULL DEFAULT true, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updatedAt` DATETIME(3) NOT NULL, UNIQUE INDEX `ContractDuration_code_key`(`code`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `Provider` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `name` VARCHAR(191) NOT NULL, `portalUrl` VARCHAR(191) NULL, `usernameFieldName` VARCHAR(191) NULL, `passwordFieldName` VARCHAR(191) NULL, `isActive` BOOLEAN NOT NULL DEFAULT true, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updatedAt` DATETIME(3) NOT NULL, UNIQUE INDEX `Provider_name_key`(`name`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `Tariff` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `providerId` INTEGER NOT NULL, `name` VARCHAR(191) NOT NULL, `isActive` BOOLEAN NOT NULL DEFAULT true, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updatedAt` DATETIME(3) NOT NULL, UNIQUE INDEX `Tariff_providerId_name_key`(`providerId`, `name`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `ContractCategory` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `code` VARCHAR(191) NOT NULL, `name` VARCHAR(191) NOT NULL, `icon` VARCHAR(191) NULL, `color` VARCHAR(191) NULL, `sortOrder` INTEGER NOT NULL DEFAULT 0, `isActive` BOOLEAN NOT NULL DEFAULT true, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updatedAt` DATETIME(3) NOT NULL, UNIQUE INDEX `ContractCategory_code_key`(`code`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `Contract` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `contractNumber` VARCHAR(191) NOT NULL, `customerId` INTEGER NOT NULL, `type` ENUM('ELECTRICITY', 'GAS', 'DSL', 'CABLE', 'FIBER', 'MOBILE', 'TV', 'CAR_INSURANCE') NOT NULL, `status` ENUM('DRAFT', 'PENDING', 'ACTIVE', 'CANCELLED', 'EXPIRED', 'DEACTIVATED') NOT NULL DEFAULT 'DRAFT', `contractCategoryId` INTEGER NULL, `addressId` INTEGER NULL, `billingAddressId` INTEGER NULL, `bankCardId` INTEGER NULL, `identityDocumentId` INTEGER NULL, `salesPlatformId` INTEGER NULL, `cancellationPeriodId` INTEGER NULL, `contractDurationId` INTEGER NULL, `previousContractId` INTEGER NULL, `previousProviderId` INTEGER NULL, `previousCustomerNumber` VARCHAR(191) NULL, `previousContractNumber` VARCHAR(191) NULL, `providerId` INTEGER NULL, `tariffId` INTEGER NULL, `providerName` VARCHAR(191) NULL, `tariffName` VARCHAR(191) NULL, `customerNumberAtProvider` VARCHAR(191) NULL, `contractNumberAtProvider` VARCHAR(191) NULL, `priceFirst12Months` VARCHAR(191) NULL, `priceFrom13Months` VARCHAR(191) NULL, `priceAfter24Months` VARCHAR(191) NULL, `startDate` DATETIME(3) NULL, `endDate` DATETIME(3) NULL, `commission` DOUBLE NULL, `cancellationLetterPath` VARCHAR(191) NULL, `cancellationConfirmationPath` VARCHAR(191) NULL, `cancellationLetterOptionsPath` VARCHAR(191) NULL, `cancellationConfirmationOptionsPath` VARCHAR(191) NULL, `cancellationConfirmationDate` DATETIME(3) NULL, `cancellationConfirmationOptionsDate` DATETIME(3) NULL, `wasSpecialCancellation` BOOLEAN NOT NULL DEFAULT false, `portalUsername` VARCHAR(191) NULL, `portalPasswordEncrypted` VARCHAR(191) NULL, `stressfreiEmailId` INTEGER NULL, `nextReviewDate` DATETIME(3) NULL, `notes` TEXT NULL, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updatedAt` DATETIME(3) NOT NULL, UNIQUE INDEX `Contract_contractNumber_key`(`contractNumber`), UNIQUE INDEX `Contract_previousContractId_key`(`previousContractId`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `ContractDocument` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `contractId` INTEGER NOT NULL, `documentType` VARCHAR(191) NOT NULL, `documentPath` VARCHAR(191) NOT NULL, `originalName` VARCHAR(191) NOT NULL, `notes` TEXT NULL, `uploadedBy` VARCHAR(191) NULL, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), INDEX `ContractDocument_contractId_idx`(`contractId`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `ContractHistoryEntry` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `contractId` INTEGER NOT NULL, `title` VARCHAR(191) NOT NULL, `description` TEXT NULL, `isAutomatic` BOOLEAN NOT NULL DEFAULT false, `createdBy` VARCHAR(191) NOT NULL, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `ContractTask` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `contractId` INTEGER NOT NULL, `title` VARCHAR(191) NOT NULL, `description` TEXT NULL, `status` ENUM('OPEN', 'COMPLETED') NOT NULL DEFAULT 'OPEN', `visibleInPortal` BOOLEAN NOT NULL DEFAULT false, `createdBy` VARCHAR(191) NULL, `completedAt` DATETIME(3) NULL, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updatedAt` DATETIME(3) NOT NULL, PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `ContractTaskSubtask` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `taskId` INTEGER NOT NULL, `title` VARCHAR(191) NOT NULL, `status` ENUM('OPEN', 'COMPLETED') NOT NULL DEFAULT 'OPEN', `createdBy` VARCHAR(191) NULL, `completedAt` DATETIME(3) NULL, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updatedAt` DATETIME(3) NOT NULL, PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `EnergyContractDetails` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `contractId` INTEGER NOT NULL, `meterId` INTEGER NULL, `maloId` VARCHAR(191) NULL, `annualConsumption` DOUBLE NULL, `annualConsumptionKwh` DOUBLE NULL, `basePrice` DOUBLE NULL, `unitPrice` DOUBLE NULL, `unitPriceNt` DOUBLE NULL, `bonus` DOUBLE NULL, `previousProviderName` VARCHAR(191) NULL, `previousCustomerNumber` VARCHAR(191) NULL, UNIQUE INDEX `EnergyContractDetails_contractId_key`(`contractId`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `ContractMeter` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `energyContractDetailsId` INTEGER NOT NULL, `meterId` INTEGER NOT NULL, `position` INTEGER NOT NULL DEFAULT 0, `installedAt` DATETIME(3) NULL, `removedAt` DATETIME(3) NULL, `finalReading` DOUBLE NULL, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), INDEX `ContractMeter_energyContractDetailsId_idx`(`energyContractDetailsId`), UNIQUE INDEX `ContractMeter_energyContractDetailsId_meterId_key`(`energyContractDetailsId`, `meterId`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `Invoice` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `energyContractDetailsId` INTEGER NULL, `contractId` INTEGER NULL, `invoiceDate` DATETIME(3) NOT NULL, `invoiceType` ENUM('INTERIM', 'FINAL', 'NOT_AVAILABLE') NOT NULL, `documentPath` VARCHAR(191) NULL, `notes` VARCHAR(191) NULL, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updatedAt` DATETIME(3) NOT NULL, INDEX `Invoice_energyContractDetailsId_idx`(`energyContractDetailsId`), INDEX `Invoice_contractId_idx`(`contractId`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `InternetContractDetails` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `contractId` INTEGER NOT NULL, `downloadSpeed` INTEGER NULL, `uploadSpeed` INTEGER NULL, `routerModel` VARCHAR(191) NULL, `routerSerialNumber` VARCHAR(191) NULL, `installationDate` DATETIME(3) NULL, `internetUsername` VARCHAR(191) NULL, `internetPasswordEncrypted` VARCHAR(191) NULL, `propertyType` VARCHAR(191) NULL, `propertyLocation` VARCHAR(191) NULL, `connectionLocation` VARCHAR(191) NULL, `homeId` VARCHAR(191) NULL, `activationCode` VARCHAR(191) NULL, UNIQUE INDEX `InternetContractDetails_contractId_key`(`contractId`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `PhoneNumber` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `internetContractDetailsId` INTEGER NOT NULL, `phoneNumber` VARCHAR(191) NOT NULL, `isMain` BOOLEAN NOT NULL DEFAULT false, `sipUsername` VARCHAR(191) NULL, `sipPasswordEncrypted` VARCHAR(191) NULL, `sipServer` VARCHAR(191) NULL, PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `MobileContractDetails` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `contractId` INTEGER NOT NULL, `requiresMultisim` BOOLEAN NOT NULL DEFAULT false, `dataVolume` DOUBLE NULL, `includedMinutes` INTEGER NULL, `includedSMS` INTEGER NULL, `deviceModel` VARCHAR(191) NULL, `deviceImei` VARCHAR(191) NULL, `phoneNumber` VARCHAR(191) NULL, `simCardNumber` VARCHAR(191) NULL, UNIQUE INDEX `MobileContractDetails_contractId_key`(`contractId`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `SimCard` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `mobileDetailsId` INTEGER NOT NULL, `phoneNumber` VARCHAR(191) NULL, `simCardNumber` VARCHAR(191) NULL, `pin` VARCHAR(191) NULL, `puk` VARCHAR(191) NULL, `isMultisim` BOOLEAN NOT NULL DEFAULT false, `isMain` BOOLEAN NOT NULL DEFAULT false, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updatedAt` DATETIME(3) NOT NULL, PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `TvContractDetails` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `contractId` INTEGER NOT NULL, `receiverModel` VARCHAR(191) NULL, `smartcardNumber` VARCHAR(191) NULL, `package` VARCHAR(191) NULL, UNIQUE INDEX `TvContractDetails_contractId_key`(`contractId`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `CarInsuranceDetails` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `contractId` INTEGER NOT NULL, `licensePlate` VARCHAR(191) NULL, `hsn` VARCHAR(191) NULL, `tsn` VARCHAR(191) NULL, `vin` VARCHAR(191) NULL, `vehicleType` VARCHAR(191) NULL, `firstRegistration` DATETIME(3) NULL, `noClaimsClass` VARCHAR(191) NULL, `insuranceType` ENUM('LIABILITY', 'PARTIAL', 'FULL') NOT NULL DEFAULT 'LIABILITY', `deductiblePartial` DOUBLE NULL, `deductibleFull` DOUBLE NULL, `policyNumber` VARCHAR(191) NULL, `previousInsurer` VARCHAR(191) NULL, UNIQUE INDEX `CarInsuranceDetails_contractId_key`(`contractId`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `AuditLog` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `userId` INTEGER NULL, `userEmail` VARCHAR(191) NOT NULL, `userRole` TEXT NULL, `customerId` INTEGER NULL, `isCustomerPortal` BOOLEAN NOT NULL DEFAULT false, `action` ENUM('CREATE', 'READ', 'UPDATE', 'DELETE', 'EXPORT', 'ANONYMIZE', 'LOGIN', 'LOGOUT', 'LOGIN_FAILED') NOT NULL, `sensitivity` ENUM('LOW', 'MEDIUM', 'HIGH', 'CRITICAL') NOT NULL DEFAULT 'MEDIUM', `resourceType` VARCHAR(191) NOT NULL, `resourceId` VARCHAR(191) NULL, `resourceLabel` VARCHAR(191) NULL, `endpoint` VARCHAR(191) NOT NULL, `httpMethod` VARCHAR(191) NOT NULL, `ipAddress` VARCHAR(191) NOT NULL, `userAgent` TEXT NULL, `changesBefore` LONGTEXT NULL, `changesAfter` LONGTEXT NULL, `changesEncrypted` BOOLEAN NOT NULL DEFAULT false, `dataSubjectId` INTEGER NULL, `legalBasis` VARCHAR(191) NULL, `success` BOOLEAN NOT NULL DEFAULT true, `errorMessage` TEXT NULL, `durationMs` INTEGER NULL, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `hash` VARCHAR(191) NULL, `previousHash` VARCHAR(191) NULL, INDEX `AuditLog_userId_idx`(`userId`), INDEX `AuditLog_customerId_idx`(`customerId`), INDEX `AuditLog_resourceType_resourceId_idx`(`resourceType`, `resourceId`), INDEX `AuditLog_dataSubjectId_idx`(`dataSubjectId`), INDEX `AuditLog_action_idx`(`action`), INDEX `AuditLog_createdAt_idx`(`createdAt`), INDEX `AuditLog_sensitivity_idx`(`sensitivity`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `CustomerConsent` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `customerId` INTEGER NOT NULL, `consentType` ENUM('DATA_PROCESSING', 'MARKETING_EMAIL', 'MARKETING_PHONE', 'DATA_SHARING_PARTNER') NOT NULL, `status` ENUM('GRANTED', 'WITHDRAWN', 'PENDING') NOT NULL DEFAULT 'PENDING', `grantedAt` DATETIME(3) NULL, `withdrawnAt` DATETIME(3) NULL, `source` VARCHAR(191) NULL, `documentPath` VARCHAR(191) NULL, `version` VARCHAR(191) NULL, `ipAddress` VARCHAR(191) NULL, `createdBy` VARCHAR(191) NOT NULL, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updatedAt` DATETIME(3) NOT NULL, INDEX `CustomerConsent_customerId_idx`(`customerId`), INDEX `CustomerConsent_consentType_idx`(`consentType`), INDEX `CustomerConsent_status_idx`(`status`), UNIQUE INDEX `CustomerConsent_customerId_consentType_key`(`customerId`, `consentType`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `DataDeletionRequest` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `customerId` INTEGER NOT NULL, `status` ENUM('PENDING', 'IN_PROGRESS', 'COMPLETED', 'PARTIALLY_COMPLETED', 'REJECTED') NOT NULL DEFAULT 'PENDING', `requestedAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `requestSource` VARCHAR(191) NOT NULL, `requestedBy` VARCHAR(191) NOT NULL, `processedAt` DATETIME(3) NULL, `processedBy` VARCHAR(191) NULL, `deletedData` LONGTEXT NULL, `retainedData` LONGTEXT NULL, `retentionReason` TEXT NULL, `proofDocument` VARCHAR(191) NULL, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updatedAt` DATETIME(3) NOT NULL, INDEX `DataDeletionRequest_customerId_idx`(`customerId`), INDEX `DataDeletionRequest_status_idx`(`status`), INDEX `DataDeletionRequest_requestedAt_idx`(`requestedAt`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `AuditRetentionPolicy` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `resourceType` VARCHAR(191) NOT NULL, `sensitivity` ENUM('LOW', 'MEDIUM', 'HIGH', 'CRITICAL') NULL, `retentionDays` INTEGER NOT NULL, `description` VARCHAR(191) NULL, `legalBasis` VARCHAR(191) NULL, `isActive` BOOLEAN NOT NULL DEFAULT true, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), `updatedAt` DATETIME(3) NOT NULL, UNIQUE INDEX `AuditRetentionPolicy_resourceType_sensitivity_key`(`resourceType`, `sensitivity`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- CreateTable CREATE TABLE `SecurityEvent` ( `id` INTEGER NOT NULL AUTO_INCREMENT, `type` ENUM('LOGIN_FAILED', 'LOGIN_SUCCESS', 'RATE_LIMIT_HIT', 'ACCESS_DENIED', 'SSRF_BLOCKED', 'PASSWORD_RESET_REQUEST', 'PASSWORD_RESET_CONFIRM', 'LOGOUT', 'TOKEN_REJECTED', 'PERMISSION_CHANGED', 'SUSPICIOUS') NOT NULL, `severity` ENUM('INFO', 'LOW', 'MEDIUM', 'HIGH', 'CRITICAL') NOT NULL, `message` TEXT NOT NULL, `ipAddress` VARCHAR(191) NULL, `userId` INTEGER NULL, `customerId` INTEGER NULL, `userEmail` VARCHAR(191) NULL, `endpoint` VARCHAR(191) NULL, `details` JSON NULL, `alerted` BOOLEAN NOT NULL DEFAULT false, `alertedAt` DATETIME(3) NULL, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3), INDEX `SecurityEvent_type_createdAt_idx`(`type`, `createdAt`), INDEX `SecurityEvent_severity_createdAt_idx`(`severity`, `createdAt`), INDEX `SecurityEvent_ipAddress_createdAt_idx`(`ipAddress`, `createdAt`), INDEX `SecurityEvent_alerted_severity_idx`(`alerted`, `severity`), PRIMARY KEY (`id`) ) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; -- AddForeignKey ALTER TABLE `User` ADD CONSTRAINT `User_customerId_fkey` FOREIGN KEY (`customerId`) REFERENCES `Customer`(`id`) ON DELETE SET NULL ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `RolePermission` ADD CONSTRAINT `RolePermission_roleId_fkey` FOREIGN KEY (`roleId`) REFERENCES `Role`(`id`) ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `RolePermission` ADD CONSTRAINT `RolePermission_permissionId_fkey` FOREIGN KEY (`permissionId`) REFERENCES `Permission`(`id`) ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `UserRole` ADD CONSTRAINT `UserRole_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `UserRole` ADD CONSTRAINT `UserRole_roleId_fkey` FOREIGN KEY (`roleId`) REFERENCES `Role`(`id`) ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `CustomerRepresentative` ADD CONSTRAINT `CustomerRepresentative_customerId_fkey` FOREIGN KEY (`customerId`) REFERENCES `Customer`(`id`) ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `CustomerRepresentative` ADD CONSTRAINT `CustomerRepresentative_representativeId_fkey` FOREIGN KEY (`representativeId`) REFERENCES `Customer`(`id`) ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `RepresentativeAuthorization` ADD CONSTRAINT `RepresentativeAuthorization_customerId_fkey` FOREIGN KEY (`customerId`) REFERENCES `Customer`(`id`) ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `RepresentativeAuthorization` ADD CONSTRAINT `RepresentativeAuthorization_representativeId_fkey` FOREIGN KEY (`representativeId`) REFERENCES `Customer`(`id`) ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `Address` ADD CONSTRAINT `Address_customerId_fkey` FOREIGN KEY (`customerId`) REFERENCES `Customer`(`id`) ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `BankCard` ADD CONSTRAINT `BankCard_customerId_fkey` FOREIGN KEY (`customerId`) REFERENCES `Customer`(`id`) ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `IdentityDocument` ADD CONSTRAINT `IdentityDocument_customerId_fkey` FOREIGN KEY (`customerId`) REFERENCES `Customer`(`id`) ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `StressfreiEmail` ADD CONSTRAINT `StressfreiEmail_customerId_fkey` FOREIGN KEY (`customerId`) REFERENCES `Customer`(`id`) ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `CachedEmail` ADD CONSTRAINT `CachedEmail_stressfreiEmailId_fkey` FOREIGN KEY (`stressfreiEmailId`) REFERENCES `StressfreiEmail`(`id`) ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `CachedEmail` ADD CONSTRAINT `CachedEmail_contractId_fkey` FOREIGN KEY (`contractId`) REFERENCES `Contract`(`id`) ON DELETE SET NULL ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `Meter` ADD CONSTRAINT `Meter_customerId_fkey` FOREIGN KEY (`customerId`) REFERENCES `Customer`(`id`) ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `MeterReading` ADD CONSTRAINT `MeterReading_meterId_fkey` FOREIGN KEY (`meterId`) REFERENCES `Meter`(`id`) ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `Tariff` ADD CONSTRAINT `Tariff_providerId_fkey` FOREIGN KEY (`providerId`) REFERENCES `Provider`(`id`) ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `Contract` ADD CONSTRAINT `Contract_customerId_fkey` FOREIGN KEY (`customerId`) REFERENCES `Customer`(`id`) ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `Contract` ADD CONSTRAINT `Contract_contractCategoryId_fkey` FOREIGN KEY (`contractCategoryId`) REFERENCES `ContractCategory`(`id`) ON DELETE SET NULL ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `Contract` ADD CONSTRAINT `Contract_addressId_fkey` FOREIGN KEY (`addressId`) REFERENCES `Address`(`id`) ON DELETE SET NULL ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `Contract` ADD CONSTRAINT `Contract_billingAddressId_fkey` FOREIGN KEY (`billingAddressId`) REFERENCES `Address`(`id`) ON DELETE SET NULL ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `Contract` ADD CONSTRAINT `Contract_bankCardId_fkey` FOREIGN KEY (`bankCardId`) REFERENCES `BankCard`(`id`) ON DELETE SET NULL ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `Contract` ADD CONSTRAINT `Contract_identityDocumentId_fkey` FOREIGN KEY (`identityDocumentId`) REFERENCES `IdentityDocument`(`id`) ON DELETE SET NULL ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `Contract` ADD CONSTRAINT `Contract_salesPlatformId_fkey` FOREIGN KEY (`salesPlatformId`) REFERENCES `SalesPlatform`(`id`) ON DELETE SET NULL ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `Contract` ADD CONSTRAINT `Contract_cancellationPeriodId_fkey` FOREIGN KEY (`cancellationPeriodId`) REFERENCES `CancellationPeriod`(`id`) ON DELETE SET NULL ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `Contract` ADD CONSTRAINT `Contract_contractDurationId_fkey` FOREIGN KEY (`contractDurationId`) REFERENCES `ContractDuration`(`id`) ON DELETE SET NULL ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `Contract` ADD CONSTRAINT `Contract_previousContractId_fkey` FOREIGN KEY (`previousContractId`) REFERENCES `Contract`(`id`) ON DELETE SET NULL ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `Contract` ADD CONSTRAINT `Contract_previousProviderId_fkey` FOREIGN KEY (`previousProviderId`) REFERENCES `Provider`(`id`) ON DELETE SET NULL ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `Contract` ADD CONSTRAINT `Contract_providerId_fkey` FOREIGN KEY (`providerId`) REFERENCES `Provider`(`id`) ON DELETE SET NULL ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `Contract` ADD CONSTRAINT `Contract_tariffId_fkey` FOREIGN KEY (`tariffId`) REFERENCES `Tariff`(`id`) ON DELETE SET NULL ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `Contract` ADD CONSTRAINT `Contract_stressfreiEmailId_fkey` FOREIGN KEY (`stressfreiEmailId`) REFERENCES `StressfreiEmail`(`id`) ON DELETE SET NULL ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `ContractDocument` ADD CONSTRAINT `ContractDocument_contractId_fkey` FOREIGN KEY (`contractId`) REFERENCES `Contract`(`id`) ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `ContractHistoryEntry` ADD CONSTRAINT `ContractHistoryEntry_contractId_fkey` FOREIGN KEY (`contractId`) REFERENCES `Contract`(`id`) ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `ContractTask` ADD CONSTRAINT `ContractTask_contractId_fkey` FOREIGN KEY (`contractId`) REFERENCES `Contract`(`id`) ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `ContractTaskSubtask` ADD CONSTRAINT `ContractTaskSubtask_taskId_fkey` FOREIGN KEY (`taskId`) REFERENCES `ContractTask`(`id`) ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `EnergyContractDetails` ADD CONSTRAINT `EnergyContractDetails_contractId_fkey` FOREIGN KEY (`contractId`) REFERENCES `Contract`(`id`) ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `EnergyContractDetails` ADD CONSTRAINT `EnergyContractDetails_meterId_fkey` FOREIGN KEY (`meterId`) REFERENCES `Meter`(`id`) ON DELETE SET NULL ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `ContractMeter` ADD CONSTRAINT `ContractMeter_energyContractDetailsId_fkey` FOREIGN KEY (`energyContractDetailsId`) REFERENCES `EnergyContractDetails`(`id`) ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `ContractMeter` ADD CONSTRAINT `ContractMeter_meterId_fkey` FOREIGN KEY (`meterId`) REFERENCES `Meter`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `Invoice` ADD CONSTRAINT `Invoice_energyContractDetailsId_fkey` FOREIGN KEY (`energyContractDetailsId`) REFERENCES `EnergyContractDetails`(`id`) ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `Invoice` ADD CONSTRAINT `Invoice_contractId_fkey` FOREIGN KEY (`contractId`) REFERENCES `Contract`(`id`) ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `InternetContractDetails` ADD CONSTRAINT `InternetContractDetails_contractId_fkey` FOREIGN KEY (`contractId`) REFERENCES `Contract`(`id`) ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `PhoneNumber` ADD CONSTRAINT `PhoneNumber_internetContractDetailsId_fkey` FOREIGN KEY (`internetContractDetailsId`) REFERENCES `InternetContractDetails`(`id`) ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `MobileContractDetails` ADD CONSTRAINT `MobileContractDetails_contractId_fkey` FOREIGN KEY (`contractId`) REFERENCES `Contract`(`id`) ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `SimCard` ADD CONSTRAINT `SimCard_mobileDetailsId_fkey` FOREIGN KEY (`mobileDetailsId`) REFERENCES `MobileContractDetails`(`id`) ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `TvContractDetails` ADD CONSTRAINT `TvContractDetails_contractId_fkey` FOREIGN KEY (`contractId`) REFERENCES `Contract`(`id`) ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `CarInsuranceDetails` ADD CONSTRAINT `CarInsuranceDetails_contractId_fkey` FOREIGN KEY (`contractId`) REFERENCES `Contract`(`id`) ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE `CustomerConsent` ADD CONSTRAINT `CustomerConsent_customerId_fkey` FOREIGN KEY (`customerId`) REFERENCES `Customer`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;