feat: add account transfers and refine icons, settings and safety dialogs

This commit is contained in:
陈煜 committed 2026-10-02 10:42:19 +08:00
1 parent a4e9d56b8a
commit da98d02661
33 files changed
+1866 -347

No files matched your search

@@ -0,0 +1,14 @@
ALTER TABLE `User` ADD COLUMN `hiddenMenus` VARCHAR(128) NOT NULL DEFAULT '', DROP COLUMN `showSidebar`;
CREATE TABLE `Transfer` (
`id` CHAR(36) NOT NULL, `importedFromId` CHAR(36) NULL, `userId` CHAR(36) NOT NULL,
`sourceId` CHAR(36) NOT NULL, `targetId` CHAR(36) NOT NULL,
`sourceRevisionId` CHAR(36) NOT NULL, `targetRevisionId` CHAR(36) NOT NULL,
`sourceCurrency` CHAR(3) NOT NULL, `targetCurrency` CHAR(3) NOT NULL,
`amount` DECIMAL(24,8) NOT NULL, `received` DECIMAL(24,8) NOT NULL, `fee` DECIMAL(24,8) NOT NULL,
`effectiveDate` DATETIME(3) NOT NULL, `notes` TEXT NOT NULL, `createdAt` DATETIME(3) NOT NULL DEFAULT CURRENT_TIMESTAMP(3),
PRIMARY KEY (`id`), UNIQUE INDEX `Transfer_sourceRevisionId_key` (`sourceRevisionId`), UNIQUE INDEX `Transfer_targetRevisionId_key` (`targetRevisionId`),
UNIQUE INDEX `Transfer_userId_importedFromId_key` (`userId`,`importedFromId`), INDEX `Transfer_userId_effectiveDate_idx` (`userId`,`effectiveDate`),
CONSTRAINT `Transfer_userId_fkey` FOREIGN KEY (`userId`) REFERENCES `User` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `Transfer_sourceId_fkey` FOREIGN KEY (`sourceId`) REFERENCES `Position` (`id`) ON DELETE CASCADE ON UPDATE CASCADE,
CONSTRAINT `Transfer_targetId_fkey` FOREIGN KEY (`targetId`) REFERENCES `Position` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
@@ -0,0 +1 @@
ALTER TABLE `User` ADD COLUMN `showNotes` BOOLEAN NOT NULL DEFAULT true;
+28 -1
View File
@@ -10,7 +10,8 @@ model User {
username String @unique @db.VarChar(64)
passwordHash String @db.VarChar(255)
baseCurrency String @default("CNY") @db.Char(3)
showSidebar Boolean @default(true)
hiddenMenus String @default("") @db.VarChar(128)
showNotes Boolean @default(true)
idleMinutes Int @default(30)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
@@ -18,6 +19,7 @@ model User {
rates ExchangeRate[]
sessions Session[]
icons Icon[]
transfers Transfer[]
}
model Session {
id String @id @db.Char(64)
@@ -50,6 +52,8 @@ model Position {
revisions Revision[]
outgoing PositionLink[] @relation("Source")
incoming PositionLink[] @relation("Target")
transfersOut Transfer[] @relation("TransferSource")
transfersIn Transfer[] @relation("TransferTarget")
@@index([userId,kind])
@@unique([userId,importedFromId])
}
@@ -100,3 +104,26 @@ model Icon {
@@unique([ownerId,hash,shared])
@@index([shared,name])
}
model Transfer {
id String @id @default(uuid()) @db.Char(36)
importedFromId String? @db.Char(36)
userId String @db.Char(36)
user User @relation(fields:[userId],references:[id],onDelete:Cascade)
sourceId String @db.Char(36)
targetId String @db.Char(36)
source Position @relation("TransferSource",fields:[sourceId],references:[id],onDelete:Cascade)
target Position @relation("TransferTarget",fields:[targetId],references:[id],onDelete:Cascade)
sourceRevisionId String @unique @db.Char(36)
targetRevisionId String @unique @db.Char(36)
sourceCurrency String @db.Char(3)
targetCurrency String @db.Char(3)
amount Decimal @db.Decimal(24,8)
received Decimal @db.Decimal(24,8)
fee Decimal @db.Decimal(24,8)
effectiveDate DateTime @db.DateTime(3)
notes String @db.Text
createdAt DateTime @default(now())
@@unique([userId,importedFromId])
@@index([userId,effectiveDate])
}