PreviouslyOnIFM/code/handlers/releasehandler.lua

69 lines
1.8 KiB
Lua

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
-- get all tracks on this release
local tracks = db.query([[
SELECT track.name AS track_name, track.id, artist.name AS artist_name
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
for i, track in ipairs(tracks) do
local track_airtimes = 0
local airtimes = db.query([[
SELECT airtime, station AS station_id
FROM airtimes
WHERE track = ?
]], track["id"])
release["tracks"][i]["airtimes"] = {}
for j, airtime in ipairs(airtimes) do
table.insert(release["tracks"][i]["airtimes"], airtime)
track_airtimes = track_airtimes + 1
total_airtimes = total_airtimes + 1
end
release["tracks"][i]["track_airtimes"] = track_airtimes
end
release["total_airtimes"] = total_airtimes
return { json = release }
end
return Releasehandler