49 lines
1.3 KiB
Ruby
49 lines
1.3 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module Api
|
|
module V1
|
|
class CrewBlueprint < ApiBlueprint
|
|
fields :name, :gamertag, :granblue_crew_id, :description, :created_at
|
|
|
|
view :minimal do
|
|
fields :name, :gamertag
|
|
end
|
|
|
|
view :full do
|
|
fields :name, :gamertag, :granblue_crew_id, :description, :created_at
|
|
|
|
field :member_count do |crew|
|
|
crew.active_memberships.count
|
|
end
|
|
|
|
field :captain do |crew|
|
|
captain = crew.captain
|
|
UserBlueprint.render_as_hash(captain, view: :minimal) if captain
|
|
end
|
|
|
|
field :vice_captains do |crew|
|
|
UserBlueprint.render_as_hash(crew.vice_captains, view: :minimal)
|
|
end
|
|
|
|
field :current_membership do |crew, options|
|
|
current_user = options[:current_user]
|
|
next nil unless current_user
|
|
|
|
membership = crew.crew_memberships.find_by(user_id: current_user.id, retired: false)
|
|
CrewMembershipBlueprint.render_as_hash(membership) if membership
|
|
end
|
|
end
|
|
|
|
view :with_members do
|
|
include_view :full
|
|
|
|
field :members do |crew|
|
|
CrewMembershipBlueprint.render_as_hash(
|
|
crew.active_memberships.includes(:user).order(role: :desc, created_at: :asc),
|
|
view: :with_user
|
|
)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|