71 lines
1.7 KiB
Lua
71 lines
1.7 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 Artisthandler(self)
|
|
local artist_id = self.params.artist
|
|
|
|
local artist = models.Artists:find({ id = artist_id })
|
|
if not artist 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
|
|
artist[field] = nil
|
|
end
|
|
|
|
local tracks = db.query([[
|
|
SELECT track.name AS track_name, track.id
|
|
FROM track_artists
|
|
INNER JOIN
|
|
tracks AS track ON (track_artists.track = track.id)
|
|
WHERE track_artists.artist = ?
|
|
]], artist["id"])
|
|
|
|
artist["tracks"] = tracks
|
|
|
|
for i, track in ipairs(tracks) do
|
|
local airtimes = db.query([[
|
|
SELECT airtime
|
|
FROM airtimes
|
|
WHERE track = ?
|
|
]], track["id"])
|
|
|
|
artist["tracks"][i]["airtimes"] = {}
|
|
for j, airtime in ipairs(airtimes) do
|
|
table.insert(artist["tracks"][i]["airtimes"], airtime['airtime'])
|
|
end
|
|
|
|
local releases = db.query([[
|
|
SELECT 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"])
|
|
|
|
artist["tracks"][i]["releases"] = {}
|
|
for k, release in ipairs(releases) do
|
|
print(to_json(release))
|
|
table.insert(artist["tracks"][i]["releases"], release)
|
|
end
|
|
|
|
end
|
|
|
|
return { json = artist }
|
|
|
|
end
|
|
|
|
return Artisthandler
|