local schema = require("lapis.db.schema") local uuid = require("resty.uuid") local types = schema.types local create_index = schema.create_index -- ----------- -- -- Track stuff -- -- ----------- -- -- labels schema.create_table("labels", { {"uuid", types.varchar}, {"name", types.varchar}, {"date", types.date}, "PRIMARY KEY (uuid}" }) create_index("labels", "name", { unique = true }) -- releases schema.create_table("releases", { {"uuid", types.varchar}, {"name", types.varchar}, {"date", types.date}, {"id", types.varchar}, "PRIMARY KEY (uuid}" }) create_index("releases", "name", "id", { unique = true }) -- mixes schema.create_table("mixes", { {"uuid", types.varchar}, {"name", types.varchar}, {"date", types.date}, "PRIMARY KEY (uuid)" }) create_index("mixes", "name", "date", { unique = true }) -- artists schema.create_table("artists", { {"uuid", types.varchar}, {"name", types.varchar}, {"date", types.date({ null = true })}, {"bio", types.text({ null = true })}, {"urls", types.text({ null = true })}, "PRIMARY KEY (uuid)" }) create_index("artists", "name") -- tracks schema.create_table("tracks", { {"uuid", types.varchar}, {"name", types.varchar}, {"unique_name", types.varchar}, {"date", types.date({ null = true })}, "PRIMARY KEY (uuid)" }) create_index("tracks", "unique_name", { unique = true }) -- stations schema.create_table("mixes", { {"uuid", types.varchar}, {"name", types.varchar}, {"id", types.integer}, "PRIMARY KEY (uuid)" }) -- airtime schema.create_table("airtime", { {"id", types.serial}, {"date", types.date}, {"track", types.foreign_key}, {"station", types.foreign_key}, "PRIMARY KEY (id)" }) create_index("airtime", "date", "station") -- ---------- -- -- User stuff -- -- ---------- -- -- users schema.create_table("users", { {"uuid", types.varchar}, {"email", types.varchar}, {"name", types.varchar}, {"password", types.varchar}, {"last_login", types.date}, "PRIMARY KEY (uuid)" }) create_index("users", "email", { unique = true }) -- favorite_tracks -- favorite_mixes -- favorite_artists -- favorite_releases -- favorite_labels