crystal-gauntlet/src/lib/creator_points.cr

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