1
0
mirror of https://github.com/LaCasemate/fab-manager.git synced 2025-01-18 07:52:23 +01:00

refactor User.as_json to use jbuilder template

This commit is contained in:
Sylvain 2018-07-04 14:05:44 +02:00
parent b3f5edd1a5
commit 7afe62522f
4 changed files with 70 additions and 125 deletions

View File

@ -74,72 +74,13 @@ class User < ActiveRecord::Base
scope :without_subscription, -> { includes(:subscriptions).where(subscriptions: { user_id: nil }) }
scope :with_subscription, -> { joins(:subscriptions) }
def to_builder
Jbuilder.new do |json|
json.id id
json.username username
json.email email
json.role roles.first.name
json.group_id group_id
json.name profile.full_name
json.need_completion need_completion?
json.profile do
json.user_avatar do
json.id profile.user_avatar.id
json.attachment_url profile.user_avatar.attachment_url
end if profile.user_avatar
json.first_name profile.first_name
json.last_name profile.last_name
json.gender profile.gender.to_s
json.birthday profile.birthday.iso8601 if profile.birthday
json.interest profile.interest
json.software_mastered profile.software_mastered
json.address profile.address.address if profile.address
json.phone profile.phone
end
json.subscribed_plan do
json.id subscribed_plan.id
json.name subscribed_plan.name
json.base_name subscribed_plan.base_name
json.amount (subscribed_plan.amount / 100.0)
json.interval subscribed_plan.interval
json.interval_count subscribed_plan.interval_count
json.training_credit_nb subscribed_plan.training_credit_nb
json.training_credits subscribed_plan.training_credits do |tc|
json.training_id tc.creditable_id
end
json.machine_credits subscribed_plan.machine_credits do |mc|
json.machine_id mc.creditable_id
json.hours mc.hours
end
end if subscribed_plan
json.subscription do
json.id subscription.id
json.expired_at subscription.expired_at.iso8601
json.canceled_at subscription.canceled_at.iso8601 if subscription.canceled_at
json.stripe subscription.stp_subscription_id.present?
json.plan do
json.id subscription.plan.id
json.base_name subscription.plan.base_name
json.name subscription.plan.name
json.interval subscription.plan.interval
json.interval_count subscription.plan.interval_count
json.amount subscription.plan.amount ? (subscription.plan.amount / 100.0) : 0
end
end if subscription
json.training_credits training_credits do |tc|
json.training_id tc.creditable_id
end
json.machine_credits machine_credits do |mc|
json.machine_id mc.creditable_id
json.hours_used mc.users_credits.find_by(user_id: id).hours_used
end
json.last_sign_in_at last_sign_in_at.iso8601 if last_sign_in_at
end
end
def to_json(options)
to_builder.target!
def as_json
ApplicationController.new.view_context.render(
partial: 'api/members/member',
locals: { :member => self },
formats: [:json],
handlers: [:jbuilder]
)
end
def self.admins

View File

@ -0,0 +1,59 @@
json.extract! member, :id, :username, :email, :group_id
json.role member.roles.first.name
json.name member.profile.full_name
json.need_completion member.need_completion?
json.profile do
json.id member.profile.id
json.user_avatar do
json.id member.profile.user_avatar.id
json.attachment_url member.profile.user_avatar.attachment_url
end if member.profile.user_avatar
json.first_name member.profile.first_name
json.last_name member.profile.last_name
json.gender member.profile.gender.to_s
json.birthday member.profile.birthday.to_date.iso8601 if member.profile.birthday
json.interest member.profile.interest
json.software_mastered member.profile.software_mastered
json.address do
json.id member.profile.address.id
json.address member.profile.address.address
end if member.profile.address
json.phone member.profile.phone
json.website member.profile.website
json.job member.profile.job
json.extract! member.profile, :facebook, :twitter, :google_plus, :viadeo, :linkedin, :instagram, :youtube, :vimeo, :dailymotion, :github, :echosciences, :pinterest, :lastfm, :flickr
json.organization do
json.id member.profile.organization.id
json.name member.profile.organization.name
json.address do
json.id member.profile.organization.address.id
json.address member.profile.organization.address.address
end if member.profile.organization.address
end if member.profile.organization
end
json.subscribed_plan do
json.partial! 'api/shared/plan', plan: member.subscribed_plan
end if member.subscribed_plan
json.subscription do
json.id member.subscription.id
json.expired_at member.subscription.expired_at.iso8601
json.canceled_at member.subscription.canceled_at.iso8601 if member.subscription.canceled_at
json.stripe member.subscription.stp_subscription_id.present?
json.plan do
json.id member.subscription.plan.id
json.base_name member.subscription.plan.base_name
json.name member.subscription.plan.name
json.interval member.subscription.plan.interval
json.interval_count member.subscription.plan.interval_count
json.amount member.subscription.plan.amount ? (member.subscription.plan.amount / 100.0) : 0
end
end if member.subscription
json.training_credits member.training_credits do |tc|
json.training_id tc.creditable_id
end
json.machine_credits member.machine_credits do |mc|
json.machine_id mc.creditable_id
json.hours_used mc.users_credits.find_by(user_id: member.id).hours_used
end
json.last_sign_in_at member.last_sign_in_at.iso8601 if member.last_sign_in_at

