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 json = self.params.json or nil 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 -- get all tracks on this release local tracks = db.query([[ SELECT track.name AS track_name, track.id AS track_id, track.img_url, artist.name AS artist_name, artist.id AS artist_id FROM track_releases INNER JOIN tracks AS track ON (track_releases.track = track.id) INNER JOIN track_artists AS track_artist ON (track_artist.track = track.id) INNER JOIN artists AS artist ON (track_artist.artist = artist.id) WHERE track_releases.release = ? ]], release["id"]) release["tracks"] = tracks -- find all airtimes for each track local total_airtimes = 0 local last_airtime = "" for i, track in ipairs(tracks) do local track_airtimes = 0 track["last_airtime"] = "" local airtimes = db.query([[ SELECT airtime, station AS station_id FROM airtimes WHERE track = ? ]], track["track_id"]) -- this can probably be done in SQL directly for j, airtime in ipairs(airtimes) do track_airtimes = track_airtimes + 1 total_airtimes = total_airtimes + 1 if airtime.airtime > last_airtime then last_airtime = airtime.airtime end if airtime.airtime > track["last_airtime"] then track["last_airtime"] = airtime.airtime end end release["tracks"][i]["track_airtimes"] = track_airtimes end release["total_airtimes"] = total_airtimes release["last_airtime"] = last_airtime if json then return { json = release } end self.release = release return { render = "release" } end return Releasehandler