refactor for kiss and many-to-many

This commit is contained in:
dreamer 2020-09-19 07:44:39 +02:00
parent d518372428
commit ee0e517c34
2 changed files with 174 additions and 111 deletions

View File

@ -5,84 +5,118 @@ local Model = require("lapis.db.model").Model
-- Track stuff -- -- Track stuff --
-- ----------- -- -- ----------- --
-- name/date -- artists
local Labels = Model:extend("labels", { -- - name/date/bio/urls
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
local Artists = Model:extend("artists", { 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", { local Tracks = Model:extend("tracks", {
primary_key = "uuid", timestamp = true,
relations = { -- relations = {
{"artist", belongs_to = "Artists"}, -- {"track_releases", has_many = "TrackReleases"},
{"releases", has_many = "Releases"}, -- {"track_mixes", has_many = "TrackMixes"},
{"mixes", has_many = "Mixes"},
-- {"copies", has_many = "Tracks"}, -- {"copies", has_many = "Tracks"},
-- {"original", has_one = "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", { local Stations = Model:extend("stations", {
primary_key = "uuid" timestamp = true
}) })
-- date -- airtime
local Airtime = Model:extend("airtime", { -- - date
local Airtime = Model:extend("airtimes", {
timestamp = true,
relations = { relations = {
{"track", belongs_to = "Tracks"}, {"track", belongs_to = "Tracks"},
{"station", has_one = "Stations"} {"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 -- -- User stuff --
-- ---------- -- -- ---------- --
--users
-- name/email/password/last_login -- name/email/password/last_login
local Users = Model:extend("users", { local Users = Model:extend("users",
primary_key = "uuid" timestamp = true
}) })
-- date? -- date?
local Favorite_tracks = Model:extend("favorite_tracks", { -- local Favorite_tracks = Model:extend("favorite_tracks", {
relations = { -- relations = {
{"user", belongs_to = "Users"}, -- {"user", belongs_to = "Users"},
{"track", has_one = "Tracks"} -- {"track", has_one = "Tracks"}
} -- }
}) -- })
-- date? -- date?
local Favorite_mixes = Model:extend("favorite_mixes", {}) -- local Favorite_mixes = Model:extend("favorite_mixes", {})
local Favorite_artists = Model:extend("favorite_artists", {}) -- local Favorite_artists = Model:extend("favorite_artists", {})
local Favorite_releases = Model:extend("favorite_releases", {}) -- local Favorite_releases = Model:extend("favorite_releases", {})
local Favorite_labels = Model:extend("favorite_labels", {}) -- local Favorite_labels = Model:extend("favorite_labels", {})
return autoload("models") return autoload("models")

View File

@ -1,5 +1,4 @@
local schema = require("lapis.db.schema") local schema = require("lapis.db.schema")
local uuid = require("resty.uuid")
local types = schema.types local types = schema.types
local create_index = schema.create_index local create_index = schema.create_index
@ -8,85 +7,116 @@ local create_index = schema.create_index
-- Track stuff -- -- 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 -- artists
schema.create_table("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}, {"name", types.varchar},
{"date", types.date({ null = true })}, {"date", types.date({ null = true })},
{"bio", types.text({ null = true })}, {"bio", types.text({ null = true })},
{"urls", types.text({ null = true })}, {"urls", types.text({ null = true })}
"PRIMARY KEY (uuid)"
}) })
create_index("artists", "name") create_index("artists", "name")
-- tracks -- tracks
schema.create_table("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}, {"name", types.varchar},
{"unique_name", types.varchar}, {"unique_name", types.varchar},
{"date", types.date({ null = true })}, {"date", types.date({ null = true })},
-- ("artist", types.foreign_key),
"PRIMARY KEY (uuid)" -- {"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 -- stations
schema.create_table("mixes", { schema.create_table("stations", {
{"uuid", types.varchar}, {"id", types.serial, { unique=true, primary_key=true }},
{"created_at", types.time},
{"updated_at", types.time},
{"station", types.integer},
{"name", types.varchar}, {"name", types.varchar},
{"id", types.integer},
"PRIMARY KEY (uuid)"
}) })
create_index("stations", "station", "name", { unique=true })
-- airtime -- airtime
schema.create_table("airtime", { schema.create_table("airtimes", {
{"id", types.serial}, {"id", types.serial, { unique=true, primary_key=true }},
{"date", types.date}, {"created_at", types.time},
{"updated_at", types.time},
{"airtime", types.time},
{"track", types.foreign_key}, {"track", types.foreign_key},
{"station", 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 -- -- User stuff --
@ -94,15 +124,14 @@ create_index("airtime", "date", "station")
-- users -- users
schema.create_table("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}, {"email", types.varchar},
{"name", types.varchar}, {"name", types.varchar},
{"password", types.varchar}, {"password", types.varchar},
{"last_login", types.date}, {"last_login", types.time},
"PRIMARY KEY (uuid)"
}) })
create_index("users", "email", { unique = true }) create_index("users", "email", { unique = true })
-- favorite_tracks -- favorite_tracks