初始化项目

This commit is contained in:
2026-01-08 20:48:55 +08:00
commit 0cc737a8dd
66 changed files with 7410 additions and 0 deletions

View File

@@ -0,0 +1,96 @@
package migrations
import (
"database/sql"
)
func init() {
RegisterMigration(
1,
"Initial schema",
migrateInitialSchemaUp,
migrateInitialSchemaDown,
)
}
func migrateInitialSchemaUp(tx *sql.Tx) error {
_, err := tx.Exec(`
CREATE TABLE IF NOT EXISTS libraries (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
path TEXT NOT NULL)`)
if err != nil {
return err
}
_, err = tx.Exec(`
CREATE TABLE IF NOT EXISTS media_files (
id INTEGER PRIMARY KEY AUTOINCREMENT,
path TEXT NOT NULL,
library_id INTEGER NOT NULL)`)
if err != nil {
return err
}
_, err = tx.Exec(`
CREATE TABLE IF NOT EXISTS artists (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL
)
`)
if err != nil {
return err
}
_, err = tx.Exec(`
CREATE TABLE IF NOT EXISTS albums (
id INTEGER PRIMARY KEY AUTOINCREMENT,
title TEXT NOT NULL,
artist_id INTEGER,
FOREIGN KEY (artist_id) REFERENCES artists(id),
UNIQUE(title, artist_id)
)
`)
if err != nil {
return err
}
_, err = tx.Exec(`
CREATE TABLE IF NOT EXISTS songs (
id INTEGER PRIMARY KEY AUTOINCREMENT,
title TEXT NOT NULL,
album_id INTEGER,
artist_id INTEGER,
duration INTEGER,
media_file_id INTEGER UNIQUE,
FOREIGN KEY (album_id) REFERENCES albums(id),
FOREIGN KEY (artist_id) REFERENCES artists(id),
FOREIGN KEY (media_file_id) REFERENCES media_files(id)
)
`)
if err != nil {
return err
}
return nil
}
func migrateInitialSchemaDown(tx *sql.Tx) error {
// Drop tables in reverse order to avoid foreign key constraints
tables := []string{
"songs",
"albums",
"artists",
"media_files",
"libraries",
}
for _, table := range tables {
_, err := tx.Exec("DROP TABLE IF EXISTS " + table)
if err != nil {
return err
}
}
return nil
}