some improvements

This commit is contained in:
dreamer 2020-09-22 08:33:59 +02:00
parent 5bb78d1366
commit 4ec3e7a26a
2 changed files with 92 additions and 53 deletions

View File

@ -18,17 +18,18 @@ end)
app:match("/spl/:station", function(self) app:match("/spl/:station", function(self)
-- print( to_json(self.params)) -- print( to_json(self.params))
-- artist=%a& -- artist_name=%a&
-- track=%t& -- track_name=%t&
-- release=%T -- release_name=%T
-- label=%L& -- label=%L&
-- year=%Y& -- year=%Y&
-- country=%O& -- country=%O&
-- info_url=%U1& -- info_url=%U1&
-- img_url=%U2& -- img_url=%U2&
-- time=%h& -- time=%h&
-- duration=%S
-- artist=%a&track=%t&release=%Tlabel=%L&year=%Y&country=%O&info_url=%U1&img_url=%U2&time=%h& -- artist_name=%a&track_name=%t&release_name=%Tlabel=%L&year=%Y&country=%O&info_url=%U1&img_url=%U2&time=%h&duration=%S
-- ----- -- -- ----- --
-- setup -- -- setup --
@ -43,15 +44,21 @@ app:match("/spl/:station", function(self)
print("This is: " .. station["name"]) print("This is: " .. station["name"])
end end
local artist_name = self.params.artist local artist = nil
local track_name = self.params.track local artist_name = self.params.artist_name
-- local track_length = self.params.length
local track = nil
local track_name = self.params.track_name
local track_info_url = self.params.info_url local track_info_url = self.params.info_url
local track_img_url = self.params.img_url local track_img_url = self.params.img_url
local release_name = self.params.release local track_duration = self.params.duration
local release = nil
local release_name = self.params.release_name
local release_year = self.params.year local release_year = self.params.year
local release_country = self.params.country local release_country = self.params.country
local label_name = self.params.label local release_label = self.params.label
local airtime_spl = self.params.time local airtime_spl = self.params.time
-- we have to split the `hr:min:sec` string from SPL -- we have to split the `hr:min:sec` string from SPL
@ -62,7 +69,7 @@ app:match("/spl/:station", function(self)
end end
return result return result
end end
local split_airtime = Split(airtime_spl, ":") local split_airtime = Split(airtime_spl, ":")
local airtime_hr, airtime_min, airtime_sec = split_airtime[1], split_airtime[2], split_airtime[3] 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} 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}
@ -72,7 +79,7 @@ app:match("/spl/:station", function(self)
-- queries -- -- queries --
-- ------- -- -- ------- --
local artist = models.Artists:find({ name = artist_name }) artist = models.Artists:find({ name = artist_name })
if not artist then if not artist then
print("new artist: " .. artist_name) print("new artist: " .. artist_name)
artist = models.Artists:create({ artist = models.Artists:create({
@ -82,25 +89,58 @@ app:match("/spl/:station", function(self)
print("old artist.") print("old artist.")
end end
local track = models.Tracks:find({ unique_name = track_name:lower() }) -- make a unique name/identifier for the track using a combination of artist_name and track_name
-- in lower-case and spaces removed
local unique_track_name = artist_name + track_name
unique_track_name = unique_track_name:lower()
unique_track_name = unique_track_name:gsub("%s+", "")
track = models.Tracks:find({ unique_name = unique_track_name })
if not track then if not track then
print("new track: " .. track_name) print("new track: " .. track_name)
track = models.Tracks:create({ track = models.Tracks:create({
name = track_name, name = track_name,
unique_name = track_name:lower() unique_name = unique_track_name,
year = release_year,
info_url = track_info_url,
img_url = track_img_url
}) })
else else
print("old track.") print("old track.")
end end
-- airtime
-- airtime
local airtime = models.Airtimes:create({ local airtime = models.Airtimes:create({
airtime = db.format_date(airtime_stamp), airtime = db.format_date(airtime_stamp),
tracks = track["id"], tracks = track["id"],
stations = station["id"] stations = station["id"]
}) })
if release_name.len() > 0 then
release = models.Releases:find({ name = release_name })
if not release then
print("new release: " .. release_name)
release = models.Releases:create({
name = release_name,
year = release_year,
country = release_country,
label = release_label
})
else
print("old release.")
end
local track_release = models.TrackReleases:find({ track = track, release = release })
if not track_release then
track_release = models.TrackReleases:create({ track = track, release = release })
end
else
print("no release, skipping")
end
end) end)

View File

@ -16,9 +16,9 @@ return {
{"created_at", types.time}, {"created_at", types.time},
{"updated_at", types.time}, {"updated_at", types.time},
{"name", types.varchar, { unique=true }}, {"name", types.varchar, { unique=true }},
{"date", types.date({ null = true })}, {"date", types.date({ null=true }) },
{"bio", types.text({ null = true })}, {"bio", types.text({ null=true }) },
{"urls", types.text({ null = true })} {"urls", types.text({ null=true }) }
}) })
create_index("artists", "name") create_index("artists", "name")
@ -29,13 +29,12 @@ return {
{"updated_at", types.time}, {"updated_at", types.time},
{"name", types.varchar}, {"name", types.varchar},
{"unique_name", types.varchar}, {"unique_name", types.varchar},
{"year", types.integer({ null = true }) } {"year", types.integer({ null=true }) },
-- ("artist", types.foreign_key), {"info_url", types.varchar({ null=true }) },
-- {"releases", types.foreign_key}, {"img_url", types.varchar({ null=true }) },
-- {"mixes", types.foreign_key},
}) })
create_index("tracks", "unique_name", { unique=true }) create_index("tracks", "unique_name", { unique=true })
-- track_artists -- track_artists
schema.create_table("track_artists", { schema.create_table("track_artists", {
{"id", types.serial, { unique=true, primary_key=true }}, {"id", types.serial, { unique=true, primary_key=true }},
@ -45,7 +44,7 @@ return {
{"artist", types.foreign_key} {"artist", types.foreign_key}
}) })
create_index("track_artists", "track", "artist", { unique=true }) create_index("track_artists", "track", "artist", { unique=true })
-- stations -- stations
schema.create_table("stations", { schema.create_table("stations", {
{"id", types.serial, { unique=true, primary_key=true }}, {"id", types.serial, { unique=true, primary_key=true }},
@ -55,28 +54,28 @@ return {
{"name", types.varchar}, {"name", types.varchar},
}) })
create_index("stations", "station", "name", { unique=true }) create_index("stations", "station", "name", { unique=true })
db.insert("stations", { db.insert("stations", {
created_at = os.date(), created_at = os.date(),
updated_at = os.date(), updated_at = os.date(),
station = 1, station = 1,
name = "Cybernetic Broadcasting System" name = "Cybernetic Broadcasting System"
}) })
db.insert("stations", { db.insert("stations", {
created_at = os.date(), created_at = os.date(),
updated_at = os.date(), updated_at = os.date(),
station = 2, station = 2,
name = "Disco Fetish" name = "Disco Fetish"
}) })
db.insert("stations", { db.insert("stations", {
created_at = os.date(), created_at = os.date(),
updated_at = os.date(), updated_at = os.date(),
station = 3, station = 3,
name = "The Dream Machine" name = "The Dream Machine"
}) })
-- airtime -- airtime
schema.create_table("airtimes", { schema.create_table("airtimes", {
{"id", types.serial, { unique=true, primary_key=true }}, {"id", types.serial, { unique=true, primary_key=true }},
@ -86,37 +85,37 @@ return {
{"tracks", types.foreign_key}, {"tracks", types.foreign_key},
{"stations", types.foreign_key}, {"stations", types.foreign_key},
}) })
create_index("airtimes", "airtime", "tracks", "stations", { unique=true }) create_index("airtimes", "airtime", "tracks", "stations", { 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 -- releases
-- schema.create_table("track_releases", { schema.create_table("releases", {
-- {"id", types.serial, { unique=true, primary_key=true }}, {"id", types.serial, { unique=true, primary_key=true }},
-- {"created_at", types.time}, {"created_at", types.time},
-- {"updated_at", types.time}, {"updated_at", types.time},
-- {"track", types.foreign_key}, {"name", types.varchar},
-- {"release", types.foreign_key} {"label", types.varchar({ null=true }) },
-- }) {"year", types.integer({ null=true }) },
-- create_index("track_releases", "track", "release", { unique=true }) {"country", types.varchar({ null=true }) },
})
create_index("releases", "name", "releaseid", { unique = true })
-- 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 })
-- -- labels -- -- labels
-- schema.create_table("labels", { -- schema.create_table("labels", {
-- {"id", types.serial, { unique=true, primary_key=true }}, -- {"id", types.serial, { unique=true, primary_key=true }},
-- {"created_at", types.time}, -- {"created_at", types.time},
-- {"updated_at", types.time}, -- {"updated_at", types.time},
-- {"name", types.varchar}, -- {"name", types.varchar},
-- {"date", types.date}, -- {"date", types.date({ null=true }) }},
-- }) -- })
-- create_index("labels", "name", { unique = true }) -- create_index("labels", "name", { unique = true })
@ -158,11 +157,11 @@ return {
create_index("users", "email", { unique = true }) create_index("users", "email", { unique = true })
-- favorite_tracks -- favorite_tracks
-- favorite_mixes
-- favorite_artists -- favorite_artists
-- favorite_releases -- favorite_releases
-- favorite_labels -- favorite_labels
-- favorite_mixes
end end
} }