mirror of
https://github.com/ENSL/ensl.org.git
synced 2024-12-27 21:10:54 +00:00
58 lines
924 B
Ruby
58 lines
924 B
Ruby
class Api::V1::UsersCollection < Api::V1::Collection
|
|
def self.as_json
|
|
self.new.data.to_json
|
|
end
|
|
|
|
def data
|
|
{ users: map_query }
|
|
end
|
|
|
|
private
|
|
|
|
def users_table
|
|
User.arel_table
|
|
end
|
|
|
|
def teams_table
|
|
Team.arel_table
|
|
end
|
|
|
|
def joins
|
|
[
|
|
users_table[:team_id].eq(teams_table[:id])
|
|
]
|
|
end
|
|
|
|
def columns
|
|
[
|
|
users_table[:username],
|
|
users_table[:steamid],
|
|
teams_table[:name],
|
|
teams_table[:tag],
|
|
teams_table[:logo]
|
|
]
|
|
end
|
|
|
|
def arel_query
|
|
users_table
|
|
.project(columns)
|
|
.join(teams_table, Arel::Nodes::OuterJoin)
|
|
.on(joins)
|
|
.where(users_table[:team_id].not_eq(nil))
|
|
.order(users_table[:id])
|
|
end
|
|
|
|
def map_query
|
|
execute_query.map do |row|
|
|
{
|
|
username: row[0],
|
|
steamid: row[1],
|
|
team: {
|
|
name: row[2],
|
|
tag: row[3],
|
|
logo: row[4]
|
|
}
|
|
}
|
|
end
|
|
end
|
|
end
|