// 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 User { id Int @id @default(autoincrement()) username String @unique password String email String googleId String? @unique LessonHistory LessonHistory[] SongHistory SongHistory[] searchHistory SearchHistory[] } model SearchHistory { id Int @id @default(autoincrement()) query String type String userId Int? user User? @relation(fields: [userId], references: [id]) } model Song { id Int @id @default(autoincrement()) name String @unique midiPath String musicXmlPath String artistId Int? artist Artist? @relation(fields: [artistId], references: [id]) albumId Int? album Album? @relation(fields: [albumId], references: [id]) genreId Int? genre Genre? @relation(fields: [genreId], references: [id]) difficulties Json SongHistory SongHistory[] } model SongHistory { song Song @relation(fields: [songID], references: [id], onDelete: Cascade, onUpdate: Cascade) songID Int user User @relation(fields: [userID], references: [id], onDelete: Cascade, onUpdate: Cascade) userID Int score Int difficulties Json @@id([songID, userID]) } model Genre { id Int @id @default(autoincrement()) name String @unique Song Song[] } model Artist { id Int @id @default(autoincrement()) name String @unique Song Song[] Album Album[] } model Album { id Int @id @default(autoincrement()) name String @unique artistId Int? artist Artist? @relation(fields: [artistId], references: [id]) Song Song[] } model Lesson { id Int @id @default(autoincrement()) name String description String requiredLevel Int mainSkill Skill LessonHistory LessonHistory[] } model LessonHistory { lesson Lesson @relation(fields: [lessonID], references: [id]) lessonID Int user User @relation(fields: [userID], references: [id]) userID Int @@id([lessonID, userID]) } enum Skill { TwoHands Rhythm NoteCombo Arpeggio Distance LeftHand RightHand LeadHandChange ChordComplexity ChordTiming Length PedalPoint Precision @@map("DifficultyPoint") }