prisma migrate preview

This commit is contained in:
Kalle (Sendou)
2020-12-14 14:14:34 +02:00
parent f7cc9ee7d0
commit 5f70d59ab8
7 changed files with 169 additions and 1577 deletions

28
package-lock.json generated
View File

@@ -1666,33 +1666,33 @@
"dev": true
},
"@prisma/cli": {
"version": "2.12.1",
"resolved": "https://registry.npmjs.org/@prisma/cli/-/cli-2.12.1.tgz",
"integrity": "sha512-obkwK95dEeifCdVehG0rS0BlPQGLsOtc9U1MgbrjNX3MnhXQdwROnvymfPB3DBlNyoLoHGklPgi9UlwBokNXcQ==",
"version": "2.13.0",
"resolved": "https://registry.npmjs.org/@prisma/cli/-/cli-2.13.0.tgz",
"integrity": "sha512-1hTj9H6gVIH5J5GPQVfeHiYFxUv09HVoThGr0Z2ds4JkVMRw///ZXll7pQJvaF7DUheg7dCNf+AXvwmpfm75tg==",
"dev": true,
"requires": {
"@prisma/bar": "^0.0.1",
"@prisma/engines": "2.12.0-18.cf0680a1bfe8d5e743dc659cc7f08009f9587d58"
"@prisma/engines": "2.13.0-32.833ab05d2a20e822f6736a39a27de4fc8f6b3e49"
}
},
"@prisma/client": {
"version": "2.12.1",
"resolved": "https://registry.npmjs.org/@prisma/client/-/client-2.12.1.tgz",
"integrity": "sha512-HP4/E9sRdxw/FB7XP4EeRa5ri8Lp1U/L7G4VAA95aM8C+8ARioQHMNDpEjC83NrOrOr4EcaZV5pXDDQL1H+F0g==",
"version": "2.13.0",
"resolved": "https://registry.npmjs.org/@prisma/client/-/client-2.13.0.tgz",
"integrity": "sha512-osu9oRFWYNU3s+khj7D0xn28yGbk9nUWPG6VYDGIisBf0OTDB3STisCa0O0k5rzk1GpdxLiGJaHpqIo40RkMLw==",
"requires": {
"@prisma/engines-version": "2.12.0-18.cf0680a1bfe8d5e743dc659cc7f08009f9587d58"
"@prisma/engines-version": "2.13.0-32.833ab05d2a20e822f6736a39a27de4fc8f6b3e49"
}
},
"@prisma/engines": {
"version": "2.12.0-18.cf0680a1bfe8d5e743dc659cc7f08009f9587d58",
"resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-2.12.0-18.cf0680a1bfe8d5e743dc659cc7f08009f9587d58.tgz",
"integrity": "sha512-F6RmUZ5JpPWxmGvVDji8c4gepHIGkvYbtuFi0IoDDJVaCVo8yS656stciKFyswI6/BLWXa0X47/MIMbz6nzw7g==",
"version": "2.13.0-32.833ab05d2a20e822f6736a39a27de4fc8f6b3e49",
"resolved": "https://registry.npmjs.org/@prisma/engines/-/engines-2.13.0-32.833ab05d2a20e822f6736a39a27de4fc8f6b3e49.tgz",
"integrity": "sha512-BntRdj/uJQMPRXzcYJv80+NtMq+m6f+PIcCTzOUqKerEo53+ynm4bHo2ocLRLS4XtWovGummDlVgZxgWTRhkAw==",
"dev": true
},
"@prisma/engines-version": {
"version": "2.12.0-18.cf0680a1bfe8d5e743dc659cc7f08009f9587d58",
"resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-2.12.0-18.cf0680a1bfe8d5e743dc659cc7f08009f9587d58.tgz",
"integrity": "sha512-IHb/Jag1Wmoq5tLZhOHP5zqLHEXqQEfrHb6l0drIBSvh2AF7yWQ3yyuD0ZEb1Nq37SvbBgop5wrWMOU8YWFTGQ=="
"version": "2.13.0-32.833ab05d2a20e822f6736a39a27de4fc8f6b3e49",
"resolved": "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-2.13.0-32.833ab05d2a20e822f6736a39a27de4fc8f6b3e49.tgz",
"integrity": "sha512-OsToEhPo8OKOW2RmfjrQs1WRWX6omTsrBVMQLYKR7p3ijNBXFjCw9fk4x5xcnLZvADYR/rUIxjEK2YR+r/RK3w=="
},
"@reach/alert": {
"version": "0.11.0",

View File

@@ -6,6 +6,7 @@
"dev": "next dev",
"build": "lingui compile && next build",
"start": "next start",
"migrate": "prisma migrate dev --preview-feature",
"migrate:save": "npx prisma migrate save --name init --experimental",
"migrate:up": "npx prisma migrate up --experimental",
"studio": "npx prisma studio",
@@ -30,7 +31,7 @@
"@emotion/styled": "^11.0.0",
"@hookform/resolvers": "^1.1.2",
"@lingui/react": "^3.3.0",
"@prisma/client": "^2.12.1",
"@prisma/client": "^2.13.0",
"@sendou/react-sketch": "^0.5.2",
"countries-list": "^2.5.6",
"framer-motion": "^2.9.5",
@@ -57,7 +58,7 @@
"@babel/core": "^7.12.10",
"@lingui/cli": "^3.3.0",
"@lingui/macro": "^3.3.0",
"@prisma/cli": "^2.12.1",
"@prisma/cli": "^2.13.0",
"@types/next-auth": "^3.1.18",
"@types/node": "^14.14.13",
"@types/nprogress": "^0.2.0",

View File

@@ -1,293 +0,0 @@
# Migration `20201205144602-init`
This migration has been generated by Kalle (Sendou) at 12/5/2020, 4:46:02 PM.
You can check out the [state of the schema](./schema.prisma) after the migration.
## Database Steps
```sql
CREATE TABLE "User" (
"id" SERIAL,
"username" TEXT NOT NULL,
"discriminator" TEXT NOT NULL,
"discordId" TEXT NOT NULL,
"discordAvatar" TEXT,
PRIMARY KEY ("id")
)
CREATE TABLE "Profile" (
"twitterName" TEXT,
"twitchName" TEXT,
"youtubeId" TEXT,
"country" TEXT,
"sensMotion" DECIMAL(65,30),
"sensStick" DECIMAL(65,30),
"bio" TEXT,
"weaponPool" TEXT[],
"customUrlPath" TEXT,
"userId" INTEGER NOT NULL
)
CREATE TABLE "XRankPlacement" (
"id" SERIAL,
"switchAccountId" TEXT NOT NULL,
"playerName" TEXT NOT NULL,
"ranking" INTEGER NOT NULL,
"xPower" DECIMAL(65,30) NOT NULL,
"weapon" TEXT NOT NULL,
"mode" "RankedMode" NOT NULL,
"month" INTEGER NOT NULL,
"year" INTEGER NOT NULL,
PRIMARY KEY ("id")
)
CREATE TABLE "LeagueSquad" (
"id" SERIAL,
"region" "Region" NOT NULL,
"type" "LeagueType" NOT NULL,
"leaguePower" DECIMAL(65,30) NOT NULL,
"startTime" TIMESTAMP(3) NOT NULL,
PRIMARY KEY ("id")
)
CREATE TABLE "LeagueSquadMember" (
"squadId" INTEGER NOT NULL,
"switchAccountId" TEXT NOT NULL,
"weapon" TEXT NOT NULL
)
CREATE TABLE "Player" (
"switchAccountId" TEXT NOT NULL,
"userId" INTEGER,
"name" TEXT
)
CREATE TABLE "Build" (
"id" SERIAL,
"userId" INTEGER NOT NULL,
"weapon" TEXT NOT NULL,
"title" TEXT,
"description" TEXT,
"modes" "Mode"[],
"headGear" TEXT,
"headAbilities" "Ability"[],
"clothingGear" TEXT,
"clothingAbilities" "Ability"[],
"shoesGear" TEXT,
"shoesAbilities" "Ability"[],
"abilityPoints" JSONB NOT NULL,
"top500" BOOLEAN NOT NULL,
"jpn" BOOLEAN NOT NULL,
"updatedAt" TIMESTAMP(3) NOT NULL,
PRIMARY KEY ("id")
)
CREATE UNIQUE INDEX "User.discordId_unique" ON "User"("discordId")
CREATE UNIQUE INDEX "Profile.customUrlPath_unique" ON "Profile"("customUrlPath")
CREATE UNIQUE INDEX "Profile.userId_unique" ON "Profile"("userId")
CREATE UNIQUE INDEX "XRankPlacement.switchAccountId_mode_month_year_unique" ON "XRankPlacement"("switchAccountId", "mode", "month", "year")
CREATE INDEX "LeagueSquad.leaguePower_type_region_index" ON "LeagueSquad"("leaguePower", "type", "region")
CREATE UNIQUE INDEX "LeagueSquadMember.squadId_switchAccountId_unique" ON "LeagueSquadMember"("squadId", "switchAccountId")
CREATE UNIQUE INDEX "Player.switchAccountId_unique" ON "Player"("switchAccountId")
CREATE UNIQUE INDEX "Player.userId_unique" ON "Player"("userId")
CREATE INDEX "Build.weapon_index" ON "Build"("weapon")
CREATE INDEX "Build.userId_index" ON "Build"("userId")
CREATE INDEX "Build.abilityPoints_index" ON "Build"("abilityPoints")
ALTER TABLE "Profile" ADD FOREIGN KEY("userId")REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE
ALTER TABLE "XRankPlacement" ADD FOREIGN KEY("switchAccountId")REFERENCES "Player"("switchAccountId") ON DELETE CASCADE ON UPDATE CASCADE
ALTER TABLE "LeagueSquadMember" ADD FOREIGN KEY("squadId")REFERENCES "LeagueSquad"("id") ON DELETE CASCADE ON UPDATE CASCADE
ALTER TABLE "LeagueSquadMember" ADD FOREIGN KEY("switchAccountId")REFERENCES "Player"("switchAccountId") ON DELETE CASCADE ON UPDATE CASCADE
ALTER TABLE "Player" ADD FOREIGN KEY("userId")REFERENCES "User"("id") ON DELETE SET NULL ON UPDATE CASCADE
ALTER TABLE "Build" ADD FOREIGN KEY("userId")REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE
```
## Changes
```diff
diff --git schema.prisma schema.prisma
migration ..20201205144602-init
--- datamodel.dml
+++ datamodel.dml
@@ -1,0 +1,159 @@
+datasource db {
+ provider = "postgresql"
+ // TODO: should use same .env system as Next.JS
+ url = "***"
+}
+
+generator client {
+ provider = "prisma-client-js"
+}
+
+model User {
+ id Int @id @default(autoincrement())
+ username String
+ discriminator String
+ discordId String @unique
+ discordAvatar String?
+ profile Profile?
+ player Player?
+ builds Build[]
+}
+
+model Profile {
+ twitterName String?
+ twitchName String?
+ youtubeId String?
+ country String?
+ sensMotion Float?
+ sensStick Float?
+ bio String?
+ weaponPool String[]
+ customUrlPath String? @unique
+ user User @relation(fields: [userId], references: [id])
+ userId Int @unique
+
+}
+
+enum RankedMode {
+ SZ
+ TC
+ RM
+ CB
+}
+
+enum Mode {
+ TW
+ SZ
+ TC
+ RM
+ CB
+}
+
+model XRankPlacement {
+ id Int @id @default(autoincrement())
+ switchAccountId String
+ player Player @relation(fields: [switchAccountId], references: [switchAccountId])
+ playerName String
+ ranking Int
+ xPower Float
+ weapon String
+ mode RankedMode
+ month Int
+ year Int
+
+ @@unique([switchAccountId, mode, month, year])
+}
+
+enum Region {
+ EU
+ NA
+ JP
+}
+
+enum LeagueType {
+ TWIN
+ QUAD
+}
+
+model LeagueSquad {
+ id Int @id @default(autoincrement())
+ region Region
+ type LeagueType
+ leaguePower Float
+ startTime DateTime
+ members LeagueSquadMember[]
+
+ @@index([leaguePower, type, region])
+}
+
+model LeagueSquadMember {
+ squadId Int
+ squad LeagueSquad @relation(fields: [squadId], references: [id])
+ switchAccountId String
+ player Player @relation(fields: [switchAccountId], references: [switchAccountId])
+ weapon String
+
+ @@unique([squadId, switchAccountId])
+}
+
+model Player {
+ switchAccountId String @unique
+ userId Int? @unique
+ name String?
+ placements XRankPlacement[]
+ user User? @relation(fields: [userId], references: [id])
+ leaguePlacements LeagueSquadMember[]
+}
+
+enum Ability {
+ CB
+ LDE
+ OG
+ T
+ H
+ NS
+ TI
+ RP
+ AD
+ DR
+ SJ
+ OS
+ BDU
+ REC
+ RES
+ ISM
+ ISS
+ MPU
+ QR
+ QSJ
+ RSU
+ SSU
+ SCU
+ SPU
+ SS
+ BRU
+}
+
+model Build {
+ id Int @id @default(autoincrement())
+ userId Int
+ weapon String
+ title String?
+ description String?
+ modes Mode[]
+ headGear String?
+ headAbilities Ability[]
+ clothingGear String?
+ clothingAbilities Ability[]
+ shoesGear String?
+ shoesAbilities Ability[]
+ abilityPoints Json
+ top500 Boolean
+ jpn Boolean
+ updatedAt DateTime @updatedAt
+ user User @relation(fields: [userId], references: [id])
+
+ @@index(weapon)
+ @@index(userId)
+ @@index(abilityPoints)
+}
```

View File

@@ -1,159 +0,0 @@
datasource db {
provider = "postgresql"
// TODO: should use same .env system as Next.JS
url = "***"
}
generator client {
provider = "prisma-client-js"
}
model User {
id Int @id @default(autoincrement())
username String
discriminator String
discordId String @unique
discordAvatar String?
profile Profile?
player Player?
builds Build[]
}
model Profile {
twitterName String?
twitchName String?
youtubeId String?
country String?
sensMotion Float?
sensStick Float?
bio String?
weaponPool String[]
customUrlPath String? @unique
user User @relation(fields: [userId], references: [id])
userId Int @unique
}
enum RankedMode {
SZ
TC
RM
CB
}
enum Mode {
TW
SZ
TC
RM
CB
}
model XRankPlacement {
id Int @id @default(autoincrement())
switchAccountId String
player Player @relation(fields: [switchAccountId], references: [switchAccountId])
playerName String
ranking Int
xPower Float
weapon String
mode RankedMode
month Int
year Int
@@unique([switchAccountId, mode, month, year])
}
enum Region {
EU
NA
JP
}
enum LeagueType {
TWIN
QUAD
}
model LeagueSquad {
id Int @id @default(autoincrement())
region Region
type LeagueType
leaguePower Float
startTime DateTime
members LeagueSquadMember[]
@@index([leaguePower, type, region])
}
model LeagueSquadMember {
squadId Int
squad LeagueSquad @relation(fields: [squadId], references: [id])
switchAccountId String
player Player @relation(fields: [switchAccountId], references: [switchAccountId])
weapon String
@@unique([squadId, switchAccountId])
}
model Player {
switchAccountId String @unique
userId Int? @unique
name String?
placements XRankPlacement[]
user User? @relation(fields: [userId], references: [id])
leaguePlacements LeagueSquadMember[]
}
enum Ability {
CB
LDE
OG
T
H
NS
TI
RP
AD
DR
SJ
OS
BDU
REC
RES
ISM
ISS
MPU
QR
QSJ
RSU
SSU
SCU
SPU
SS
BRU
}
model Build {
id Int @id @default(autoincrement())
userId Int
weapon String
title String?
description String?
modes Mode[]
headGear String?
headAbilities Ability[]
clothingGear String?
clothingAbilities Ability[]
shoesGear String?
shoesAbilities Ability[]
abilityPoints Json
top500 Boolean
jpn Boolean
updatedAt DateTime @updatedAt
user User @relation(fields: [userId], references: [id])
@@index(weapon)
@@index(userId)
@@index(abilityPoints)
}

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,152 @@
-- CreateEnum
CREATE TYPE "public"."RankedMode" AS ENUM ('SZ', 'TC', 'RM', 'CB');
-- CreateEnum
CREATE TYPE "public"."Mode" AS ENUM ('TW', 'SZ', 'TC', 'RM', 'CB');
-- CreateEnum
CREATE TYPE "public"."Region" AS ENUM ('EU', 'NA', 'JP');
-- CreateEnum
CREATE TYPE "public"."LeagueType" AS ENUM ('TWIN', 'QUAD');
-- CreateEnum
CREATE TYPE "public"."Ability" AS ENUM ('CB', 'LDE', 'OG', 'T', 'H', 'NS', 'TI', 'RP', 'AD', 'DR', 'SJ', 'OS', 'BDU', 'REC', 'RES', 'ISM', 'ISS', 'MPU', 'QR', 'QSJ', 'RSU', 'SSU', 'SCU', 'SPU', 'SS', 'BRU');
-- CreateTable
CREATE TABLE "User" (
"id" SERIAL,
"username" TEXT NOT NULL,
"discriminator" TEXT NOT NULL,
"discordId" TEXT NOT NULL,
"discordAvatar" TEXT,
PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "Profile" (
"twitterName" TEXT,
"twitchName" TEXT,
"youtubeId" TEXT,
"country" TEXT,
"sensMotion" DECIMAL(65,30),
"sensStick" DECIMAL(65,30),
"bio" TEXT,
"weaponPool" TEXT[],
"customUrlPath" TEXT,
"userId" INTEGER NOT NULL
);
-- CreateTable
CREATE TABLE "XRankPlacement" (
"id" SERIAL,
"switchAccountId" TEXT NOT NULL,
"playerName" TEXT NOT NULL,
"ranking" INTEGER NOT NULL,
"xPower" DECIMAL(65,30) NOT NULL,
"weapon" TEXT NOT NULL,
"mode" "RankedMode" NOT NULL,
"month" INTEGER NOT NULL,
"year" INTEGER NOT NULL,
PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "LeagueSquad" (
"id" SERIAL,
"region" "Region" NOT NULL,
"type" "LeagueType" NOT NULL,
"leaguePower" DECIMAL(65,30) NOT NULL,
"startTime" TIMESTAMP(3) NOT NULL,
PRIMARY KEY ("id")
);
-- CreateTable
CREATE TABLE "LeagueSquadMember" (
"squadId" INTEGER NOT NULL,
"switchAccountId" TEXT NOT NULL,
"weapon" TEXT NOT NULL
);
-- CreateTable
CREATE TABLE "Player" (
"switchAccountId" TEXT NOT NULL,
"userId" INTEGER,
"name" TEXT
);
-- CreateTable
CREATE TABLE "Build" (
"id" SERIAL,
"userId" INTEGER NOT NULL,
"weapon" TEXT NOT NULL,
"title" TEXT,
"description" TEXT,
"modes" "Mode"[],
"headGear" TEXT,
"headAbilities" "Ability"[],
"clothingGear" TEXT,
"clothingAbilities" "Ability"[],
"shoesGear" TEXT,
"shoesAbilities" "Ability"[],
"abilityPoints" JSONB NOT NULL,
"top500" BOOLEAN NOT NULL,
"jpn" BOOLEAN NOT NULL,
"updatedAt" TIMESTAMP(3) NOT NULL,
PRIMARY KEY ("id")
);
-- CreateIndex
CREATE UNIQUE INDEX "User.discordId_unique" ON "User"("discordId");
-- CreateIndex
CREATE UNIQUE INDEX "Profile.customUrlPath_unique" ON "Profile"("customUrlPath");
-- CreateIndex
CREATE UNIQUE INDEX "Profile.userId_unique" ON "Profile"("userId");
-- CreateIndex
CREATE UNIQUE INDEX "XRankPlacement.switchAccountId_mode_month_year_unique" ON "XRankPlacement"("switchAccountId", "mode", "month", "year");
-- CreateIndex
CREATE INDEX "LeagueSquad.leaguePower_type_region_index" ON "LeagueSquad"("leaguePower", "type", "region");
-- CreateIndex
CREATE UNIQUE INDEX "LeagueSquadMember.squadId_switchAccountId_unique" ON "LeagueSquadMember"("squadId", "switchAccountId");
-- CreateIndex
CREATE UNIQUE INDEX "Player.switchAccountId_unique" ON "Player"("switchAccountId");
-- CreateIndex
CREATE UNIQUE INDEX "Player.userId_unique" ON "Player"("userId");
-- CreateIndex
CREATE INDEX "Build.weapon_index" ON "Build"("weapon");
-- CreateIndex
CREATE INDEX "Build.userId_index" ON "Build"("userId");
-- CreateIndex
CREATE INDEX "Build.abilityPoints_index" ON "Build"("abilityPoints");
-- AddForeignKey
ALTER TABLE "Profile" ADD FOREIGN KEY("userId")REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "XRankPlacement" ADD FOREIGN KEY("switchAccountId")REFERENCES "Player"("switchAccountId") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "LeagueSquadMember" ADD FOREIGN KEY("squadId")REFERENCES "LeagueSquad"("id") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "LeagueSquadMember" ADD FOREIGN KEY("switchAccountId")REFERENCES "Player"("switchAccountId") ON DELETE CASCADE ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "Player" ADD FOREIGN KEY("userId")REFERENCES "User"("id") ON DELETE SET NULL ON UPDATE CASCADE;
-- AddForeignKey
ALTER TABLE "Build" ADD FOREIGN KEY("userId")REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;

View File

@@ -1,3 +0,0 @@
# Prisma Migrate lockfile v1
20201205144602-init