/* Warnings: - A unique constraint covering the columns `[portalEmail]` on the table `Customer` will be added. If there are existing duplicate values, this will fail. */ -- AlterTable ALTER TABLE `Contract` ADD COLUMN `stressfreiEmailId` INTEGER NULL, MODIFY `status` ENUM('DRAFT', 'PENDING', 'ACTIVE', 'CANCELLED', 'EXPIRED', 'DEACTIVATED') NOT NULL DEFAULT 'DRAFT'; -- AlterTable ALTER TABLE `Customer` ADD COLUMN `portalEmail` VARCHAR(191) NULL, ADD COLUMN `portalEnabled` BOOLEAN NOT NULL DEFAULT false, ADD COLUMN `portalLastLogin` DATETIME(3) NULL, ADD COLUMN `portalPasswordEncrypted` VARCHAR(191) NULL, ADD COLUMN `portalPasswordHash` VARCHAR(191) NULL; -- 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 `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 `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, `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 `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; -- CreateIndex CREATE UNIQUE INDEX `Customer_portalEmail_key` ON `Customer`(`portalEmail`); -- 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 `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 `Contract` ADD CONSTRAINT `Contract_stressfreiEmailId_fkey` FOREIGN KEY (`stressfreiEmailId`) REFERENCES `StressfreiEmail`(`id`) ON DELETE SET NULL 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;