diff --git a/code/handlers/releasehandler.lua b/code/handlers/releasehandler.lua new file mode 100644 index 0000000..90c2713 --- /dev/null +++ b/code/handlers/releasehandler.lua @@ -0,0 +1,59 @@ +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 + + local tracks = db.query([[ + SELECT track.name AS track_name, track.id, release.name AS release_name + FROM track_releases + INNER JOIN + tracks AS track ON (track_releases.track = track.id) + INNER JOIN + track_releases AS track_release ON (track_release.track = track.id) + INNER JOIN + releases AS release ON (track_release.release = release.id) + WHERE track_releases.release = ? + ]], release["id"]) + + release["tracks"] = tracks + + for i, track in ipairs(tracks) do + local airtimes = db.query([[ + SELECT airtime + FROM airtimes + WHERE track = ? + ]], track["id"]) + + release["tracks"][i]["airtimes"] = {} + for j, airtime in ipairs(airtimes) do + table.insert(release["tracks"][i]["airtimes"], airtime['airtime']) + end + end + + return { json = release } + +end + +return Releasehandler