diff --git a/prisma/schema.prisma b/prisma/schema.prisma index c589fb2..636a541 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -48,18 +48,22 @@ type RangeInput { max Int } +type PlatformLink { + platform Platform + link String +} + model AuditoryResource { id String @id @default(auto()) @map("_id") @db.ObjectId icon String name String description String manufacturer String - platforms Platform[] ages RangeInput skills Skill[] skill_levels SkillLevel[] payment_options PaymentType[] - download_link String + platform_links PlatformLink[] } // Necessary for Next auth diff --git a/prisma/seed.ts b/prisma/seed.ts deleted file mode 100644 index 9fa17dd..0000000 --- a/prisma/seed.ts +++ /dev/null @@ -1,111 +0,0 @@ -import { type Platform, PrismaClient, type RangeInput, type Skill, type PaymentType, type SkillLevel, type Prisma } from "@prisma/client"; -import * as path from 'path'; -import fs from "fs"; -import readline from "readline"; - -const filePath = path.resolve(__dirname, '../data/at_resources.csv'); -const prisma = new PrismaClient(); - -const readCSVData = async (path: string): Promise => { - const stream = fs.createReadStream(path); - const reader = readline.createInterface({ input: stream }); - - return await new Promise((resolve, _reject) => { - const auditoryResources: Prisma.AuditoryResourceCreateInput[] = []; - - reader.on("line", row => { - const rowCells = row.split(","); - - if (rowCells[0] === "Name") { - //skip first row - return; - } - - const platforms: Platform[] = (rowCells[2]?.split(";") ?? []) as Platform[]; - const skills: Skill[] = (rowCells[4]?.split(";") ?? []) as Skill[]; - const skill_levels: SkillLevel[] = (rowCells[5]?.split(";") ?? []) as SkillLevel[]; - const payment_options: PaymentType[] = (rowCells[7]?.split(";") ?? []) as PaymentType[]; - - const splitAgeString = rowCells[3]?.split('-') ?? ['0', '10']; - const ages: RangeInput = { - min: parseInt(splitAgeString[0] ?? '0'), - max: parseInt(splitAgeString[1] ?? '10'), - } - - const data: Prisma.AuditoryResourceCreateInput = { - name: rowCells[0] ?? 'n/a', - icon: rowCells[1] ?? '', - description: rowCells[9] ?? 'n/a', - download_link: rowCells[8] ?? '', - manufacturer: rowCells[6] ?? 'n/a', - platforms, - ages, - skills, - skill_levels, - payment_options - } - - auditoryResources.push(data); - }); - - reader.on("close", () => { - // Reached the end of file - resolve(auditoryResources) - console.log("Loading CSV completed!"); - }); - }); -} - -async function main() { - const resources = await readCSVData(filePath); - - console.log(resources); - - for (const resource of resources) { - console.log(resource) - await prisma.auditoryResource.create({ - data: resource, - }); - } -} - -/* -async function main() { - await prisma.auditoryResource.createMany({ - data: [ - { - icon: "https://example.com/icon1.png", - name: "Auditory Resource 1", - description: "This is the first auditory resource", - manufacturer: "Manufacturer A", - platform: "APP_IOS", - ages: { min: 5, max: 10 }, - skills: ["PHONEMES", "WORDS"], - skill_level: "BEGINNER", - cost: 10.99, - }, - { - icon: "https://example.com/icon2.png", - name: "Auditory Resource 2", - description: "This is the second auditory resource", - manufacturer: "Manufacturer B", - platform: "WEBSITE", - ages: { min: 8, max: 12 }, - skills: ["WORDS", "SENTENCES"], - skill_level: "INTERMEDIATE", - cost: 15.99, - }, - ], - }); -} -*/ - -main() - .then(async () => { - await prisma.$disconnect() - }) - .catch(async (e) => { - console.error(e) - await prisma.$disconnect() - process.exit(1) - });