View File

@ -1,56 +1,8 @@
requested_current = (current_user and current_user.id == @member.id)
json.extract! @member, :id, :uid, :username, :email, :group_id, :slug, :invoicing_disabled, :is_allow_contact, :is_allow_newsletter
json.role @member.roles.first.name
json.name @member.profile.full_name
json.need_completion @member.need_completion?
json.profile do
json.id @member.profile.id
json.user_avatar do
json.id @member.profile.user_avatar.id
json.attachment_url @member.profile.user_avatar.attachment_url
end if @member.profile.user_avatar
json.first_name @member.profile.first_name
json.last_name @member.profile.last_name
json.gender @member.profile.gender.to_s
json.birthday @member.profile.birthday.to_date.iso8601 if @member.profile.birthday
json.interest @member.profile.interest
json.software_mastered @member.profile.software_mastered
json.address do
json.id @member.profile.address.id
json.address @member.profile.address.address
end if @member.profile.address
json.phone @member.profile.phone
json.website @member.profile.website
json.job @member.profile.job
json.extract! @member.profile, :facebook, :twitter, :google_plus, :viadeo, :linkedin, :instagram, :youtube, :vimeo, :dailymotion, :github, :echosciences, :pinterest, :lastfm, :flickr
json.organization do
json.id @member.profile.organization.id
json.name @member.profile.organization.name
json.address do
json.id @member.profile.organization.address.id
json.address @member.profile.organization.address.address
end if @member.profile.organization.address
end if @member.profile.organization
json.partial! 'api/members/member', member: @member
json.extract! @member, :uid, :slug, :invoicing_disabled, :is_allow_contact, :is_allow_newsletter
end
json.subscribed_plan do
json.partial! 'api/shared/plan', plan: @member.subscribed_plan
end if @member.subscribed_plan
json.subscription do
json.id @member.subscription.id
json.expired_at @member.subscription.expired_at.iso8601
json.canceled_at @member.subscription.canceled_at.iso8601 if @member.subscription.canceled_at
json.stripe @member.subscription.stp_subscription_id.present?
json.plan do
json.id @member.subscription.plan.id
json.base_name @member.subscription.plan.base_name
json.name @member.subscription.plan.name
json.interval @member.subscription.plan.interval
json.interval_count @member.subscription.plan.interval_count
json.amount @member.subscription.plan.amount ? (@member.subscription.plan.amount / 100.0) : 0
end
end if @member.subscription
json.training_ids @member.training_ids
json.trainings @member.trainings do |t|
json.id t.id
@ -64,14 +16,7 @@ json.training_reservations @member.reservations.where(reservable_type: 'Training
json.is_valid @member.training_ids.include?(r.reservable_id)
json.canceled_at r.slots.first.canceled_at
end
json.training_credits @member.training_credits do |tc|
json.training_id tc.creditable_id
end
json.machine_credits @member.machine_credits do |mc|
json.machine_id mc.creditable_id
json.hours_used mc.users_credits.find_by(user_id: @member.id).hours_used
end
json.last_sign_in_at @member.last_sign_in_at.iso8601 if @member.last_sign_in_at
json.all_projects @member.all_projects do |project|
if requested_current || project.state == 'published'
json.extract! project, :id, :name, :description, :author_id, :licence_id, :slug, :state

View File

@ -77,7 +77,7 @@
<![endif]-->
</head>
<body ng-controller="ApplicationController" ng-init="setCurrentUser(<%= current_user ? current_user.to_builder.target! : 'null' %>)" ng-cloak>
<body ng-controller="ApplicationController" ng-init="setCurrentUser(<%= current_user ? current_user.as_json : 'null' %>)" ng-cloak>
<div growl></div>
<%= flash_messages %>