refactoring and redesign; first trials with api; model not functional yet

This commit is contained in:
dreamer 2020-09-20 02:48:12 +02:00
parent ee0e517c34
commit a3cbd71fa3
5 changed files with 224 additions and 148 deletions

View File

@ -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

View File

@ -5,6 +5,6 @@ config("development", {
host = "postgres",
user = "postgres",
password = "the_password",
database = "my_database"
database = "postgres"
}
})

146
code/migrations.lua Normal file
View 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
}

View File

@ -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")

View File

@ -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