feat(special-curation): complete implementation with all components
- Database: SpecialSong model with startTime - Backend: API endpoints for curation - Admin: Waveform editor and curation page - Game: startTime support in AudioPlayer - UI: Curate button in admin dashboard
This commit is contained in:
@@ -19,7 +19,7 @@ model Song {
|
||||
createdAt DateTime @default(now())
|
||||
puzzles DailyPuzzle[]
|
||||
genres Genre[]
|
||||
specials Special[]
|
||||
specials SpecialSong[]
|
||||
}
|
||||
|
||||
model Genre {
|
||||
@@ -35,10 +35,22 @@ model Special {
|
||||
maxAttempts Int @default(7)
|
||||
unlockSteps String // JSON array: "[2,4,7,11,16,30,60]"
|
||||
createdAt DateTime @default(now())
|
||||
songs Song[]
|
||||
songs SpecialSong[]
|
||||
dailyPuzzles DailyPuzzle[]
|
||||
}
|
||||
|
||||
model SpecialSong {
|
||||
id Int @id @default(autoincrement())
|
||||
specialId Int
|
||||
special Special @relation(fields: [specialId], references: [id], onDelete: Cascade)
|
||||
songId Int
|
||||
song Song @relation(fields: [songId], references: [id], onDelete: Cascade)
|
||||
startTime Int @default(0) // Start time in seconds
|
||||
order Int? // For manual ordering
|
||||
|
||||
@@unique([specialId, songId])
|
||||
}
|
||||
|
||||
model DailyPuzzle {
|
||||
id Int @id @default(autoincrement())
|
||||
date String // Format: YYYY-MM-DD
|
||||
|
||||
Reference in New Issue
Block a user