make mappack impl work with >3 mappacks
This commit is contained in:
parent
92cfd710c9
commit
69d9c5aee7
|
@ -16,12 +16,14 @@ CrystalGauntlet.endpoints["/getGJLevels21.php"] = ->(body : String): String {
|
||||||
queryParams = [] of String
|
queryParams = [] of String
|
||||||
# order by [...]
|
# order by [...]
|
||||||
order = "levels.created_at desc"
|
order = "levels.created_at desc"
|
||||||
|
# joins go here
|
||||||
|
joins = [] of String
|
||||||
|
|
||||||
page_offset = (params["page"]? || "0").to_i * levels_per_page
|
page_offset = (params["page"]? || "0").to_i * levels_per_page
|
||||||
|
|
||||||
searchQuery = params["str"]? || ""
|
searchQuery = params["str"]? || ""
|
||||||
|
|
||||||
if searchQuery != "" && params["type"] != "5"
|
if searchQuery != "" && params["type"] != "5" && params["type"] != "10" && params["type"] != "19"
|
||||||
if searchQuery.to_i?
|
if searchQuery.to_i?
|
||||||
# we do this to get rid of the initial "unlisted = 0" bit
|
# we do this to get rid of the initial "unlisted = 0" bit
|
||||||
can_see_unlisted = true
|
can_see_unlisted = true
|
||||||
|
@ -145,6 +147,7 @@ CrystalGauntlet.endpoints["/getGJLevels21.php"] = ->(body : String): String {
|
||||||
when "10", "19" # map packs
|
when "10", "19" # map packs
|
||||||
order = "map_pack_links.idx asc"
|
order = "map_pack_links.idx asc"
|
||||||
queryParams << "levels.id in (#{searchQuery.split(",").map{|v| v.to_i}.join(",")})"
|
queryParams << "levels.id in (#{searchQuery.split(",").map{|v| v.to_i}.join(",")})"
|
||||||
|
joins << "left join map_pack_links on map_pack_links.level_id = levels.id"
|
||||||
when "11" # rated
|
when "11" # rated
|
||||||
# todo: order by rate date
|
# todo: order by rate date
|
||||||
queryParams << "levels.stars is not null"
|
queryParams << "levels.stars is not null"
|
||||||
|
@ -166,7 +169,7 @@ CrystalGauntlet.endpoints["/getGJLevels21.php"] = ->(body : String): String {
|
||||||
|
|
||||||
where_str = "where (#{queryParams.join(") and (")})"
|
where_str = "where (#{queryParams.join(") and (")})"
|
||||||
# todo: switch join users to left join to avoid losing levels to the shadow realm after a user vanishes
|
# todo: switch join users to left join to avoid losing levels to the shadow realm after a user vanishes
|
||||||
query_base = "from levels join users on levels.user_id = users.id left join map_pack_links on map_pack_links.level_id = levels.id #{where_str} order by #{order}"
|
query_base = "from levels join users on levels.user_id = users.id #{joins.join(" ")} #{where_str} order by #{order}"
|
||||||
|
|
||||||
LOG.debug { "query: #{query_base}" }
|
LOG.debug { "query: #{query_base}" }
|
||||||
|
|
||||||
|
|
|
@ -11,60 +11,66 @@ CrystalGauntlet.endpoints["/getGJMapPacks21.php"] = ->(body : String): String {
|
||||||
LOG.debug { params.inspect }
|
LOG.debug { params.inspect }
|
||||||
|
|
||||||
page = params["page"].to_i32
|
page = params["page"].to_i32
|
||||||
properties = Hash(Int32, Hash(String, String)).new
|
map_pack_hash = Hash(Int32, Hash(String, String)).new
|
||||||
levels = Hash(Int32, Array(Int32)).new
|
levels = Hash(Int32, Array(Int32)).new
|
||||||
|
|
||||||
DATABASE.query("select map_packs.id, map_packs.name, map_packs.stars, map_packs.coins, map_packs.difficulty, map_packs.col1, map_packs.col2, map_pack_links.level_id from map_packs join map_pack_links on map_packs.id = map_pack_links.mappack_id order by map_pack_links.idx limit #{mappacks_per_page} offset #{page * mappacks_per_page} group by map_packs.id") do |rs|
|
DATABASE.query_each("select map_packs.id, map_packs.name, map_packs.stars, map_packs.coins, map_packs.difficulty, map_packs.col1, map_packs.col2, map_pack_links.level_id from map_packs join map_pack_links on map_packs.id = map_pack_links.mappack_id order by map_packs.id, map_pack_links.idx") do |rs|
|
||||||
rs.each do
|
id = rs.read(Int32)
|
||||||
id = rs.read(Int32)
|
name = rs.read(String)
|
||||||
name = rs.read(String)
|
stars = rs.read(Int32)
|
||||||
stars = rs.read(Int32)
|
coins = rs.read(Int32)
|
||||||
coins = rs.read(Int32)
|
difficulty = rs.read(Int32)
|
||||||
difficulty = rs.read(Int32)
|
col1 = rs.read(String)
|
||||||
col1 = rs.read(String)
|
col2 = rs.read(String | Nil)
|
||||||
col2 = rs.read(String | Nil)
|
level_id = rs.read(Int32)
|
||||||
level_id = rs.read(Int32)
|
|
||||||
|
|
||||||
if !col2
|
if !col2
|
||||||
col2 = col1
|
col2 = col1
|
||||||
end
|
end
|
||||||
|
|
||||||
if !properties.has_key?(id)
|
if !map_pack_hash.has_key?(id)
|
||||||
properties[id] = {
|
map_pack_hash[id] = {
|
||||||
"name" => name,
|
"name" => name,
|
||||||
"stars" => stars.to_s,
|
"stars" => stars.to_s,
|
||||||
"coins" => coins.to_s,
|
"coins" => coins.to_s,
|
||||||
"difficulty" => difficulty.to_s,
|
"difficulty" => difficulty.to_s,
|
||||||
"col1" => col1,
|
"col1" => col1,
|
||||||
"col2" => col2
|
"col2" => col2
|
||||||
}
|
}
|
||||||
end
|
end
|
||||||
|
|
||||||
if !levels.has_key?(id)
|
if !levels.has_key?(id)
|
||||||
levels[id] = [ level_id ]
|
levels[id] = [ level_id ]
|
||||||
else
|
else
|
||||||
levels[id] << level_id
|
levels[id] << level_id
|
||||||
end
|
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
map_packs = [] of String
|
map_packs = [] of String
|
||||||
hash_data = [] of Tuple(Int32, Int32, Int32)
|
hash_data = [] of Tuple(Int32, Int32, Int32)
|
||||||
|
|
||||||
#"1:".$mappack["ID"].":2:".$mappack["name"].":3:".$mappack["levels"].":4:".$mappack["stars"].":5:".$mappack["coins"].":6:".$mappack["difficulty"].":7:".$mappack["rgbcolors"].":8:".$colors2."|";
|
min_idx = page * mappacks_per_page
|
||||||
properties.each_key do |id|
|
max_idx = min_idx + mappacks_per_page - 1
|
||||||
map_packs << Format.fmt_hash({
|
|
||||||
1 => id,
|
|
||||||
2 => properties[id]["name"],
|
|
||||||
3 => levels[id].join(","),
|
|
||||||
4 => properties[id]["stars"],
|
|
||||||
5 => properties[id]["coins"],
|
|
||||||
6 => properties[id]["difficulty"],
|
|
||||||
7 => properties[id]["col1"],
|
|
||||||
8 => properties[id]["col2"]
|
|
||||||
})
|
|
||||||
|
|
||||||
hash_data << { id, properties[id]["stars"].to_i32, properties[id]["coins"].to_i32 }
|
#"1:".$mappack["ID"].":2:".$mappack["name"].":3:".$mappack["levels"].":4:".$mappack["stars"].":5:".$mappack["coins"].":6:".$mappack["difficulty"].":7:".$mappack["rgbcolors"].":8:".$colors2."|";
|
||||||
|
idx = 0
|
||||||
|
map_pack_hash.each_key do |id|
|
||||||
|
if idx >= min_idx && idx <= max_idx
|
||||||
|
map_packs << Format.fmt_hash({
|
||||||
|
1 => id,
|
||||||
|
2 => map_pack_hash[id]["name"],
|
||||||
|
3 => levels[id].join(","),
|
||||||
|
4 => map_pack_hash[id]["stars"],
|
||||||
|
5 => map_pack_hash[id]["coins"],
|
||||||
|
6 => map_pack_hash[id]["difficulty"],
|
||||||
|
7 => map_pack_hash[id]["col1"],
|
||||||
|
8 => map_pack_hash[id]["col2"]
|
||||||
|
})
|
||||||
|
|
||||||
|
hash_data << { id, map_pack_hash[id]["stars"].to_i32, map_pack_hash[id]["coins"].to_i32 }
|
||||||
|
end
|
||||||
|
|
||||||
|
idx += 1
|
||||||
end
|
end
|
||||||
|
|
||||||
total_count = DATABASE.scalar "select count(*) from map_packs"
|
total_count = DATABASE.scalar "select count(*) from map_packs"
|
||||||
|
|
Loading…
Reference in New Issue