26 lines
1.3 KiB
Crystal
26 lines
1.3 KiB
Crystal
module CrystalGauntlet::CreatorPoints
|
|
extend self
|
|
|
|
QUERIES = StaticArray[
|
|
{"select count(*) from levels where user_id = ? and stars is not null", "levels.creator_points.rated"},
|
|
{"select count(*) from levels where user_id = ? and featured = 1", "levels.creator_points.featured"},
|
|
{"select count(*) from levels where user_id = ? and epic = 1", "levels.creator_points.epic"},
|
|
{"select count(*) from daily_levels join levels on levels.id = level_id where levels.user_id = ?", "levels.creator_points.daily"},
|
|
{"select count(*) from weekly_levels join levels on levels.id = level_id where levels.user_id = ?", "levels.creator_points.weekly"},
|
|
{"select count(*) from map_pack_links join levels on levels.id = level_id where levels.user_id = ?", "levels.creator_points.mappack"},
|
|
{"select count(*) from gauntlet_links join levels on levels.id = level_id where levels.user_id = ?", "levels.creator_points.gauntlet"},
|
|
]
|
|
|
|
def calculate_creator_points(user_id : Int32)
|
|
QUERIES
|
|
.map { |q, c| DATABASE.scalar(q, user_id).as(Int64) * config_get(c, 0_i64) }
|
|
.sum()
|
|
end
|
|
|
|
def update_creator_points(user_id : Int32)
|
|
points = calculate_creator_points(user_id)
|
|
DATABASE.exec("update users set creator_points = ? where id = ?", points, user_id)
|
|
return points
|
|
end
|
|
end
|