correct the database creation script for the expected fields.
This commit is contained in:
parent
c9f6cb2aa7
commit
4ca6570d5e
|
|
@ -42,7 +42,7 @@ services:
|
||||||
- "5432:5432"
|
- "5432:5432"
|
||||||
volumes:
|
volumes:
|
||||||
- postgres-data:/var/lib/postgresql/data
|
- postgres-data:/var/lib/postgresql/data
|
||||||
# - ./init-db.sql:/docker-entrypoint-initdb.d/init-db.sql:ro
|
- ./init-db.sql:/docker-entrypoint-initdb.d/init-db.sql:ro
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
networks:
|
networks:
|
||||||
- asteroid-network
|
- asteroid-network
|
||||||
|
|
|
||||||
|
|
@ -5,34 +5,36 @@
|
||||||
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
|
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
|
||||||
|
|
||||||
-- Users table
|
-- Users table
|
||||||
CREATE TABLE IF NOT EXISTS users (
|
CREATE TABLE IF NOT EXISTS "USERS" (
|
||||||
id SERIAL PRIMARY KEY,
|
_id SERIAL PRIMARY KEY,
|
||||||
username VARCHAR(255) UNIQUE NOT NULL,
|
username VARCHAR(255) UNIQUE NOT NULL,
|
||||||
email VARCHAR(255) UNIQUE NOT NULL,
|
email VARCHAR(255) UNIQUE NOT NULL,
|
||||||
password_hash TEXT NOT NULL,
|
"password-hash" TEXT NOT NULL,
|
||||||
role VARCHAR(50) DEFAULT 'listener',
|
role VARCHAR(50) DEFAULT 'listener',
|
||||||
active BOOLEAN DEFAULT true,
|
active integer DEFAULT 1,
|
||||||
created_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
-- "created-date" integer DEFAULT CURRENT_TIMESTAMP,
|
||||||
last_login TIMESTAMP,
|
"created-date" integer,
|
||||||
|
"last-login" integer,
|
||||||
CONSTRAINT valid_role CHECK (role IN ('listener', 'dj', 'admin'))
|
CONSTRAINT valid_role CHECK (role IN ('listener', 'dj', 'admin'))
|
||||||
);
|
);
|
||||||
|
|
||||||
-- Create index on username and email for faster lookups
|
-- Create index on username and email for faster lookups
|
||||||
CREATE INDEX idx_users_username ON users(username);
|
CREATE INDEX idx_users_username ON "USERS"(username);
|
||||||
CREATE INDEX idx_users_email ON users(email);
|
CREATE INDEX idx_users_email ON "USERS"(email);
|
||||||
|
|
||||||
-- Tracks table
|
-- Tracks table
|
||||||
CREATE TABLE IF NOT EXISTS tracks (
|
CREATE TABLE IF NOT EXISTS tracks (
|
||||||
id SERIAL PRIMARY KEY,
|
_id SERIAL PRIMARY KEY,
|
||||||
title VARCHAR(500) NOT NULL,
|
title VARCHAR(500) NOT NULL,
|
||||||
artist VARCHAR(500),
|
artist VARCHAR(500),
|
||||||
album VARCHAR(500),
|
album VARCHAR(500),
|
||||||
duration INTEGER DEFAULT 0,
|
duration INTEGER DEFAULT 0,
|
||||||
format VARCHAR(50),
|
format VARCHAR(50),
|
||||||
file_path TEXT NOT NULL UNIQUE,
|
bitrate integer,
|
||||||
play_count INTEGER DEFAULT 0,
|
"file-path" TEXT NOT NULL UNIQUE,
|
||||||
added_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
"play-count" INTEGER DEFAULT 0,
|
||||||
last_played TIMESTAMP
|
"added-date" TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
"last-played" TIMESTAMP
|
||||||
);
|
);
|
||||||
|
|
||||||
-- Create indexes for common queries
|
-- Create indexes for common queries
|
||||||
|
|
@ -42,25 +44,25 @@ CREATE INDEX idx_tracks_title ON tracks(title);
|
||||||
|
|
||||||
-- Playlists table
|
-- Playlists table
|
||||||
CREATE TABLE IF NOT EXISTS playlists (
|
CREATE TABLE IF NOT EXISTS playlists (
|
||||||
id SERIAL PRIMARY KEY,
|
_id SERIAL PRIMARY KEY,
|
||||||
user_id INTEGER NOT NULL REFERENCES users(id) ON DELETE CASCADE,
|
"user-id" INTEGER NOT NULL REFERENCES "USERS"(_id) ON DELETE CASCADE,
|
||||||
name VARCHAR(255) NOT NULL,
|
name VARCHAR(255) NOT NULL,
|
||||||
description TEXT,
|
description TEXT,
|
||||||
created_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
"created-date" TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||||
modified_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
"modified-date" TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||||
);
|
);
|
||||||
|
|
||||||
-- Create index on user_id for faster user playlist lookups
|
-- Create index on user_id for faster user playlist lookups
|
||||||
CREATE INDEX idx_playlists_user_id ON playlists(user_id);
|
CREATE INDEX idx_playlists_user_id ON playlists("user-id");
|
||||||
|
|
||||||
-- Playlist tracks junction table (many-to-many relationship)
|
-- Playlist tracks junction table (many-to-many relationship)
|
||||||
CREATE TABLE IF NOT EXISTS playlist_tracks (
|
CREATE TABLE IF NOT EXISTS playlist_tracks (
|
||||||
id SERIAL PRIMARY KEY,
|
_id SERIAL PRIMARY KEY,
|
||||||
playlist_id INTEGER NOT NULL REFERENCES playlists(id) ON DELETE CASCADE,
|
playlist_id INTEGER NOT NULL REFERENCES playlists(_id) ON DELETE CASCADE,
|
||||||
track_id INTEGER NOT NULL REFERENCES tracks(id) ON DELETE CASCADE,
|
track_id INTEGER NOT NULL REFERENCES tracks(_id) ON DELETE CASCADE,
|
||||||
position INTEGER NOT NULL,
|
position INTEGER NOT NULL,
|
||||||
added_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
added_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||||
UNIQUE(playlist_id, track_id, position)
|
UNIQUE(playlist_id, track_id, "position")
|
||||||
);
|
);
|
||||||
|
|
||||||
-- Create indexes for playlist track queries
|
-- Create indexes for playlist track queries
|
||||||
|
|
@ -68,28 +70,28 @@ CREATE INDEX idx_playlist_tracks_playlist_id ON playlist_tracks(playlist_id);
|
||||||
CREATE INDEX idx_playlist_tracks_track_id ON playlist_tracks(track_id);
|
CREATE INDEX idx_playlist_tracks_track_id ON playlist_tracks(track_id);
|
||||||
|
|
||||||
-- Sessions table (for Radiance session management)
|
-- Sessions table (for Radiance session management)
|
||||||
CREATE TABLE IF NOT EXISTS sessions (
|
-- CREATE TABLE IF NOT EXISTS sessions (
|
||||||
id VARCHAR(255) PRIMARY KEY,
|
-- _id VARCHAR(255) PRIMARY KEY,
|
||||||
user_id INTEGER REFERENCES users(id) ON DELETE CASCADE,
|
-- "user_id INTEGER REFERENCES users(id) ON DELETE CASCADE,
|
||||||
data JSONB,
|
-- data JSONB,
|
||||||
created_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
-- created_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||||
expires_at TIMESTAMP NOT NULL
|
-- expires_at TIMESTAMP NOT NULL
|
||||||
);
|
-- );
|
||||||
|
|
||||||
-- Create index on user_id and expires_at
|
-- Create index on user_id and expires_at
|
||||||
CREATE INDEX idx_sessions_user_id ON sessions(user_id);
|
-- CREATE INDEX idx_sessions_user_id ON sessions(user_id);
|
||||||
CREATE INDEX idx_sessions_expires_at ON sessions(expires_at);
|
-- CREATE INDEX idx_sessions_expires_at ON sessions(expires_at);
|
||||||
|
|
||||||
-- Create default admin user (password: admin - CHANGE THIS!)
|
-- Create default admin user (password: admin - CHANGE THIS!)
|
||||||
-- Password hash for 'admin' using bcrypt
|
-- Password hash for 'admin' using bcrypt
|
||||||
-- INSERT INTO users (username, email, password_hash, role, active)
|
INSERT INTO "USERS" (username, email, "password-hash", role, active)
|
||||||
-- VALUES ('admin', 'admin@asteroid.radio', '$2a$12$LQv3c1yqBWVHxkd0LHAkCOYz6TtxMQJqhN8/LewY5GyYqYqYqYqYq', 'admin', true)
|
-- VALUES ('admin', 'admin@asteroid.radio', '$2a$12$LQv3c1yqBWVHxkd0LHAkCOYz6TtxMQJqhN8/LewY5GyYqYqYqYqYq', 'admin', 1)
|
||||||
-- ON CONFLICT (username) DO NOTHING;
|
VALUES ('admin', 'admin@asteroid.radio','8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918', 'admin', 1)
|
||||||
|
ON CONFLICT (username) DO NOTHING;
|
||||||
|
|
||||||
-- Create a test listener user
|
-- Create a test listener user
|
||||||
-- INSERT INTO users (username, email, password_hash, role, active)
|
INSERT INTO "USERS" (username, email, "password-hash", role, active)
|
||||||
-- VALUES ('listener', 'listener@asteroid.radio', '$2a$12$LQv3c1yqBWVHxkd0LHAkCOYz6TtxMQJqhN8/LewY5GyYqYqYqYqYq', 'listener', true)
|
VALUES ('listener', 'listener@asteroid.radio', '$2a$12$LQv3c1yqBWVHxkd0LHAkCOYz6TtxMQJqhN8/LewY5GyYqYqYqYqYq', 'listener', 1);
|
||||||
-- ON CONFLICT (username) DO NOTHING;
|
|
||||||
|
|
||||||
-- Grant necessary permissions
|
-- Grant necessary permissions
|
||||||
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO asteroid;
|
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO asteroid;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue