commit 1a77cbf571766c4f6e1d66c629e5ce84f0d6b2e2
parent fca3cb76fc46ae3d4fd58c71d484ea55dd533f90
Author: Yuukin256 <Yuukin256@gmail.com>
Date: Sat, 29 Oct 2022 15:46:51 +0900
prisma 導入、DBスキーマ定義
Diffstat:
7 files changed, 203 insertions(+), 2 deletions(-)
diff --git a/.vscode/settings.json b/.vscode/settings.json
@@ -4,5 +4,10 @@
"editor.defaultFormatter": "esbenp.prettier-vscode",
"editor.formatOnPaste": true,
"editor.formatOnSave": true,
- "editor.codeActionsOnSave": { "source.fixAll.eslint": true }
+ "editor.codeActionsOnSave": {
+ "source.fixAll.eslint": true
+ },
+ "[prisma]": {
+ "editor.defaultFormatter": "Prisma.prisma"
+ }
}
diff --git a/package.json b/package.json
@@ -12,6 +12,9 @@
"type-check": "tsc --noEmit",
"format": "prettier --write ."
},
+ "prisma": {
+ "schema": "./src/prisma/schema.prisma"
+ },
"dependencies": {
"@date-io/date-fns": "^2.14.0",
"@emotion/react": "^11.9.3",
@@ -20,6 +23,7 @@
"@mui/icons-material": "^5.8.4",
"@mui/material": "^5.9.2",
"@mui/x-date-pickers": "^5.0.0-beta.3",
+ "@prisma/client": "^4.5.0",
"date-fns": "^2.29.1",
"immutable": "^4.0.0",
"next": "^12.2.3",
@@ -46,6 +50,7 @@
"husky": "^7.0.4",
"lint-staged": "^12.3.7",
"prettier": "^2.6.1",
+ "prisma": "^4.5.0",
"typescript": "^4.6.3"
},
"packageManager": "yarn@3.2.0"
diff --git a/src/prisma/migrations/20221029064157_init/migration.sql b/src/prisma/migrations/20221029064157_init/migration.sql
@@ -0,0 +1,75 @@
+-- CreateEnum
+CREATE TYPE "DayOfWeek" AS ENUM ('Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday');
+
+-- CreateTable
+CREATE TABLE "SchoolGrade" (
+ "grade" INTEGER NOT NULL,
+
+ CONSTRAINT "SchoolGrade_pkey" PRIMARY KEY ("grade")
+);
+
+-- CreateTable
+CREATE TABLE "SchoolClass" (
+ "id" INTEGER NOT NULL,
+ "class" INTEGER NOT NULL,
+ "grade" INTEGER NOT NULL,
+
+ CONSTRAINT "SchoolClass_pkey" PRIMARY KEY ("id")
+);
+
+-- CreateTable
+CREATE TABLE "ClassUnit" (
+ "id" SERIAL NOT NULL,
+ "schoolClassId" INTEGER NOT NULL,
+ "subject" TEXT[],
+ "dayOfWeekAndSchoolTimeId" INTEGER NOT NULL,
+
+ CONSTRAINT "ClassUnit_pkey" PRIMARY KEY ("id")
+);
+
+-- CreateTable
+CREATE TABLE "DayOfWeekAndSchoolTime" (
+ "id" INTEGER NOT NULL,
+ "dayOfWeek" "DayOfWeek" NOT NULL,
+ "schoolTime" INTEGER NOT NULL,
+
+ CONSTRAINT "DayOfWeekAndSchoolTime_pkey" PRIMARY KEY ("id")
+);
+
+-- CreateTable
+CREATE TABLE "DateAndSchoolTime" (
+ "id" SERIAL NOT NULL,
+ "schoolGradeNumber" INTEGER NOT NULL,
+ "date" DATE NOT NULL,
+ "schoolTime" INTEGER NOT NULL,
+ "dayOfWeekAndSchoolTimeId" INTEGER NOT NULL,
+
+ CONSTRAINT "DateAndSchoolTime_pkey" PRIMARY KEY ("id")
+);
+
+-- CreateIndex
+CREATE UNIQUE INDEX "SchoolClass_grade_class_key" ON "SchoolClass"("grade", "class");
+
+-- CreateIndex
+CREATE UNIQUE INDEX "ClassUnit_schoolClassId_dayOfWeekAndSchoolTimeId_key" ON "ClassUnit"("schoolClassId", "dayOfWeekAndSchoolTimeId");
+
+-- CreateIndex
+CREATE UNIQUE INDEX "DayOfWeekAndSchoolTime_dayOfWeek_schoolTime_key" ON "DayOfWeekAndSchoolTime"("dayOfWeek", "schoolTime");
+
+-- CreateIndex
+CREATE UNIQUE INDEX "DateAndSchoolTime_schoolGradeNumber_date_schoolTime_key" ON "DateAndSchoolTime"("schoolGradeNumber", "date", "schoolTime");
+
+-- AddForeignKey
+ALTER TABLE "SchoolClass" ADD CONSTRAINT "SchoolClass_grade_fkey" FOREIGN KEY ("grade") REFERENCES "SchoolGrade"("grade") ON DELETE RESTRICT ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "ClassUnit" ADD CONSTRAINT "ClassUnit_schoolClassId_fkey" FOREIGN KEY ("schoolClassId") REFERENCES "SchoolClass"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "ClassUnit" ADD CONSTRAINT "ClassUnit_dayOfWeekAndSchoolTimeId_fkey" FOREIGN KEY ("dayOfWeekAndSchoolTimeId") REFERENCES "DayOfWeekAndSchoolTime"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "DateAndSchoolTime" ADD CONSTRAINT "DateAndSchoolTime_schoolGradeNumber_fkey" FOREIGN KEY ("schoolGradeNumber") REFERENCES "SchoolGrade"("grade") ON DELETE RESTRICT ON UPDATE CASCADE;
+
+-- AddForeignKey
+ALTER TABLE "DateAndSchoolTime" ADD CONSTRAINT "DateAndSchoolTime_dayOfWeekAndSchoolTimeId_fkey" FOREIGN KEY ("dayOfWeekAndSchoolTimeId") REFERENCES "DayOfWeekAndSchoolTime"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
diff --git a/src/prisma/migrations/migration_lock.toml b/src/prisma/migrations/migration_lock.toml
@@ -0,0 +1,3 @@
+# Please do not edit this file manually
+# It should be added in your version-control system (i.e. Git)
+provider = "postgresql"+
\ No newline at end of file
diff --git a/src/prisma/schema.prisma b/src/prisma/schema.prisma
@@ -0,0 +1,70 @@
+// This is your Prisma schema file,
+// learn more about it in the docs: https://pris.ly/d/prisma-schema
+
+generator client {
+ provider = "prisma-client-js"
+}
+
+datasource db {
+ provider = "postgresql"
+ url = env("DATABASE_URL")
+}
+
+model SchoolGrade {
+ grade Int @id
+ SchoolClass SchoolClass[]
+ DateAndSchoolTime DateAndSchoolTime[]
+}
+
+model SchoolClass {
+ id Int @id
+ SchoolGrade SchoolGrade @relation(fields: [grade], references: [grade])
+ class Int
+ ClassUnit ClassUnit[]
+ grade Int
+
+ @@unique([grade, class])
+}
+
+model ClassUnit {
+ id Int @id @default(autoincrement())
+ SchoolClass SchoolClass @relation(fields: [schoolClassId], references: [id])
+ schoolClassId Int
+ DayOfWeekAndSchoolTime DayOfWeekAndSchoolTime @relation(fields: [dayOfWeekAndSchoolTimeId], references: [id])
+ subject String[]
+ dayOfWeekAndSchoolTimeId Int
+
+ @@unique([schoolClassId, dayOfWeekAndSchoolTimeId])
+}
+
+model DayOfWeekAndSchoolTime {
+ id Int @id
+ dayOfWeek DayOfWeek
+ schoolTime Int
+ ClassUnit ClassUnit[]
+ DateAndSchoolTime DateAndSchoolTime[]
+
+ @@unique([dayOfWeek, schoolTime])
+}
+
+model DateAndSchoolTime {
+ id Int @id @default(autoincrement())
+ schoolGrade SchoolGrade @relation(fields: [schoolGradeNumber], references: [grade])
+ schoolGradeNumber Int
+ date DateTime @db.Date
+ schoolTime Int
+ DayOfWeekAndSchoolTime DayOfWeekAndSchoolTime @relation(fields: [dayOfWeekAndSchoolTimeId], references: [id])
+ dayOfWeekAndSchoolTimeId Int
+
+ @@unique([schoolGradeNumber, date, schoolTime])
+}
+
+enum DayOfWeek {
+ // Sunday
+ Monday
+ Tuesday
+ Wednesday
+ Thursday
+ Friday
+ // Saturday
+}
diff --git a/tsconfig.json b/tsconfig.json
@@ -1,7 +1,7 @@
{
"extends": "@tsconfig/strictest/tsconfig.json",
"compilerOptions": {
- "target": "es5",
+ "target": "ES2018",
"lib": ["dom", "dom.iterable", "esnext"],
"noEmit": true,
"module": "esnext",
diff --git a/yarn.lock b/yarn.lock
@@ -696,6 +696,34 @@ __metadata:
languageName: node
linkType: hard
+"@prisma/client@npm:^4.5.0":
+ version: 4.5.0
+ resolution: "@prisma/client@npm:4.5.0"
+ dependencies:
+ "@prisma/engines-version": 4.5.0-43.0362da9eebca54d94c8ef5edd3b2e90af99ba452
+ peerDependencies:
+ prisma: "*"
+ peerDependenciesMeta:
+ prisma:
+ optional: true
+ checksum: 1e6b76c104f17e6fc78c537d17879a17dcde8443cd6d084530068453c4f2620050c273f5683d7cdb5012a0d5b4854907fe993fcf5752fb11f2bcca7221d34e59
+ languageName: node
+ linkType: hard
+
+"@prisma/engines-version@npm:4.5.0-43.0362da9eebca54d94c8ef5edd3b2e90af99ba452":
+ version: 4.5.0-43.0362da9eebca54d94c8ef5edd3b2e90af99ba452
+ resolution: "@prisma/engines-version@npm:4.5.0-43.0362da9eebca54d94c8ef5edd3b2e90af99ba452"
+ checksum: 619626ff5dc16a292065a5318f76653f589bf170a769edbabb07d62b4a589ab0eba287a00faf3e31eaf3280c99662e210376a61a68f91b7690a955fd43f346eb
+ languageName: node
+ linkType: hard
+
+"@prisma/engines@npm:4.5.0":
+ version: 4.5.0
+ resolution: "@prisma/engines@npm:4.5.0"
+ checksum: d34ba4ceee67809b4a6d756763b118b3fbf273ab35378e568495248c7c62633c4cccca1e6b94411d5312a272f268f3dec5e8ae0a3e4177ad5f593f38daca7c58
+ languageName: node
+ linkType: hard
+
"@swc/helpers@npm:0.4.3":
version: 0.4.3
resolution: "@swc/helpers@npm:0.4.3"
@@ -2824,6 +2852,18 @@ __metadata:
languageName: node
linkType: hard
+"prisma@npm:^4.5.0":
+ version: 4.5.0
+ resolution: "prisma@npm:4.5.0"
+ dependencies:
+ "@prisma/engines": 4.5.0
+ bin:
+ prisma: build/index.js
+ prisma2: build/index.js
+ checksum: 83a6d28475a31e8d69b355f949c0484b6d64324c45c452c57bf9ed50f85129b8df22fecb671c00a28f0cb80360a3f691888c463548949e94078f7f9be4bd0c79
+ languageName: node
+ linkType: hard
+
"prop-types@npm:^15.5.4, prop-types@npm:^15.6.0, prop-types@npm:^15.6.2, prop-types@npm:^15.7.2, prop-types@npm:^15.8.1":
version: 15.8.1
resolution: "prop-types@npm:15.8.1"
@@ -3394,6 +3434,7 @@ __metadata:
"@mui/material": ^5.9.2
"@mui/x-date-pickers": ^5.0.0-beta.3
"@next/eslint-plugin-next": ^12.2.4
+ "@prisma/client": ^4.5.0
"@tsconfig/strictest": ^1.0.1
"@types/node": ^17.0.33
"@types/react": ^18.0.15
@@ -3413,6 +3454,7 @@ __metadata:
lint-staged: ^12.3.7
next: ^12.2.3
prettier: ^2.6.1
+ prisma: ^4.5.0
react: ^18.2.0
react-dom: ^18.2.0
react-swipeable-views: ^0.14.0