2012-11-12 12:59:43 +00:00
class ApiUsersController < ApiController
2012-10-14 02:22:13 +00:00
2012-11-14 05:37:50 +00:00
before_filter :api_signed_in_user , only : [ :index , :show , :edit , :update , :delete ,
2012-10-15 12:46:51 +00:00
:friend_request_index , :friend_request_show ,
:friend_request_create , :friend_request_update ,
2012-10-14 04:29:49 +00:00
:friend_index , :friend_destroy ]
2012-10-14 02:22:13 +00:00
respond_to :json
def index
2012-11-12 12:59:43 +00:00
# don't return users that aren't yet confirmed
@users = User . where ( 'email_confirmed=TRUE' ) . paginate ( page : params [ :page ] )
2012-10-14 02:22:13 +00:00
end
2012-10-15 12:46:51 +00:00
def show
2012-11-12 12:59:43 +00:00
# don't return users that aren't yet confirmed
@user = User . where ( 'email_confirmed=TRUE' ) . find ( params [ :id ] )
2012-10-15 12:46:51 +00:00
end
2012-11-14 05:37:50 +00:00
# this API call is disabled by virtue of it being commented out in routes.rb
# the reason is that it has no captcha, and is therefore a bit abuseable
# if someone wants to use it, please add in captcha or some other bot-protector
2012-10-14 02:22:13 +00:00
def create
2012-11-14 05:37:50 +00:00
# sends email to email account for confirmation
@user = UserManager . new . signup ( params [ :name ] ,
params [ :email ] ,
params [ :password ] ,
params [ :password_confirmation ] ,
params [ :city ] ,
params [ :state ] ,
params [ :country ] ,
params [ :instruments ] ,
ApplicationHelper . base_uri ( request ) + " /confirm " )
# check for errors
unless @user . errors . any?
render :json = > { } , :status = > :ok # an empty response, but 200 OK
else
response . status = :unprocessable_entity
respond_with @user , responder : ApiResponder
2012-11-12 12:59:43 +00:00
end
end
def signup_confirm
2012-11-14 05:37:50 +00:00
@user = UserManager . new . signup_confirm ( params [ :signup_token ] )
2012-11-12 12:59:43 +00:00
2012-11-14 05:37:50 +00:00
unless @user . errors . any?
respond_with @user , responder : ApiResponder , :location = > api_user_detail_url ( @user )
else
response . status = :unprocessable_entity
respond_with @user , responder : ApiResponder
2012-11-03 19:32:57 +00:00
end
2012-10-14 02:22:13 +00:00
end
2012-10-29 10:46:24 +00:00
def update
2012-11-03 13:54:24 +00:00
@user = User . save ( params )
2012-11-03 19:32:57 +00:00
# check for errors
if @user . errors . nil? || @user . errors . size == 0
respond_with @user , responder : ApiResponder , :status = > :ok
else
raise ActiveRecord :: Rollback
response . status = :unprocessable_entity
respond_with @user
end
2012-10-29 10:46:24 +00:00
end
2012-10-14 02:22:13 +00:00
def delete
@user = User . find ( params [ :id ] )
2012-11-07 13:36:00 +00:00
@user . destroy # required to make 'tire' integration work
2012-10-14 02:22:13 +00:00
respond_with @user , responder : ApiResponder
end
2012-11-04 13:34:59 +00:00
# FOLLOWERS
def follower_index
# NOTE: follower_index.rabl template references the followers property
@user = User . find ( params [ :id ] )
end
# FOLLOWINGS
def following_index
@user = User . find ( params [ :id ] )
2012-11-06 12:15:02 +00:00
# TODO: get band followings and merge (@user.band_followings)
2012-11-04 13:34:59 +00:00
end
def following_create
2012-11-06 12:15:02 +00:00
if ! params [ :user_id ] . nil?
@follower = UserFollower . new ( )
@follower . user_id = params [ :user_id ]
@follower . follower_id = params [ :id ]
elsif ! params [ :band_id ] . nil?
@follower = BandFollower . new ( )
@follower . band_id = params [ :band_id ]
@follower . follower_id = params [ :id ]
end
@follower . save
@user = User . find ( params [ :id ] )
respond_with @user , responder : ApiResponder , :location = > api_following_index_url ( @user )
2012-11-04 13:34:59 +00:00
end
def following_destroy
2012-11-06 12:15:02 +00:00
JamRuby :: UserFollower . delete_all " (user_id = ' #{ params [ :user_id ] } ' AND follower_id = ' #{ params [ :id ] } ') "
2012-11-10 13:26:10 +00:00
#JamRuby::BandFollower.delete_all "(band_id = '#{params[:band_id]}' AND follower_id = '#{params[:id]}')"
2012-11-06 12:15:02 +00:00
respond_with responder : ApiResponder
2012-11-04 13:34:59 +00:00
end
# FRIENDS
2012-10-14 02:22:13 +00:00
def friend_request_index
2012-10-15 12:46:51 +00:00
# get all outgoing and incoming friend requests
@friend_requests = FriendRequest . where ( " (friend_id=' #{ params [ :id ] } ' OR user_id=' #{ params [ :id ] } ') AND accepted is null " )
2012-10-14 02:22:13 +00:00
end
2012-10-15 12:46:51 +00:00
def friend_request_show
@friend_request = FriendRequest . find ( params [ :id ] )
2012-10-14 02:22:13 +00:00
end
2012-10-15 12:46:51 +00:00
def friend_request_create
@friend_request = FriendRequest . new ( )
@friend_request . user_id = params [ :user_id ]
@friend_request . friend_id = params [ :friend_id ]
@friend_request . save
respond_with @friend_request , responder : ApiResponder , :location = > api_friend_request_detail_url ( @friend_request )
2012-10-14 02:22:13 +00:00
end
2012-10-14 04:29:49 +00:00
def friend_request_update
2012-10-25 00:18:26 +00:00
ActiveRecord :: Base . transaction do
@friend_request = FriendRequest . find ( params [ :id ] )
@friend_request . accepted = params [ :accepted ]
@friend_request . save
# create both records for this friendship
if @friend_request . accepted?
@friendship = Friendship . new ( )
@friendship . user_id = @friend_request . user_id
@friendship . friend_id = @friend_request . friend_id
@friendship . save
@friendship = Friendship . new ( )
@friendship . user_id = @friend_request . friend_id
@friendship . friend_id = @friend_request . user_id
@friendship . save
end
2012-10-15 12:46:51 +00:00
end
respond_with @friend_request , responder : ApiResponder
2012-10-14 02:22:13 +00:00
end
2012-10-14 04:29:49 +00:00
def friend_index
# NOTE: friend_index.rabl template references the friends property
@user = User . find ( params [ :id ] )
2012-10-14 02:22:13 +00:00
end
def friend_destroy
2012-10-15 12:46:51 +00:00
# clean up both records representing this "friendship"
2012-10-14 04:29:49 +00:00
JamRuby :: Friendship . delete_all " (user_id = ' #{ params [ :id ] } ' AND friend_id = ' #{ params [ :friend_id ] } ') OR (user_id = ' #{ params [ :friend_id ] } ' AND friend_id = ' #{ params [ :id ] } ') "
2012-10-15 12:46:51 +00:00
respond_with responder : ApiResponder
2012-10-14 02:22:13 +00:00
end
2012-11-14 05:37:50 +00:00
def auth_session_create
@user = User . authenticate ( params [ :email ] , params [ :password ] )
if @user . nil?
render :json = > { :success = > false } , :status = > 404
else
sign_in @user
render :json = > { :success = > true } , :status = > 200
end
end
def auth_session_delete
sign_out
render :json = > { :success = > true } , :status = > 200
end
2012-10-14 02:22:13 +00:00
end