2019-04-18 04:05:33 +00:00
|
|
|
lapis = require "lapis"
|
|
|
|
console = require "lapis.console"
|
|
|
|
|
|
|
|
import respond_to from require "lapis.application"
|
|
|
|
import Tracks from require "models"
|
|
|
|
|
|
|
|
class extends lapis.Application
|
|
|
|
"/console": console.make!
|
|
|
|
|
2019-04-18 05:17:56 +00:00
|
|
|
-- TODO figure out why [%u] character class does not work
|
2019-04-18 05:17:04 +00:00
|
|
|
[tracks: "/tracks(/:order[%a])(/:asc_desc)(/:page[%d])"]: =>
|
2019-04-18 05:08:09 +00:00
|
|
|
-- validate order field
|
2019-04-18 05:32:55 +00:00
|
|
|
@order = tostring(@params.order)\lower!
|
|
|
|
unless Tracks.fields[@order]
|
|
|
|
@order = "id"
|
|
|
|
-- validate ascending/descending (ascending default)
|
2019-04-18 05:08:09 +00:00
|
|
|
@asc_desc = tostring(@params.asc_desc)\upper!
|
2019-04-18 05:32:55 +00:00
|
|
|
if @asc_desc != "DESC" and @asc_desc != "ASC"
|
|
|
|
@asc_desc = "ASC"
|
2019-04-18 05:08:09 +00:00
|
|
|
@page = tonumber(@params.page) or 1
|
|
|
|
|
2019-04-18 05:17:04 +00:00
|
|
|
tracks = Tracks\paginated "* ORDER BY #{@order} #{@asc_desc}", per_page: 32
|
|
|
|
-- @last_page = tracks\num_pages! -- TODO figure out why this errors
|
|
|
|
@last_page = 150
|
2019-04-18 05:08:09 +00:00
|
|
|
-- validate page
|
|
|
|
if @page < 1
|
|
|
|
return redirect_to: @url_for "tracks", order: @order, asc_desc: @asc_desc, page: 1
|
|
|
|
if @page > @last_page
|
|
|
|
return redirect_to: @url_for "tracks", order: @order, asc_desc: @asc_desc, page: @last_page
|
2019-04-18 05:32:55 +00:00
|
|
|
|
2019-04-18 05:08:09 +00:00
|
|
|
@tracks = tracks\get_page @page
|
|
|
|
return render: true
|
|
|
|
|
2019-04-18 04:05:33 +00:00
|
|
|
[index: "/(:page[%d])"]: respond_to {
|
|
|
|
GET: =>
|
|
|
|
tracks = Tracks\paginated "* ORDER BY id", per_page: 32
|
|
|
|
@page = tonumber(@params.page) or 1
|
|
|
|
@tracks = tracks\get_page @page
|
|
|
|
render: true
|
|
|
|
POST: =>
|
|
|
|
if @params.id
|
|
|
|
track = Tracks\find id: @params.id
|
|
|
|
track\update {
|
|
|
|
artist: @params.artist
|
|
|
|
name: @params.name
|
|
|
|
url: @params.url
|
|
|
|
status: tonumber @params.status
|
|
|
|
}
|
|
|
|
else
|
|
|
|
Tracks\create {
|
|
|
|
artist: @params.artist
|
|
|
|
name: @params.name
|
|
|
|
url: @params.url
|
|
|
|
status: @params.status
|
|
|
|
}
|
|
|
|
redirect_to: @url_for "index", page: @params.page
|
|
|
|
}
|