From ee0e517c34ec2305e4bf37b559cab3a7cbb0de5d Mon Sep 17 00:00:00 2001 From: dreamer Date: Sat, 19 Sep 2020 07:44:39 +0200 Subject: [PATCH] refactor for kiss and many-to-many --- code/models.lua | 136 ++++++++++++++++++++++++++---------------- code/schemas.lua | 149 ++++++++++++++++++++++++++++------------------- 2 files changed, 174 insertions(+), 111 deletions(-) diff --git a/code/models.lua b/code/models.lua index 22dd64e..331736e 100644 --- a/code/models.lua +++ b/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") diff --git a/code/schemas.lua b/code/schemas.lua index 3ab839b..79cb840 100644 --- a/code/schemas.lua +++ b/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