timetable-app

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README | LICENSE

commit 1a77cbf571766c4f6e1d66c629e5ce84f0d6b2e2
parent fca3cb76fc46ae3d4fd58c71d484ea55dd533f90
Author: Yuukin256 <Yuukin256@gmail.com>
Date:   Sat, 29 Oct 2022 15:46:51 +0900

prisma 導入、DBスキーマ定義

Diffstat:
M.vscode/settings.json | 7++++++-
Mpackage.json | 5+++++
Asrc/prisma/migrations/20221029064157_init/migration.sql | 75+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Asrc/prisma/migrations/migration_lock.toml | 4++++
Asrc/prisma/schema.prisma | 70++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Mtsconfig.json | 2+-
Myarn.lock | 42++++++++++++++++++++++++++++++++++++++++++
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