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 config = require("lapis.config").get()
|
||||
local to_json = require("lapis.util").to_json
|
||||
local models = require("models")
|
||||
|
||||
-- print("models has type: " .. type(models))
|
||||
-- print(to_json(models))
|
||||
|
||||
local app = lapis.Application()
|
||||
|
||||
app:get("/", function()
|
||||
-- return "Welcome to Lapis " .. require("lapis.version")
|
||||
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)
|
||||
|
||||
return app
|
||||
|
||||
@ -5,6 +5,6 @@ config("development", {
|
||||
host = "postgres",
|
||||
user = "postgres",
|
||||
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
|
||||
|
||||
-- ----------- --
|
||||
@ -24,10 +23,10 @@ local Tracks = Model:extend("tracks", {
|
||||
})
|
||||
|
||||
-- track_artists
|
||||
local TrackArtists = Model:extern("track_artists", {
|
||||
local TrackArtists = Model:extend("track_artists", {
|
||||
timestamp = true,
|
||||
relations = {
|
||||
{"track", belongs_to = "Tracks"}
|
||||
{"track", belongs_to = "Tracks"},
|
||||
{"artist", belongs_to = "Artists"}
|
||||
}
|
||||
})
|
||||
@ -101,7 +100,7 @@ local Airtime = Model:extend("airtimes", {
|
||||
|
||||
--users
|
||||
-- name/email/password/last_login
|
||||
local Users = Model:extend("users",
|
||||
local Users = Model:extend("users", {
|
||||
timestamp = true
|
||||
})
|
||||
|
||||
@ -118,5 +117,3 @@ local Users = Model:extend("users",
|
||||
-- local Favorite_artists = Model:extend("favorite_artists", {})
|
||||
-- local Favorite_releases = Model:extend("favorite_releases", {})
|
||||
-- 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