feat: initial commit
This commit is contained in:
@@ -0,0 +1,128 @@
|
||||
-- CreateEnum
|
||||
CREATE TYPE "MarketType" AS ENUM ('US', 'CN', 'HK', 'CRYPTO');
|
||||
|
||||
-- CreateEnum
|
||||
CREATE TYPE "TransactionType" AS ENUM ('DEPOSIT', 'WITHDRAW', 'BUY', 'SELL', 'DIVIDEND', 'INTEREST', 'FEE');
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "User" (
|
||||
"id" TEXT NOT NULL,
|
||||
"email" TEXT NOT NULL,
|
||||
"name" TEXT,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "User_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "Account" (
|
||||
"id" TEXT NOT NULL,
|
||||
"userId" TEXT NOT NULL,
|
||||
"name" TEXT NOT NULL,
|
||||
"marketType" "MarketType" NOT NULL,
|
||||
"baseCurrency" TEXT NOT NULL,
|
||||
"balance" DECIMAL(20,4) NOT NULL DEFAULT 0,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "Account_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "Security" (
|
||||
"id" TEXT NOT NULL,
|
||||
"symbol" TEXT NOT NULL,
|
||||
"name" TEXT NOT NULL,
|
||||
"market" "MarketType" NOT NULL,
|
||||
"currency" TEXT NOT NULL,
|
||||
"lotSize" INTEGER NOT NULL DEFAULT 1,
|
||||
"priceDecimals" INTEGER NOT NULL DEFAULT 2,
|
||||
"qtyDecimals" INTEGER NOT NULL DEFAULT 0,
|
||||
"isCrypto" BOOLEAN NOT NULL DEFAULT false,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "Security_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "Transaction" (
|
||||
"id" TEXT NOT NULL,
|
||||
"accountId" TEXT NOT NULL,
|
||||
"type" "TransactionType" NOT NULL,
|
||||
"symbol" TEXT,
|
||||
"quantity" DECIMAL(20,8),
|
||||
"price" DECIMAL(20,8),
|
||||
"amount" DECIMAL(20,4) NOT NULL,
|
||||
"fee" DECIMAL(20,4) NOT NULL DEFAULT 0,
|
||||
"networkFee" DECIMAL(20,8),
|
||||
"currency" TEXT NOT NULL,
|
||||
"exchangeRate" DECIMAL(20,8),
|
||||
"notes" TEXT,
|
||||
"executedAt" TIMESTAMP(3) NOT NULL,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
CONSTRAINT "Transaction_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "Position" (
|
||||
"id" TEXT NOT NULL,
|
||||
"accountId" TEXT NOT NULL,
|
||||
"symbol" TEXT NOT NULL,
|
||||
"quantity" DECIMAL(20,8) NOT NULL,
|
||||
"averageCost" DECIMAL(20,8) NOT NULL,
|
||||
"currency" TEXT NOT NULL,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "Position_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "ExchangeRate" (
|
||||
"id" TEXT NOT NULL,
|
||||
"fromCurrency" TEXT NOT NULL,
|
||||
"toCurrency" TEXT NOT NULL,
|
||||
"rate" DECIMAL(20,8) NOT NULL,
|
||||
"effectiveDate" TIMESTAMP(3) NOT NULL,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
CONSTRAINT "ExchangeRate_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "User_email_key" ON "User"("email");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "Account_userId_idx" ON "Account"("userId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "Security_symbol_key" ON "Security"("symbol");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "Transaction_accountId_executedAt_idx" ON "Transaction"("accountId", "executedAt");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "Transaction_symbol_idx" ON "Transaction"("symbol");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "Position_accountId_idx" ON "Position"("accountId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "Position_accountId_symbol_key" ON "Position"("accountId", "symbol");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "ExchangeRate_fromCurrency_toCurrency_idx" ON "ExchangeRate"("fromCurrency", "toCurrency");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "ExchangeRate_fromCurrency_toCurrency_effectiveDate_key" ON "ExchangeRate"("fromCurrency", "toCurrency", "effectiveDate");
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "Account" ADD CONSTRAINT "Account_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "Transaction" ADD CONSTRAINT "Transaction_accountId_fkey" FOREIGN KEY ("accountId") REFERENCES "Account"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "Position" ADD CONSTRAINT "Position_accountId_fkey" FOREIGN KEY ("accountId") REFERENCES "Account"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
Reference in New Issue
Block a user