refactor for kiss and many-to-many
This commit is contained in:
parent
d518372428
commit
ee0e517c34
136
code/models.lua
136
code/models.lua
@ -5,84 +5,118 @@ local Model = require("lapis.db.model").Model
|
||||
-- Track stuff --
|
||||
-- ----------- --
|
||||
|
||||
-- name/date
|
||||
local Labels = Model:extend("labels", {
|
||||
primary_key = "uuid",
|
||||
relations = {
|
||||
{"releases", has_many = "Releases"},
|
||||
{"artists", has_many = "Artists"}
|
||||
}
|
||||
})
|
||||
|
||||
-- name/date/id
|
||||
local Releases = Model:extend("releases", {
|
||||
primary_key = "uuid",
|
||||
relations = {
|
||||
{"artists", has_many = "Artists"},
|
||||
{"tracks", has_many = "Tracks"},
|
||||
{"label", has_one = "Labels"}
|
||||
}
|
||||
})
|
||||
|
||||
-- name/date
|
||||
local Mixes = Model:extend("mixes", {
|
||||
primary_key = "uuid",
|
||||
relations = {
|
||||
{"artists", has_many = "Artists"}
|
||||
}
|
||||
})
|
||||
|
||||
-- name/date/bio/urls
|
||||
-- artists
|
||||
-- - name/date/bio/urls
|
||||
local Artists = Model:extend("artists", {
|
||||
primary_key = "uuid"
|
||||
timestamp = true
|
||||
})
|
||||
|
||||
-- title/unique name == `lower(artist+title)`
|
||||
-- tracks
|
||||
-- - title/unique name == `lower(artist+title)`
|
||||
local Tracks = Model:extend("tracks", {
|
||||
primary_key = "uuid",
|
||||
relations = {
|
||||
{"artist", belongs_to = "Artists"},
|
||||
{"releases", has_many = "Releases"},
|
||||
{"mixes", has_many = "Mixes"},
|
||||
timestamp = true,
|
||||
-- relations = {
|
||||
-- {"track_releases", has_many = "TrackReleases"},
|
||||
-- {"track_mixes", has_many = "TrackMixes"},
|
||||
-- {"copies", has_many = "Tracks"},
|
||||
-- {"original", has_one = "Tracks"}
|
||||
-- }
|
||||
})
|
||||
|
||||
-- track_artists
|
||||
local TrackArtists = Model:extern("track_artists", {
|
||||
timestamp = true,
|
||||
relations = {
|
||||
{"track", belongs_to = "Tracks"}
|
||||
{"artist", belongs_to = "Artists"}
|
||||
}
|
||||
})
|
||||
|
||||
-- name/id
|
||||
-- stations
|
||||
-- - name/id
|
||||
local Stations = Model:extend("stations", {
|
||||
primary_key = "uuid"
|
||||
timestamp = true
|
||||
})
|
||||
|
||||
-- date
|
||||
local Airtime = Model:extend("airtime", {
|
||||
-- airtime
|
||||
-- - date
|
||||
local Airtime = Model:extend("airtimes", {
|
||||
timestamp = true,
|
||||
relations = {
|
||||
{"track", belongs_to = "Tracks"},
|
||||
{"station", has_one = "Stations"}
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
-- -- releases
|
||||
-- -- - name/date/id
|
||||
-- local Releases = Model:extend("releases", {
|
||||
-- timestamp = true,
|
||||
-- relations = {
|
||||
-- {"artists", has_many = "Artists"},
|
||||
-- {"tracks", has_many = "Tracks"},
|
||||
-- {"label", has_one = "Labels"}
|
||||
-- }
|
||||
-- })
|
||||
|
||||
-- -- track_releases
|
||||
-- local TrackReleases = Model:extend("track_releases", {
|
||||
-- timestamp = true,
|
||||
-- relations = {
|
||||
-- {"track", belongs_to = "Tracks"},
|
||||
-- {"release", belongs_to = "Releases"}
|
||||
-- }
|
||||
-- })
|
||||
|
||||
-- -- labels
|
||||
-- -- - name/date
|
||||
-- local Labels = Model:extend("labels", {
|
||||
-- timestamp = true,
|
||||
-- })
|
||||
|
||||
-- -- release_labels
|
||||
-- local ReleaseLabels = Model:extend("release_labels", {
|
||||
-- timestamp = true,
|
||||
-- relations = {
|
||||
-- {"release", has_many = "Releases"},
|
||||
-- {"label", has_many = "Labels"}
|
||||
-- }
|
||||
-- })
|
||||
|
||||
|
||||
-- -- mixes
|
||||
-- -- name/date
|
||||
-- local Mixes = Model:extend("mixes", {
|
||||
-- timestamp = true,
|
||||
-- relations = {
|
||||
-- {"artists", has_many = "Artists"}
|
||||
-- }
|
||||
-- })
|
||||
|
||||
|
||||
-- ---------- --
|
||||
-- User stuff --
|
||||
-- ---------- --
|
||||
|
||||
--users
|
||||
-- name/email/password/last_login
|
||||
local Users = Model:extend("users", {
|
||||
primary_key = "uuid"
|
||||
local Users = Model:extend("users",
|
||||
timestamp = true
|
||||
})
|
||||
|
||||
-- date?
|
||||
local Favorite_tracks = Model:extend("favorite_tracks", {
|
||||
relations = {
|
||||
{"user", belongs_to = "Users"},
|
||||
{"track", has_one = "Tracks"}
|
||||
}
|
||||
})
|
||||
-- local Favorite_tracks = Model:extend("favorite_tracks", {
|
||||
-- relations = {
|
||||
-- {"user", belongs_to = "Users"},
|
||||
-- {"track", has_one = "Tracks"}
|
||||
-- }
|
||||
-- })
|
||||
|
||||
-- date?
|
||||
local Favorite_mixes = Model:extend("favorite_mixes", {})
|
||||
local Favorite_artists = Model:extend("favorite_artists", {})
|
||||
local Favorite_releases = Model:extend("favorite_releases", {})
|
||||
local Favorite_labels = Model:extend("favorite_labels", {})
|
||||
-- local Favorite_mixes = Model:extend("favorite_mixes", {})
|
||||
-- local Favorite_artists = Model:extend("favorite_artists", {})
|
||||
-- local Favorite_releases = Model:extend("favorite_releases", {})
|
||||
-- local Favorite_labels = Model:extend("favorite_labels", {})
|
||||
|
||||
return autoload("models")
|
||||
|
||||
149
code/schemas.lua
149
code/schemas.lua
@ -1,5 +1,4 @@
|
||||
local schema = require("lapis.db.schema")
|
||||
local uuid = require("resty.uuid")
|
||||
|
||||
local types = schema.types
|
||||
local create_index = schema.create_index
|
||||
@ -8,85 +7,116 @@ 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},
|
||||
{"id", types.serial, { unique=true, primary_key=true }},
|
||||
{"created_at", types.time},
|
||||
{"updated_at", types.time},
|
||||
{"name", types.varchar},
|
||||
{"date", types.date({ null = true })},
|
||||
{"bio", types.text({ null = true })},
|
||||
{"urls", types.text({ null = true })},
|
||||
|
||||
"PRIMARY KEY (uuid)"
|
||||
{"urls", types.text({ null = true })}
|
||||
})
|
||||
|
||||
create_index("artists", "name")
|
||||
|
||||
-- tracks
|
||||
schema.create_table("tracks", {
|
||||
{"uuid", types.varchar},
|
||||
{"id", types.serial, { unique=true, primary_key=true }},
|
||||
{"created_at", types.time},
|
||||
{"updated_at", types.time},
|
||||
{"name", types.varchar},
|
||||
{"unique_name", types.varchar},
|
||||
{"date", types.date({ null = true })},
|
||||
|
||||
"PRIMARY KEY (uuid)"
|
||||
-- ("artist", types.foreign_key),
|
||||
-- {"releases", types.foreign_key},
|
||||
-- {"mixes", types.foreign_key},
|
||||
})
|
||||
create_index("tracks", "unique_name", { unique=true })
|
||||
|
||||
-- track_artists
|
||||
schema.create_table("track_artists", {
|
||||
{"id", types.serial, { unique=true, primary_key=true }},
|
||||
{"created_at", types.time},
|
||||
{"updated_at", types.time},
|
||||
{"track", types.foreign_key}
|
||||
{"artist", types.foreign_key},
|
||||
})
|
||||
create_index("track_artists", "track", "artist", { unique=true })
|
||||
|
||||
create_index("tracks", "unique_name", { unique = true })
|
||||
|
||||
-- stations
|
||||
schema.create_table("mixes", {
|
||||
{"uuid", types.varchar},
|
||||
schema.create_table("stations", {
|
||||
{"id", types.serial, { unique=true, primary_key=true }},
|
||||
{"created_at", types.time},
|
||||
{"updated_at", types.time},
|
||||
{"station", types.integer},
|
||||
{"name", types.varchar},
|
||||
{"id", types.integer},
|
||||
|
||||
"PRIMARY KEY (uuid)"
|
||||
})
|
||||
create_index("stations", "station", "name", { unique=true })
|
||||
|
||||
-- airtime
|
||||
schema.create_table("airtime", {
|
||||
{"id", types.serial},
|
||||
{"date", types.date},
|
||||
schema.create_table("airtimes", {
|
||||
{"id", types.serial, { unique=true, primary_key=true }},
|
||||
{"created_at", types.time},
|
||||
{"updated_at", types.time},
|
||||
{"airtime", types.time},
|
||||
{"track", types.foreign_key},
|
||||
{"station", types.foreign_key},
|
||||
|
||||
"PRIMARY KEY (id)"
|
||||
})
|
||||
create_index("airtimes", "airtime", "track", "station", { unique=true })
|
||||
|
||||
|
||||
-- -- releases
|
||||
-- schema.create_table("releases", {
|
||||
-- {"id", types.serial, { unique=true, primary_key=true }},
|
||||
-- {"created_at", types.time},
|
||||
-- {"updated_at", types.time},
|
||||
-- {"name", types.varchar},
|
||||
-- {"releaseid", types.varchar},
|
||||
-- {"date", types.date},
|
||||
-- })
|
||||
-- create_index("releases", "name", "releaseid", { unique = true })
|
||||
-- labels
|
||||
|
||||
-- -- track_releases
|
||||
-- schema.create_table("track_releases", {
|
||||
-- {"id", types.serial, { unique=true, primary_key=true }},
|
||||
-- {"created_at", types.time},
|
||||
-- {"updated_at", types.time},
|
||||
-- {"track", types.foreign_key},
|
||||
-- {"release", types.foreign_key}
|
||||
-- })
|
||||
-- create_index("track_releases", "track", "release", { unique=true })
|
||||
|
||||
-- schema.create_table("labels", {
|
||||
-- {"id", types.serial, { unique=true, primary_key=true }},
|
||||
-- {"created_at", types.time},
|
||||
-- {"updated_at", types.time},
|
||||
-- {"name", types.varchar},
|
||||
-- {"date", types.date},
|
||||
-- })
|
||||
-- create_index("labels", "name", { unique = true })
|
||||
|
||||
-- schema.create_table("release_labels", {
|
||||
-- {"id", types.serial, { unique=true, primary_key=true }},
|
||||
-- {"created_at", types.time},
|
||||
-- {"updated_at", types.time},
|
||||
-- {"release", types.foreign_key},
|
||||
-- {"label", types.foreign_key}
|
||||
-- })
|
||||
-- create_index("release_labels", "release", "label", { unique=true })
|
||||
|
||||
-- -- mixes
|
||||
-- schema.create_table("mixes", {
|
||||
-- {"id", types.serial, { unique=true, primary_key=true }},
|
||||
-- {"created_at", types.time},
|
||||
-- {"updated_at", types.time},
|
||||
-- {"name", types.varchar},
|
||||
-- {"date", types.date}
|
||||
-- })
|
||||
-- create_index("mixes", "name", "date", { unique = true })
|
||||
|
||||
|
||||
create_index("airtime", "date", "station")
|
||||
|
||||
-- ---------- --
|
||||
-- User stuff --
|
||||
@ -94,15 +124,14 @@ create_index("airtime", "date", "station")
|
||||
|
||||
-- users
|
||||
schema.create_table("users", {
|
||||
{"uuid", types.varchar},
|
||||
{"id", types.serial, { unique=true, primary_key=true }},
|
||||
{"created_at", types.time},
|
||||
{"updated_at", types.time},
|
||||
{"email", types.varchar},
|
||||
{"name", types.varchar},
|
||||
{"password", types.varchar},
|
||||
{"last_login", types.date},
|
||||
|
||||
"PRIMARY KEY (uuid)"
|
||||
{"last_login", types.time},
|
||||
})
|
||||
|
||||
create_index("users", "email", { unique = true })
|
||||
|
||||
-- favorite_tracks
|
||||
|
||||
Loading…
Reference in New Issue
Block a user