feature/share-libs
bak 125 lines 2.9 KB
Raw
1 module Api
2 module V1
3 class UserController < ApplicationController
4 skip_before_action :verify_authenticity_token
5
6 def login
7 username = params[:username]
8 password = params[:password]
9 find_user
10 if @user && @user.valid_password?(params[:password])
11 render json: {
12 code: 200,
13 message: 'OK.',
14 user: @user
15 }
16 else
17 render_error 'Invalid credentials.'
18 end
19 end
20
21 def register
22 name = params[:name]
23 email = params[:email]
24 password = params[:password]
25
26 unless !name.nil? && !name.empty? && !email.nil? && !email.empty? && !password.nil? && !password.empty?
27 render_error 'Please fill name, email, and password.'
28 return
29 end
30
31 user = User.new(
32 name: name,
33 email: email,
34 password: password
35 )
36
37 if user.save
38 # Deliver the signup email.
39 UserNotifierMailer.send_signup_email(user).deliver
40
41 render json: {
42 code: 200,
43 message: 'OK',
44 user: user
45 }
46 else
47 # Get Devise proper error response.
48 render_error 'Something wrong with the registration process. Try again later.'
49 end
50 end
51
52 def profile
53 find_user
54 if @user
55 render json: {
56 code: 200,
57 message: 'OK.',
58 user: @user.as_json_packed
59 }
60 else
61 render_error 'Unknown user.'
62 end
63 end
64
65 def following
66 find_user
67 if @user
68 render json: {
69 code: 200,
70 message: 'OK.',
71 user: @user.as_json_packed,
72 following: @user.following.map(&:as_json_packed)
73 }
74 else
75 render_error 'Unknown user.'
76 end
77 end
78
79 def followers
80 find_user
81 if @user
82 render json: {
83 code: 200,
84 message: 'OK.',
85 user: @user.as_json_packed,
86 followers: @user.followers.map(&:as_json_packed)
87 }
88 else
89 render_error 'Unknown user.'
90 end
91 end
92
93 def community
94 username_to_exclude = params[:exclude]
95
96 users = User.all.order(created_at: :asc)
97 result = users.select{ |user| user.username != username_to_exclude}
98
99 if users
100 render json: {
101 code: 200,
102 message: 'OK.',
103 users: result.map(&:as_json_packed)
104 }
105 else
106 render_error 'Unknown error.'
107 end
108 end
109
110 private
111
112 def find_user
113 username = params[:username]
114 @user = User.find_by(username: username.downcase) || User.find_by(id: username.downcase)
115 end
116
117 def render_error(message)
118 render json: {
119 code: 500,
120 message: message
121 }
122 end
123 end
124 end
125 end