diff --git a/code/app.lua b/code/app.lua index 30e5c5d..c9701ce 100644 --- a/code/app.lua +++ b/code/app.lua @@ -1,12 +1,86 @@ local lapis = require("lapis") local config = require("lapis.config").get() +local to_json = require("lapis.util").to_json local models = require("models") +-- print("models has type: " .. type(models)) +-- print(to_json(models)) + local app = lapis.Application() app:get("/", function() -- return "Welcome to Lapis " .. require("lapis.version") return config.greeting .. " from port " .. config.postgres.password + +end) + +app:match("/station/", function(self) + -- print( to_json(self.params)) + + -- artist=%a& + -- track=%t& + -- release=%T + -- label=%L& + -- year=%Y& + -- country=%O& + -- info_url=%U1& + -- img_url=%U2& + -- time=%h& + + -- artist=%a&track=%t&release=%Tlabel=%L&year=%Y&country=%O&info_url=%U1&img_url=%U2&time=%h& + + -- ----- -- + -- setup -- + -- ----- -- + + local artist_name = self.params.artist + local track_name = self.params.track + -- local track_length = self.params.length + local track_info_url = self.params.info_url + local track_img_url = self.params.img_url + local release_name = self.params.release + local release_year = self.params.year + local release_country = self.params.country + local label_name = self.params.label + local airtime = self.params.time + + -- we have to split the `hr:min:sec` string from SPL + local function Split(s, delimiter) + local result = {} + for match in (s..delimiter):gmatch("(.-)"..delimiter) do + table.insert(result, match) + end + return result + end + + local split_airtime = Split(airtime, ":") + local airtime_hr, airtime_min, airtime_sec = split_airtime[1], split_airtime[2], split_airtime[3] + local airtime_stamp = os.time{year=os.date("%Y"), month=os.date("%m"), day=os.date("%d"), hour=airtime_hr, min=airtime_min, sec=airtime_sec} + + + -- ------- -- + -- queries -- + -- ------- -- + + -- local artist = models.Artists:select("where name = ?", artist_name) + + -- if not artist then + -- print("new artist!") + -- artist = models.Artists:create({ + -- name = artist_name + -- }) + -- else + -- print("old artist.") + -- end + + -- local track = models.Tracks:select("where name = ?", track_name) + + -- if track == nil then + -- track = models.Tracks:create({ + -- name = track_name + -- }) + -- end + end) return app diff --git a/code/config.lua b/code/config.lua index 5044e8e..bc6f681 100644 --- a/code/config.lua +++ b/code/config.lua @@ -5,6 +5,6 @@ config("development", { host = "postgres", user = "postgres", password = "the_password", - database = "my_database" + database = "postgres" } }) diff --git a/code/migrations.lua b/code/migrations.lua new file mode 100644 index 0000000..6b0ce96 --- /dev/null +++ b/code/migrations.lua @@ -0,0 +1,146 @@ +local schema = require("lapis.db.schema") + +local types = schema.types +local create_index = schema.create_index + +return { + [1600494396] = function() + -- ----------- -- + -- Track stuff -- + -- ----------- -- + + -- artists + schema.create_table("artists", { + {"id", types.serial, { unique=true, primary_key=true }}, + {"created_at", types.time}, + {"updated_at", types.time}, + {"name", types.varchar, { unique=true }}, + {"date", types.date({ null = true })}, + {"bio", types.text({ null = true })}, + {"urls", types.text({ null = true })} + }) + create_index("artists", "name") + + -- tracks + schema.create_table("tracks", { + {"id", types.serial, { unique=true, primary_key=true }}, + {"created_at", types.time}, + {"updated_at", types.time}, + {"name", types.varchar}, + {"unique_name", types.varchar}, + {"year", types.integer({ null = true }) } + -- ("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 }) + + + -- stations + 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}, + }) + create_index("stations", "station", "name", { unique=true }) + + -- airtime + 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}, + }) + 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 }) + + + + -- ---------- -- + -- User stuff -- + -- ---------- -- + + -- users + schema.create_table("users", { + {"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.time}, + }) + create_index("users", "email", { unique = true }) + + -- favorite_tracks + -- favorite_mixes + -- favorite_artists + -- favorite_releases + -- favorite_labels + + end +} \ No newline at end of file diff --git a/code/models.lua b/code/models.lua index 331736e..b42499f 100644 --- a/code/models.lua +++ b/code/models.lua @@ -1,4 +1,3 @@ -local autoload = require("lapis.util").autoload local Model = require("lapis.db.model").Model -- ----------- -- @@ -24,10 +23,10 @@ local Tracks = Model:extend("tracks", { }) -- track_artists -local TrackArtists = Model:extern("track_artists", { +local TrackArtists = Model:extend("track_artists", { timestamp = true, relations = { - {"track", belongs_to = "Tracks"} + {"track", belongs_to = "Tracks"}, {"artist", belongs_to = "Artists"} } }) @@ -101,7 +100,7 @@ local Airtime = Model:extend("airtimes", { --users -- name/email/password/last_login -local Users = Model:extend("users", +local Users = Model:extend("users", { timestamp = true }) @@ -118,5 +117,3 @@ local Users = Model:extend("users", -- 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 deleted file mode 100644 index 79cb840..0000000 --- a/code/schemas.lua +++ /dev/null @@ -1,141 +0,0 @@ -local schema = require("lapis.db.schema") - -local types = schema.types -local create_index = schema.create_index - --- ----------- -- --- Track stuff -- --- ----------- -- - --- artists -schema.create_table("artists", { - {"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 })} -}) -create_index("artists", "name") - --- tracks -schema.create_table("tracks", { - {"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 })}, - -- ("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 }) - - --- stations -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}, -}) -create_index("stations", "station", "name", { unique=true }) - --- airtime -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}, -}) -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 }) - - - --- ---------- -- --- User stuff -- --- ---------- -- - --- users -schema.create_table("users", { - {"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.time}, -}) -create_index("users", "email", { unique = true }) - --- favorite_tracks --- favorite_mixes --- favorite_artists --- favorite_releases --- favorite_labels