refactoring and redesign; first trials with api; model not functional yet
This commit is contained in:
parent
ee0e517c34
commit
a3cbd71fa3
74
code/app.lua
74
code/app.lua
@ -1,12 +1,86 @@
|
|||||||
local lapis = require("lapis")
|
local lapis = require("lapis")
|
||||||
local config = require("lapis.config").get()
|
local config = require("lapis.config").get()
|
||||||
|
local to_json = require("lapis.util").to_json
|
||||||
local models = require("models")
|
local models = require("models")
|
||||||
|
|
||||||
|
-- print("models has type: " .. type(models))
|
||||||
|
-- print(to_json(models))
|
||||||
|
|
||||||
local app = lapis.Application()
|
local app = lapis.Application()
|
||||||
|
|
||||||
app:get("/", function()
|
app:get("/", function()
|
||||||
-- return "Welcome to Lapis " .. require("lapis.version")
|
-- return "Welcome to Lapis " .. require("lapis.version")
|
||||||
return config.greeting .. " from port " .. config.postgres.password
|
return config.greeting .. " from port " .. config.postgres.password
|
||||||
|
|
||||||
|
end)
|
||||||
|
|
||||||
|
app:match("/station/", function(self)
|
||||||
|
-- print( to_json(self.params))
|
||||||
|
|
||||||
|
-- artist=%a&
|
||||||
|
-- track=%t&
|
||||||
|
-- release=%T
|
||||||
|
-- label=%L&
|
||||||
|
-- year=%Y&
|
||||||
|
-- country=%O&
|
||||||
|
-- info_url=%U1&
|
||||||
|
-- img_url=%U2&
|
||||||
|
-- time=%h&
|
||||||
|
|
||||||
|
-- artist=%a&track=%t&release=%Tlabel=%L&year=%Y&country=%O&info_url=%U1&img_url=%U2&time=%h&
|
||||||
|
|
||||||
|
-- ----- --
|
||||||
|
-- setup --
|
||||||
|
-- ----- --
|
||||||
|
|
||||||
|
local artist_name = self.params.artist
|
||||||
|
local track_name = self.params.track
|
||||||
|
-- local track_length = self.params.length
|
||||||
|
local track_info_url = self.params.info_url
|
||||||
|
local track_img_url = self.params.img_url
|
||||||
|
local release_name = self.params.release
|
||||||
|
local release_year = self.params.year
|
||||||
|
local release_country = self.params.country
|
||||||
|
local label_name = self.params.label
|
||||||
|
local airtime = self.params.time
|
||||||
|
|
||||||
|
-- we have to split the `hr:min:sec` string from SPL
|
||||||
|
local function Split(s, delimiter)
|
||||||
|
local result = {}
|
||||||
|
for match in (s..delimiter):gmatch("(.-)"..delimiter) do
|
||||||
|
table.insert(result, match)
|
||||||
|
end
|
||||||
|
return result
|
||||||
|
end
|
||||||
|
|
||||||
|
local split_airtime = Split(airtime, ":")
|
||||||
|
local airtime_hr, airtime_min, airtime_sec = split_airtime[1], split_airtime[2], split_airtime[3]
|
||||||
|
local airtime_stamp = os.time{year=os.date("%Y"), month=os.date("%m"), day=os.date("%d"), hour=airtime_hr, min=airtime_min, sec=airtime_sec}
|
||||||
|
|
||||||
|
|
||||||
|
-- ------- --
|
||||||
|
-- queries --
|
||||||
|
-- ------- --
|
||||||
|
|
||||||
|
-- local artist = models.Artists:select("where name = ?", artist_name)
|
||||||
|
|
||||||
|
-- if not artist then
|
||||||
|
-- print("new artist!")
|
||||||
|
-- artist = models.Artists:create({
|
||||||
|
-- name = artist_name
|
||||||
|
-- })
|
||||||
|
-- else
|
||||||
|
-- print("old artist.")
|
||||||
|
-- end
|
||||||
|
|
||||||
|
-- local track = models.Tracks:select("where name = ?", track_name)
|
||||||
|
|
||||||
|
-- if track == nil then
|
||||||
|
-- track = models.Tracks:create({
|
||||||
|
-- name = track_name
|
||||||
|
-- })
|
||||||
|
-- end
|
||||||
|
|
||||||
end)
|
end)
|
||||||
|
|
||||||
return app
|
return app
|
||||||
|
|||||||
@ -5,6 +5,6 @@ config("development", {
|
|||||||
host = "postgres",
|
host = "postgres",
|
||||||
user = "postgres",
|
user = "postgres",
|
||||||
password = "the_password",
|
password = "the_password",
|
||||||
database = "my_database"
|
database = "postgres"
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|||||||
146
code/migrations.lua
Normal file
146
code/migrations.lua
Normal file
@ -0,0 +1,146 @@
|
|||||||
|
local schema = require("lapis.db.schema")
|
||||||
|
|
||||||
|
local types = schema.types
|
||||||
|
local create_index = schema.create_index
|
||||||
|
|
||||||
|
return {
|
||||||
|
[1600494396] = function()
|
||||||
|
-- ----------- --
|
||||||
|
-- Track stuff --
|
||||||
|
-- ----------- --
|
||||||
|
|
||||||
|
-- artists
|
||||||
|
schema.create_table("artists", {
|
||||||
|
{"id", types.serial, { unique=true, primary_key=true }},
|
||||||
|
{"created_at", types.time},
|
||||||
|
{"updated_at", types.time},
|
||||||
|
{"name", types.varchar, { unique=true }},
|
||||||
|
{"date", types.date({ null = true })},
|
||||||
|
{"bio", types.text({ null = true })},
|
||||||
|
{"urls", types.text({ null = true })}
|
||||||
|
})
|
||||||
|
create_index("artists", "name")
|
||||||
|
|
||||||
|
-- tracks
|
||||||
|
schema.create_table("tracks", {
|
||||||
|
{"id", types.serial, { unique=true, primary_key=true }},
|
||||||
|
{"created_at", types.time},
|
||||||
|
{"updated_at", types.time},
|
||||||
|
{"name", types.varchar},
|
||||||
|
{"unique_name", types.varchar},
|
||||||
|
{"year", types.integer({ null = true }) }
|
||||||
|
-- ("artist", types.foreign_key),
|
||||||
|
-- {"releases", types.foreign_key},
|
||||||
|
-- {"mixes", types.foreign_key},
|
||||||
|
})
|
||||||
|
create_index("tracks", "unique_name", { unique=true })
|
||||||
|
|
||||||
|
-- track_artists
|
||||||
|
schema.create_table("track_artists", {
|
||||||
|
{"id", types.serial, { unique=true, primary_key=true }},
|
||||||
|
{"created_at", types.time},
|
||||||
|
{"updated_at", types.time},
|
||||||
|
{"track", types.foreign_key},
|
||||||
|
{"artist", types.foreign_key}
|
||||||
|
})
|
||||||
|
create_index("track_artists", "track", "artist", { unique=true })
|
||||||
|
|
||||||
|
|
||||||
|
-- stations
|
||||||
|
schema.create_table("stations", {
|
||||||
|
{"id", types.serial, { unique=true, primary_key=true }},
|
||||||
|
{"created_at", types.time},
|
||||||
|
{"updated_at", types.time},
|
||||||
|
{"station", types.integer},
|
||||||
|
{"name", types.varchar},
|
||||||
|
})
|
||||||
|
create_index("stations", "station", "name", { unique=true })
|
||||||
|
|
||||||
|
-- airtime
|
||||||
|
schema.create_table("airtimes", {
|
||||||
|
{"id", types.serial, { unique=true, primary_key=true }},
|
||||||
|
{"created_at", types.time},
|
||||||
|
{"updated_at", types.time},
|
||||||
|
{"airtime", types.time},
|
||||||
|
{"track", types.foreign_key},
|
||||||
|
{"station", types.foreign_key},
|
||||||
|
})
|
||||||
|
create_index("airtimes", "airtime", "track", "station", { unique=true })
|
||||||
|
|
||||||
|
|
||||||
|
-- -- releases
|
||||||
|
-- schema.create_table("releases", {
|
||||||
|
-- {"id", types.serial, { unique=true, primary_key=true }},
|
||||||
|
-- {"created_at", types.time},
|
||||||
|
-- {"updated_at", types.time},
|
||||||
|
-- {"name", types.varchar},
|
||||||
|
-- {"releaseid", types.varchar},
|
||||||
|
-- {"date", types.date},
|
||||||
|
-- })
|
||||||
|
-- create_index("releases", "name", "releaseid", { unique = true })
|
||||||
|
-- labels
|
||||||
|
|
||||||
|
-- -- track_releases
|
||||||
|
-- schema.create_table("track_releases", {
|
||||||
|
-- {"id", types.serial, { unique=true, primary_key=true }},
|
||||||
|
-- {"created_at", types.time},
|
||||||
|
-- {"updated_at", types.time},
|
||||||
|
-- {"track", types.foreign_key},
|
||||||
|
-- {"release", types.foreign_key}
|
||||||
|
-- })
|
||||||
|
-- create_index("track_releases", "track", "release", { unique=true })
|
||||||
|
|
||||||
|
-- schema.create_table("labels", {
|
||||||
|
-- {"id", types.serial, { unique=true, primary_key=true }},
|
||||||
|
-- {"created_at", types.time},
|
||||||
|
-- {"updated_at", types.time},
|
||||||
|
-- {"name", types.varchar},
|
||||||
|
-- {"date", types.date},
|
||||||
|
-- })
|
||||||
|
-- create_index("labels", "name", { unique = true })
|
||||||
|
|
||||||
|
-- schema.create_table("release_labels", {
|
||||||
|
-- {"id", types.serial, { unique=true, primary_key=true }},
|
||||||
|
-- {"created_at", types.time},
|
||||||
|
-- {"updated_at", types.time},
|
||||||
|
-- {"release", types.foreign_key},
|
||||||
|
-- {"label", types.foreign_key}
|
||||||
|
-- })
|
||||||
|
-- create_index("release_labels", "release", "label", { unique=true })
|
||||||
|
|
||||||
|
-- -- mixes
|
||||||
|
-- schema.create_table("mixes", {
|
||||||
|
-- {"id", types.serial, { unique=true, primary_key=true }},
|
||||||
|
-- {"created_at", types.time},
|
||||||
|
-- {"updated_at", types.time},
|
||||||
|
-- {"name", types.varchar},
|
||||||
|
-- {"date", types.date}
|
||||||
|
-- })
|
||||||
|
-- create_index("mixes", "name", "date", { unique = true })
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
-- ---------- --
|
||||||
|
-- User stuff --
|
||||||
|
-- ---------- --
|
||||||
|
|
||||||
|
-- users
|
||||||
|
schema.create_table("users", {
|
||||||
|
{"id", types.serial, { unique=true, primary_key=true }},
|
||||||
|
{"created_at", types.time},
|
||||||
|
{"updated_at", types.time},
|
||||||
|
{"email", types.varchar},
|
||||||
|
{"name", types.varchar},
|
||||||
|
{"password", types.varchar},
|
||||||
|
{"last_login", types.time},
|
||||||
|
})
|
||||||
|
create_index("users", "email", { unique = true })
|
||||||
|
|
||||||
|
-- favorite_tracks
|
||||||
|
-- favorite_mixes
|
||||||
|
-- favorite_artists
|
||||||
|
-- favorite_releases
|
||||||
|
-- favorite_labels
|
||||||
|
|
||||||
|
end
|
||||||
|
}
|
||||||
@ -1,4 +1,3 @@
|
|||||||
local autoload = require("lapis.util").autoload
|
|
||||||
local Model = require("lapis.db.model").Model
|
local Model = require("lapis.db.model").Model
|
||||||
|
|
||||||
-- ----------- --
|
-- ----------- --
|
||||||
@ -24,10 +23,10 @@ local Tracks = Model:extend("tracks", {
|
|||||||
})
|
})
|
||||||
|
|
||||||
-- track_artists
|
-- track_artists
|
||||||
local TrackArtists = Model:extern("track_artists", {
|
local TrackArtists = Model:extend("track_artists", {
|
||||||
timestamp = true,
|
timestamp = true,
|
||||||
relations = {
|
relations = {
|
||||||
{"track", belongs_to = "Tracks"}
|
{"track", belongs_to = "Tracks"},
|
||||||
{"artist", belongs_to = "Artists"}
|
{"artist", belongs_to = "Artists"}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
@ -101,7 +100,7 @@ local Airtime = Model:extend("airtimes", {
|
|||||||
|
|
||||||
--users
|
--users
|
||||||
-- name/email/password/last_login
|
-- name/email/password/last_login
|
||||||
local Users = Model:extend("users",
|
local Users = Model:extend("users", {
|
||||||
timestamp = true
|
timestamp = true
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -118,5 +117,3 @@ local Users = Model:extend("users",
|
|||||||
-- local Favorite_artists = Model:extend("favorite_artists", {})
|
-- local Favorite_artists = Model:extend("favorite_artists", {})
|
||||||
-- local Favorite_releases = Model:extend("favorite_releases", {})
|
-- local Favorite_releases = Model:extend("favorite_releases", {})
|
||||||
-- local Favorite_labels = Model:extend("favorite_labels", {})
|
-- local Favorite_labels = Model:extend("favorite_labels", {})
|
||||||
|
|
||||||
return autoload("models")
|
|
||||||
|
|||||||
141
code/schemas.lua
141
code/schemas.lua
@ -1,141 +0,0 @@
|
|||||||
local schema = require("lapis.db.schema")
|
|
||||||
|
|
||||||
local types = schema.types
|
|
||||||
local create_index = schema.create_index
|
|
||||||
|
|
||||||
-- ----------- --
|
|
||||||
-- Track stuff --
|
|
||||||
-- ----------- --
|
|
||||||
|
|
||||||
-- artists
|
|
||||||
schema.create_table("artists", {
|
|
||||||
{"id", types.serial, { unique=true, primary_key=true }},
|
|
||||||
{"created_at", types.time},
|
|
||||||
{"updated_at", types.time},
|
|
||||||
{"name", types.varchar},
|
|
||||||
{"date", types.date({ null = true })},
|
|
||||||
{"bio", types.text({ null = true })},
|
|
||||||
{"urls", types.text({ null = true })}
|
|
||||||
})
|
|
||||||
create_index("artists", "name")
|
|
||||||
|
|
||||||
-- tracks
|
|
||||||
schema.create_table("tracks", {
|
|
||||||
{"id", types.serial, { unique=true, primary_key=true }},
|
|
||||||
{"created_at", types.time},
|
|
||||||
{"updated_at", types.time},
|
|
||||||
{"name", types.varchar},
|
|
||||||
{"unique_name", types.varchar},
|
|
||||||
{"date", types.date({ null = true })},
|
|
||||||
-- ("artist", types.foreign_key),
|
|
||||||
-- {"releases", types.foreign_key},
|
|
||||||
-- {"mixes", types.foreign_key},
|
|
||||||
})
|
|
||||||
create_index("tracks", "unique_name", { unique=true })
|
|
||||||
|
|
||||||
-- track_artists
|
|
||||||
schema.create_table("track_artists", {
|
|
||||||
{"id", types.serial, { unique=true, primary_key=true }},
|
|
||||||
{"created_at", types.time},
|
|
||||||
{"updated_at", types.time},
|
|
||||||
{"track", types.foreign_key}
|
|
||||||
{"artist", types.foreign_key},
|
|
||||||
})
|
|
||||||
create_index("track_artists", "track", "artist", { unique=true })
|
|
||||||
|
|
||||||
|
|
||||||
-- stations
|
|
||||||
schema.create_table("stations", {
|
|
||||||
{"id", types.serial, { unique=true, primary_key=true }},
|
|
||||||
{"created_at", types.time},
|
|
||||||
{"updated_at", types.time},
|
|
||||||
{"station", types.integer},
|
|
||||||
{"name", types.varchar},
|
|
||||||
})
|
|
||||||
create_index("stations", "station", "name", { unique=true })
|
|
||||||
|
|
||||||
-- airtime
|
|
||||||
schema.create_table("airtimes", {
|
|
||||||
{"id", types.serial, { unique=true, primary_key=true }},
|
|
||||||
{"created_at", types.time},
|
|
||||||
{"updated_at", types.time},
|
|
||||||
{"airtime", types.time},
|
|
||||||
{"track", types.foreign_key},
|
|
||||||
{"station", types.foreign_key},
|
|
||||||
})
|
|
||||||
create_index("airtimes", "airtime", "track", "station", { unique=true })
|
|
||||||
|
|
||||||
|
|
||||||
-- -- releases
|
|
||||||
-- schema.create_table("releases", {
|
|
||||||
-- {"id", types.serial, { unique=true, primary_key=true }},
|
|
||||||
-- {"created_at", types.time},
|
|
||||||
-- {"updated_at", types.time},
|
|
||||||
-- {"name", types.varchar},
|
|
||||||
-- {"releaseid", types.varchar},
|
|
||||||
-- {"date", types.date},
|
|
||||||
-- })
|
|
||||||
-- create_index("releases", "name", "releaseid", { unique = true })
|
|
||||||
-- labels
|
|
||||||
|
|
||||||
-- -- track_releases
|
|
||||||
-- schema.create_table("track_releases", {
|
|
||||||
-- {"id", types.serial, { unique=true, primary_key=true }},
|
|
||||||
-- {"created_at", types.time},
|
|
||||||
-- {"updated_at", types.time},
|
|
||||||
-- {"track", types.foreign_key},
|
|
||||||
-- {"release", types.foreign_key}
|
|
||||||
-- })
|
|
||||||
-- create_index("track_releases", "track", "release", { unique=true })
|
|
||||||
|
|
||||||
-- schema.create_table("labels", {
|
|
||||||
-- {"id", types.serial, { unique=true, primary_key=true }},
|
|
||||||
-- {"created_at", types.time},
|
|
||||||
-- {"updated_at", types.time},
|
|
||||||
-- {"name", types.varchar},
|
|
||||||
-- {"date", types.date},
|
|
||||||
-- })
|
|
||||||
-- create_index("labels", "name", { unique = true })
|
|
||||||
|
|
||||||
-- schema.create_table("release_labels", {
|
|
||||||
-- {"id", types.serial, { unique=true, primary_key=true }},
|
|
||||||
-- {"created_at", types.time},
|
|
||||||
-- {"updated_at", types.time},
|
|
||||||
-- {"release", types.foreign_key},
|
|
||||||
-- {"label", types.foreign_key}
|
|
||||||
-- })
|
|
||||||
-- create_index("release_labels", "release", "label", { unique=true })
|
|
||||||
|
|
||||||
-- -- mixes
|
|
||||||
-- schema.create_table("mixes", {
|
|
||||||
-- {"id", types.serial, { unique=true, primary_key=true }},
|
|
||||||
-- {"created_at", types.time},
|
|
||||||
-- {"updated_at", types.time},
|
|
||||||
-- {"name", types.varchar},
|
|
||||||
-- {"date", types.date}
|
|
||||||
-- })
|
|
||||||
-- create_index("mixes", "name", "date", { unique = true })
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
-- ---------- --
|
|
||||||
-- User stuff --
|
|
||||||
-- ---------- --
|
|
||||||
|
|
||||||
-- users
|
|
||||||
schema.create_table("users", {
|
|
||||||
{"id", types.serial, { unique=true, primary_key=true }},
|
|
||||||
{"created_at", types.time},
|
|
||||||
{"updated_at", types.time},
|
|
||||||
{"email", types.varchar},
|
|
||||||
{"name", types.varchar},
|
|
||||||
{"password", types.varchar},
|
|
||||||
{"last_login", types.time},
|
|
||||||
})
|
|
||||||
create_index("users", "email", { unique = true })
|
|
||||||
|
|
||||||
-- favorite_tracks
|
|
||||||
-- favorite_mixes
|
|
||||||
-- favorite_artists
|
|
||||||
-- favorite_releases
|
|
||||||
-- favorite_labels
|
|
||||||
Loading…
Reference in New Issue
Block a user