diff --git a/code/app.lua b/code/app.lua index e22252b..9b96950 100644 --- a/code/app.lua +++ b/code/app.lua @@ -18,17 +18,18 @@ end) app:match("/spl/:station", function(self) -- print( to_json(self.params)) - -- artist=%a& - -- track=%t& - -- release=%T + -- artist_name=%a& + -- track_name=%t& + -- release_name=%T -- label=%L& -- year=%Y& -- country=%O& -- info_url=%U1& -- img_url=%U2& -- time=%h& + -- duration=%S - -- artist=%a&track=%t&release=%Tlabel=%L&year=%Y&country=%O&info_url=%U1&img_url=%U2&time=%h& + -- artist_name=%a&track_name=%t&release_name=%Tlabel=%L&year=%Y&country=%O&info_url=%U1&img_url=%U2&time=%h&duration=%S -- ----- -- -- setup -- @@ -43,15 +44,21 @@ app:match("/spl/:station", function(self) print("This is: " .. station["name"]) end - local artist_name = self.params.artist - local track_name = self.params.track - -- local track_length = self.params.length + local artist = nil + local artist_name = self.params.artist_name + + local track = nil + local track_name = self.params.track_name local track_info_url = self.params.info_url local track_img_url = self.params.img_url - local release_name = self.params.release + local track_duration = self.params.duration + + local release = nil + local release_name = self.params.release_name local release_year = self.params.year local release_country = self.params.country - local label_name = self.params.label + local release_label = self.params.label + local airtime_spl = self.params.time -- we have to split the `hr:min:sec` string from SPL @@ -62,7 +69,7 @@ app:match("/spl/:station", function(self) end return result end - + local split_airtime = Split(airtime_spl, ":") 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} @@ -72,7 +79,7 @@ app:match("/spl/:station", function(self) -- queries -- -- ------- -- - local artist = models.Artists:find({ name = artist_name }) + artist = models.Artists:find({ name = artist_name }) if not artist then print("new artist: " .. artist_name) artist = models.Artists:create({ @@ -82,25 +89,58 @@ app:match("/spl/:station", function(self) print("old artist.") end - local track = models.Tracks:find({ unique_name = track_name:lower() }) + -- make a unique name/identifier for the track using a combination of artist_name and track_name + -- in lower-case and spaces removed + local unique_track_name = artist_name + track_name + unique_track_name = unique_track_name:lower() + unique_track_name = unique_track_name:gsub("%s+", "") + + track = models.Tracks:find({ unique_name = unique_track_name }) if not track then print("new track: " .. track_name) track = models.Tracks:create({ name = track_name, - unique_name = track_name:lower() + unique_name = unique_track_name, + year = release_year, + info_url = track_info_url, + img_url = track_img_url }) else print("old track.") end - - -- airtime + -- airtime local airtime = models.Airtimes:create({ airtime = db.format_date(airtime_stamp), tracks = track["id"], stations = station["id"] }) + if release_name.len() > 0 then + release = models.Releases:find({ name = release_name }) + if not release then + print("new release: " .. release_name) + release = models.Releases:create({ + name = release_name, + year = release_year, + country = release_country, + label = release_label + }) + + else + print("old release.") + end + + local track_release = models.TrackReleases:find({ track = track, release = release }) + if not track_release then + track_release = models.TrackReleases:create({ track = track, release = release }) + end + + else + print("no release, skipping") + end + + end) diff --git a/code/migrations.lua b/code/migrations.lua index 56f00f0..6e121a5 100644 --- a/code/migrations.lua +++ b/code/migrations.lua @@ -16,9 +16,9 @@ return { {"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 })} + {"date", types.date({ null=true }) }, + {"bio", types.text({ null=true }) }, + {"urls", types.text({ null=true }) } }) create_index("artists", "name") @@ -29,13 +29,12 @@ return { {"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}, + {"year", types.integer({ null=true }) }, + {"info_url", types.varchar({ null=true }) }, + {"img_url", types.varchar({ null=true }) }, }) create_index("tracks", "unique_name", { unique=true }) - + -- track_artists schema.create_table("track_artists", { {"id", types.serial, { unique=true, primary_key=true }}, @@ -45,7 +44,7 @@ return { {"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 }}, @@ -55,28 +54,28 @@ return { {"name", types.varchar}, }) create_index("stations", "station", "name", { unique=true }) - + db.insert("stations", { created_at = os.date(), updated_at = os.date(), station = 1, name = "Cybernetic Broadcasting System" }) - + db.insert("stations", { created_at = os.date(), updated_at = os.date(), station = 2, name = "Disco Fetish" }) - + db.insert("stations", { created_at = os.date(), updated_at = os.date(), station = 3, name = "The Dream Machine" }) - + -- airtime schema.create_table("airtimes", { {"id", types.serial, { unique=true, primary_key=true }}, @@ -86,37 +85,37 @@ return { {"tracks", types.foreign_key}, {"stations", types.foreign_key}, }) - create_index("airtimes", "airtime", "tracks", "stations", { 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 }) - + -- releases + schema.create_table("releases", { + {"id", types.serial, { unique=true, primary_key=true }}, + {"created_at", types.time}, + {"updated_at", types.time}, + {"name", types.varchar}, + {"label", types.varchar({ null=true }) }, + {"year", types.integer({ null=true }) }, + {"country", types.varchar({ null=true }) }, + }) + create_index("releases", "name", "releaseid", { unique = true }) + + -- 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 }) + -- -- labels -- 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}, + -- {"date", types.date({ null=true }) }}, -- }) -- create_index("labels", "name", { unique = true }) @@ -158,11 +157,11 @@ return { create_index("users", "email", { unique = true }) -- favorite_tracks - -- favorite_mixes -- favorite_artists -- favorite_releases -- favorite_labels + -- favorite_mixes end -} \ No newline at end of file +}