diff --git a/code/app.lua b/code/app.lua index 83503f6..ebdc12d 100644 --- a/code/app.lua +++ b/code/app.lua @@ -29,4 +29,8 @@ app:match("artist", "/artist/:artist", json_params(function(self) return handlers.Artisthandler(self) end)) +app:match("release", "/release/:release", json_params(function(self) + return handlers.Releasehandler(self) +end)) + return app diff --git a/code/handlers/artisthandler.lua b/code/handlers/artisthandler.lua index 414d369..42caba3 100644 --- a/code/handlers/artisthandler.lua +++ b/code/handlers/artisthandler.lua @@ -12,6 +12,7 @@ local function Artisthandler(self) local artist = models.Artists:find({ id = artist_id }) if not artist then self:write({"Not Found", status = 404}) + return end local hidden_fields = { @@ -25,7 +26,7 @@ local function Artisthandler(self) end local tracks = db.query([[ - SELECT track.name AS track_name, release.name AS release_name + SELECT track.name AS track_name, track.id, release.name AS release_name FROM track_artists INNER JOIN tracks AS track ON (track_artists.track = track.id) @@ -36,19 +37,20 @@ local function Artisthandler(self) WHERE track_artists.artist = ? ]], artist["id"]) - artist["tracks"] = tracks --- local airtimes = db.query([[ --- SELECT airtime --- FROM airtimes --- WHERE track = ? --- ]], track["id"]) + for i, track in ipairs(tracks) do + local airtimes = db.query([[ + SELECT airtime + FROM airtimes + WHERE track = ? + ]], track["id"]) --- artist["airtimes"] = {} --- for i, airtime in ipairs(airtimes) do --- artist["airtimes"][i] = airtime.airtime --- end + artist["tracks"][i]["airtimes"] = {} + for j, airtime in ipairs(airtimes) do + table.insert(artist["tracks"][i]["airtimes"], airtime['airtime']) + end + end return { json = artist } diff --git a/code/handlers/releasehandler.lua b/code/handlers/releasehandler.lua new file mode 100644 index 0000000..bc5a8c7 --- /dev/null +++ b/code/handlers/releasehandler.lua @@ -0,0 +1,55 @@ +local db = require("lapis.db") +local to_json = require("lapis.util").to_json +local autoload = require("lapis.util").autoload +local preload = require("lapis.db.model").preload + +local models = autoload("models") + + +local function Releasehandler(self) + local release_id = self.params.release + + local release = models.releases:find({ id = release_id }) + if not release then + self:write({"Not Found", status = 404}) + return + end + + local hidden_fields = { + "unique_name", + "created_at", + "updated_at" + } + + for i, field in ipairs(hidden_fields) do + release[field] = nil + end + + local tracks = db.query([[ + SELECT track.name AS track_name, track.id + FROM track_releases + INNER JOIN + tracks AS track ON (track_releases.track = track.id) + WHERE track_releases.release = ? + ]], release["id"]) + + release["tracks"] = tracks + + for i, track in ipairs(tracks) do + local airtimes = db.query([[ + SELECT airtime + FROM airtimes + WHERE track = ? + ]], track["id"]) + + release["tracks"][i]["airtimes"] = {} + for j, airtime in ipairs(airtimes) do + table.insert(release["tracks"][i]["airtimes"], airtime['airtime']) + end + end + + return { json = release } + +end + +return Releasehandler diff --git a/code/handlers/trackhandler.lua b/code/handlers/trackhandler.lua index 4cfc1e5..b21ffce 100644 --- a/code/handlers/trackhandler.lua +++ b/code/handlers/trackhandler.lua @@ -12,6 +12,7 @@ local function Trackhandler(self) local track = models.Tracks:find({ id = track_id }) if not track then self:write({"Not Found", status = 404}) + return end local hidden_fields = { diff --git a/code/views/station.etlua b/code/views/station.etlua index 4f326ee..a0dfdb0 100644 --- a/code/views/station.etlua +++ b/code/views/station.etlua @@ -20,7 +20,7 @@
- <% if item.release then %><%= item.release %><% end %> + <% if item.release then %>" style="color: #ffffff; text-decoration: none;"><%= item.release %><% end %> <% if item.label then %>| <%= item.label %><% end %> <% if item.year then %>| <%= item.year %><% end %> <% if item.country then %>| <%= item.country %><% end %>