-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathinsertCoursesFromJSONByCreateMany.ts
More file actions
83 lines (71 loc) · 1.82 KB
/
insertCoursesFromJSONByCreateMany.ts
File metadata and controls
83 lines (71 loc) · 1.82 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
import * as fs from "node:fs";
import * as path from "node:path";
import { prisma } from "../database/client";
// シ楽バス形式のデータを読み込む。
const FILE_PATH = path.join(__dirname, "data.json");
async function main() {
const jsonData = JSON.parse(fs.readFileSync(FILE_PATH, "utf-8"));
const coursesData = jsonData.map(
(course: {
code: string;
titleJp: string;
lecturerJp: string;
}) => {
const { code, titleJp, lecturerJp } = course;
return {
id: code,
name: titleJp,
teacher: lecturerJp,
};
},
);
await prisma.course.createMany({
data: coursesData,
});
const slotsData: {
day: "mon" | "tue" | "wed" | "thu" | "fri" | "sat" | "sun" | "other";
period: number;
courseId: string;
}[] = [];
for (const courseData of jsonData) {
const { code, periods } = courseData;
for (const period of periods) {
const [dayJp, periodStr] = period.split("");
const day =
dayJp === "月"
? "mon"
: dayJp === "火"
? "tue"
: dayJp === "水"
? "wed"
: dayJp === "木"
? "thu"
: dayJp === "金"
? "fri"
: dayJp === "土"
? "sat"
: dayJp === "日"
? "sun"
: "other";
slotsData.push({
day,
period: Number.parseInt(periodStr) || 0,
courseId: code,
});
}
}
await prisma.slot.createMany({
data: slotsData,
skipDuplicates: true,
});
console.log("Data inserted successfully!");
}
main()
.then(async () => {
await prisma.$disconnect();
})
.catch(async (e) => {
console.error(e);
await prisma.$disconnect();
process.exit(1);
});