84 lines
2.2 KiB
Lua
84 lines
2.2 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 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
|