-- AlterTable
ALTER TABLE `Setting` ADD COLUMN `staleRateHours` INTEGER NOT NULL DEFAULT 24;

-- AlterTable
ALTER TABLE `Trade` ADD COLUMN `documentNumber` VARCHAR(32) NULL,
    ADD COLUMN `resultSnapshot` JSON NULL;

-- AlterTable
ALTER TABLE `Payment` ADD COLUMN `allocationVersion` INTEGER NOT NULL DEFAULT 0,
    ADD COLUMN `documentNumber` VARCHAR(32) NULL,
    ADD COLUMN `resultSnapshot` JSON NULL;

-- CreateTable
CREATE TABLE `DocumentCounter` (
    `key` VARCHAR(12) NOT NULL,
    `value` INTEGER NOT NULL DEFAULT 0,

    PRIMARY KEY (`key`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- CreateTable
CREATE TABLE `TradePreview` (
    `id` VARCHAR(36) NOT NULL,
    `userId` INTEGER NOT NULL,
    `inputHash` VARCHAR(64) NOT NULL,
    `pricingHash` VARCHAR(64) NOT NULL,
    `expiresAt` DATETIME(3) NOT NULL,
    `consumedAt` DATETIME(3) NULL,
    `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),

    INDEX `TradePreview_userId_expiresAt_idx`(`userId`, `expiresAt`),
    PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- CreateTable
CREATE TABLE `PaymentAllocation` (
    `id` VARCHAR(36) NOT NULL,
    `paymentId` VARCHAR(36) NOT NULL,
    `tradeId` VARCHAR(36) NOT NULL,
    `amount` DECIMAL(28, 8) NOT NULL,
    `createdBy` INTEGER NOT NULL,
    `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),

    INDEX `PaymentAllocation_tradeId_idx`(`tradeId`),
    UNIQUE INDEX `PaymentAllocation_paymentId_tradeId_key`(`paymentId`, `tradeId`),
    PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- CreateTable
CREATE TABLE `ReportPreset` (
    `id` VARCHAR(36) NOT NULL,
    `userId` INTEGER NOT NULL,
    `name` VARCHAR(80) NOT NULL,
    `report` VARCHAR(32) NOT NULL,
    `config` JSON NOT NULL,
    `version` INTEGER NOT NULL DEFAULT 1,
    `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
    `updatedAt` DATETIME(3) NOT NULL,

    UNIQUE INDEX `ReportPreset_userId_name_key`(`userId`, `name`),
    PRIMARY KEY (`id`)
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- CreateIndex
CREATE UNIQUE INDEX `Trade_documentNumber_key` ON `Trade`(`documentNumber`);

-- CreateIndex
CREATE UNIQUE INDEX `Payment_documentNumber_key` ON `Payment`(`documentNumber`);

-- AddForeignKey
ALTER TABLE `TradePreview` ADD CONSTRAINT `TradePreview_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE `PaymentAllocation` ADD CONSTRAINT `PaymentAllocation_paymentId_fkey` FOREIGN KEY (`paymentId`) REFERENCES `Payment`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE `PaymentAllocation` ADD CONSTRAINT `PaymentAllocation_tradeId_fkey` FOREIGN KEY (`tradeId`) REFERENCES `Trade`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;

-- AddForeignKey
ALTER TABLE `ReportPreset` ADD CONSTRAINT `ReportPreset_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE RESTRICT ON UPDATE CASCADE;
