98 lines
3.5 KiB
SQL
98 lines
3.5 KiB
SQL
-- CreateTable
|
|
CREATE TABLE `User` (
|
|
`id` CHAR(36) NOT NULL,
|
|
`username` VARCHAR(64) NOT NULL,
|
|
`passwordHash` VARCHAR(255) NOT NULL,
|
|
`baseCurrency` CHAR(3) NOT NULL DEFAULT 'CNY',
|
|
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
`updatedAt` DATETIME(3) NOT NULL,
|
|
|
|
UNIQUE INDEX `User_username_key`(`username`),
|
|
PRIMARY KEY (`id`)
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|
|
-- CreateTable
|
|
CREATE TABLE `Session` (
|
|
`id` CHAR(64) NOT NULL,
|
|
`userId` CHAR(36) NOT NULL,
|
|
`expiresAt` DATETIME(3) NOT NULL,
|
|
|
|
INDEX `Session_userId_idx`(`userId`),
|
|
PRIMARY KEY (`id`)
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|
|
-- CreateTable
|
|
CREATE TABLE `Position` (
|
|
`id` CHAR(36) NOT NULL,
|
|
`userId` CHAR(36) NOT NULL,
|
|
`kind` VARCHAR(16) NOT NULL,
|
|
`side` VARCHAR(16) NOT NULL,
|
|
`name` VARCHAR(100) NOT NULL,
|
|
`category` VARCHAR(40) NOT NULL,
|
|
`currency` CHAR(3) NOT NULL,
|
|
`notes` TEXT NOT NULL,
|
|
`archived` BOOLEAN NOT NULL DEFAULT false,
|
|
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
`updatedAt` DATETIME(3) NOT NULL,
|
|
|
|
INDEX `Position_userId_kind_idx`(`userId`, `kind`),
|
|
PRIMARY KEY (`id`)
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|
|
-- CreateTable
|
|
CREATE TABLE `Revision` (
|
|
`id` CHAR(36) NOT NULL,
|
|
`positionId` CHAR(36) NOT NULL,
|
|
`amount` DECIMAL(24, 8) NOT NULL,
|
|
`effectiveDate` DATE NOT NULL,
|
|
`notes` TEXT NOT NULL,
|
|
`reason` VARCHAR(20) NOT NULL,
|
|
`createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
|
|
`updatedAt` DATETIME(3) NOT NULL,
|
|
|
|
UNIQUE INDEX `Revision_positionId_effectiveDate_key`(`positionId`, `effectiveDate`),
|
|
PRIMARY KEY (`id`)
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|
|
-- CreateTable
|
|
CREATE TABLE `PositionLink` (
|
|
`id` CHAR(36) NOT NULL,
|
|
`sourceId` CHAR(36) NOT NULL,
|
|
`targetId` CHAR(36) NOT NULL,
|
|
|
|
UNIQUE INDEX `PositionLink_sourceId_targetId_key`(`sourceId`, `targetId`),
|
|
PRIMARY KEY (`id`)
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|
|
-- CreateTable
|
|
CREATE TABLE `ExchangeRate` (
|
|
`id` CHAR(36) NOT NULL,
|
|
`userId` CHAR(36) NOT NULL,
|
|
`currency` CHAR(3) NOT NULL,
|
|
`baseCurrency` CHAR(3) NOT NULL,
|
|
`date` DATE NOT NULL,
|
|
`rate` DECIMAL(24, 12) NOT NULL,
|
|
`source` VARCHAR(30) NOT NULL,
|
|
|
|
UNIQUE INDEX `ExchangeRate_userId_currency_baseCurrency_date_key`(`userId`, `currency`, `baseCurrency`, `date`),
|
|
PRIMARY KEY (`id`)
|
|
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE `Session` ADD CONSTRAINT `Session_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE `Position` ADD CONSTRAINT `Position_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE `Revision` ADD CONSTRAINT `Revision_positionId_fkey` FOREIGN KEY (`positionId`) REFERENCES `Position`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE `PositionLink` ADD CONSTRAINT `PositionLink_sourceId_fkey` FOREIGN KEY (`sourceId`) REFERENCES `Position`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE `PositionLink` ADD CONSTRAINT `PositionLink_targetId_fkey` FOREIGN KEY (`targetId`) REFERENCES `Position`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE `ExchangeRate` ADD CONSTRAINT `ExchangeRate_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User`(`id`) ON DELETE CASCADE ON UPDATE CASCADE;
|