File tree Expand file tree Collapse file tree 2 files changed +97
-0
lines changed
prisma/migrations/20250401154435_add_course_cascade Expand file tree Collapse file tree 2 files changed +97
-0
lines changed Original file line number Diff line number Diff line change 1+ -- DropForeignKey
2+ ALTER TABLE " Enrollment" DROP CONSTRAINT " Enrollment_courseId_fkey" ;
3+
4+ -- DropForeignKey
5+ ALTER TABLE " Slot" DROP CONSTRAINT " Slot_courseId_fkey" ;
6+
7+ -- AlterTable
8+ ALTER TABLE " Message" ALTER COLUMN " isPicture" DROP DEFAULT;
9+
10+ -- AddForeignKey
11+ ALTER TABLE " Slot" ADD CONSTRAINT " Slot_courseId_fkey" FOREIGN KEY (" courseId" ) REFERENCES " Course" (" id" ) ON DELETE CASCADE ON UPDATE CASCADE;
12+
13+ -- AddForeignKey
14+ ALTER TABLE " Enrollment" ADD CONSTRAINT " Enrollment_courseId_fkey" FOREIGN KEY (" courseId" ) REFERENCES " Course" (" id" ) ON DELETE CASCADE ON UPDATE CASCADE;
Original file line number Diff line number Diff line change 1+ import * as fs from "node:fs" ;
2+ import * as path from "node:path" ;
3+
4+ import { prisma } from "../database/client" ;
5+
6+ // シ楽バス形式のデータを読み込む。
7+ const FILE_PATH = path . join ( __dirname , "data.json" ) ;
8+
9+ async function main ( ) {
10+ const jsonData = JSON . parse ( fs . readFileSync ( FILE_PATH , "utf-8" ) ) ;
11+
12+ const coursesData = jsonData . map (
13+ ( course : {
14+ code : string ;
15+ titleJp : string ;
16+ lecturerJp : string ;
17+ } ) => {
18+ const { code, titleJp, lecturerJp } = course ;
19+ return {
20+ id : code ,
21+ name : titleJp ,
22+ teacher : lecturerJp ,
23+ } ;
24+ } ,
25+ ) ;
26+
27+ await prisma . course . createMany ( {
28+ data : coursesData ,
29+ } ) ;
30+
31+ const slotsData : {
32+ day : "mon" | "tue" | "wed" | "thu" | "fri" | "sat" | "sun" | "other" ;
33+ period : number ;
34+ courseId : string ;
35+ } [ ] = [ ] ;
36+
37+ for ( const courseData of jsonData ) {
38+ const { code, periods } = courseData ;
39+
40+ for ( const period of periods ) {
41+ const [ dayJp , periodStr ] = period . split ( "" ) ;
42+ const day =
43+ dayJp === "月"
44+ ? "mon"
45+ : dayJp === "火"
46+ ? "tue"
47+ : dayJp === "水"
48+ ? "wed"
49+ : dayJp === "木"
50+ ? "thu"
51+ : dayJp === "金"
52+ ? "fri"
53+ : dayJp === "土"
54+ ? "sat"
55+ : dayJp === "日"
56+ ? "sun"
57+ : "other" ;
58+
59+ slotsData . push ( {
60+ day,
61+ period : Number . parseInt ( periodStr ) || 0 ,
62+ courseId : code ,
63+ } ) ;
64+ }
65+ }
66+
67+ await prisma . slot . createMany ( {
68+ data : slotsData ,
69+ skipDuplicates : true ,
70+ } ) ;
71+
72+ console . log ( "Data inserted successfully!" ) ;
73+ }
74+
75+ main ( )
76+ . then ( async ( ) => {
77+ await prisma . $disconnect ( ) ;
78+ } )
79+ . catch ( async ( e ) => {
80+ console . error ( e ) ;
81+ await prisma . $disconnect ( ) ;
82+ process . exit ( 1 ) ;
83+ } ) ;
You can’t perform that action at this time.
0 commit comments