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 Trackhandler(self) local track_id = self.params.track local track = models.Tracks:find({ id = track_id }) if not track 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 track[field] = nil end -- find the artist for this track local artists = db.query([[ SELECT artist.name AS artist_name FROM track_artists INNER JOIN artists AS artist ON (track_artists.artist = artist.id) WHERE track_artists.track = ? ]], track["id"]) track["artist"] = artists[1]["artist_name"] -- find all airtimes for this track local track_airtimes = 0 local airtimes = db.query([[ SELECT airtime, station AS station_id FROM airtimes WHERE track = ? ]], track["id"]) track["airtimes"] = {} for i, airtime in ipairs(airtimes) do track["airtimes"][i] = airtime track_airtimes = track_airtimes + 1 end track["total_airtimes"] = track_airtimes -- find all releases for this track local releases = db.query([[ SELECT release.id AS release_id, release.name AS release_name FROM track_releases INNER JOIN releases AS release ON (track_releases.release = release.id) WHERE track = ? ]], track["id"]) track["releases"] = {} for i, release in ipairs(releases) do track["releases"][i] = release end return { json = track } end return Trackhandler