Uh oh!
There was an error while loading. Please reload this page.
- Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathSQLHelper.rb
More file actions
Latest commit
240 lines (218 loc) · 6.11 KB
/
Copy pathSQLHelper.rb
File metadata and controls
240 lines (218 loc) · 6.11 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
require'active_record'# for managing model objects
require_relative'User'
require_relative'Group'
require_relative'Badge'
require_relative'Friend'
# class that handles all I/O for database.
classSQLHelper < ActiveRecord::Migration
SQLUsername='badgeradmin'
SQLPassword='AppBadger1!'
HARD_ERR={:error=>"There was a problem with the API."}
# connect to the SQL database
definitialize
ActiveRecord::Base.establish_connection(
:adapter=>"mysql2",
:host=>"badgerdb.cz2y13cetnjg.us-west-2.rds.amazonaws.com",
:username=>SQLUsername,
:password=>SQLPassword,
:database=>"BadgerDB"
)
end
deffatalError(exception)
putsexception
File.open("log.txt","a")do |f|
f.putsexception
f.putsexception.backtrace
end
returnHARD_ERR
end
defgetFirstUser
user=User.find(1)
user.username
end
defgetUserById(id)
begin
user=User.find(id)
rescueActiveRecord::RecordNotFound
return{:error=>"User not found."}
rescueException=>e
self.fatalErrore
HARD_ERR
else
putsuser.inspect
user.toArray
end
end
# return user info given a username
defgetUserByUsername(name)
begin
user=User.find_byusername: name
ifuser.nil?
return{:error=>"User not found."}
else
user.toArray
end
end
end
# find and authenticate the user with the given credentials
deflogin(name,password)
user=User.find_byusername: name
ifuser.nil?
return{:error=>"No records exist for that username."}
else
ifuser.authenticatepassword
returnuser.toArray
else
return{:error=>"Incorrect password."}
end
end
end
defgetGroupById(id)
begin
group=Group.find(id)
rescueActiveRecord::RecordNotFound
return{:error=>"Group not found."}
rescueException=>e
self.fatalErrore
HARD_ERR
else
group.toArray
end
end
# permanently delete a user from the database
defdeleteUser(id)
user=User.find(id)
rescueActiveRecord::RecordNotFound
return{:error=>"User not found."}
rescueException=>e
self.fatalErrore
HARD_ERR
else
user.destroy# `destroy` checks for dependencies (badges, groups)
return{:response=>"User with id #{id} deleted."}
end
# get the badge object with the given id
defgetBadgeById(id)
begin
badge=Badge.find(id)
rescueActiveRecord::RecordNotFound
return{:error=>"Badge not found."}
rescueException=>e
self.fatalErrore
HARD_ERR
else
badge.toArray
end
end
# create a new user with the given credentials
defcreateUser(name,password,passwordConfirmation,email)
begin
user=User.create!(:username=>name,:password=>password,:email=>email,:password_confirmation=>passwordConfirmation)#throws exception if invalid
rescueActiveRecord::RecordNotUnique=>e
return{:error=>"Username or email already exists."}
rescueActiveRecord::RecordInvalid=>ri
return{:error=>ri}
rescueException=>ex
self.fatalErrorex
HARD_ERR
else
user.toArray
end
end
# add a friend to the given user, also adds in reverse direction
defaddFriend(userId,friendId)
user=User.find(userId)
User.find(friendId)
ifuser.friends.exists?(friendId)
return{:error=>"Users are already friends."}
end
Friend.create(:user_id=>userId,:friend_id=>friendId)
Friend.create(:user_id=>friendId,:friend_id=>userId)
return{:response=>"Success"}
rescueActiveRecord::RecordNotFound
return{:error=>"User and/or friend not found."}
end
# update user with given credentials
defupdateUser(args)
ifargs['id']then
userId=args['id']
user=User.find(userId)
user.update!args
return{:response=>"Record updated."}
else
return{:error=>"'id' is required."}
end
rescueActiveRecord::RecordInvalid=>ri
return{:error=>ri}
rescueException=>e
self.fatalErrore
HARD_ERR
end
defupdateBadge(args)
ifargs['id']then
badgeId=args['id']
badge=Badge.find(badgeId)
puts"ARG: #{args['is_new']}"
badge.update!args
ifargs['recipient_id']then
badge.is_new=true
end
return{:response=>"Record updated."}
else
return{:error=>"'id' is required."}
end
rescueActiveRecord::RecordInvalid=>ri
return{:error=>ri}
rescueException=>e
self.fatalErrore
HARD_ERR
end
# create a new group
defcreateGroup(name,description,adminId)
group=Group.create(:group_name=>name,:group_description=>description,:admin_id=>adminId)
rescueActiveRecord::RecordInvalid=>ri
return{:error=>ri}
rescueException=>e
self.fatalErrore
HARD_ERR
else
group.toArray
end
# create a new badge with given properties
defcreateBadge(imageURL,name,description,authorId)
user=User.find(authorId)
badge=Badge.create(:image_url=>imageURL,:badge_name=>name,:badge_description=>description,:author_id=>user.id)
rescueActiveRecord::RecordInvalid=>ri
return{:error=>ri}
rescueException=>e
self.fatalErrore
HARD_ERR
else
badge.toArray
end
# adds a user to the given group
defaddUserToGroup(userId,groupId)
user=User.find(userId)
group=Group.find(groupId)
user.groups << group
rescueActiveRecord::RecordNotUnique=>rnu
return{:error=>"User already member of group."}
rescueActiveRecord::RecordNotFound
return{:error=>"User/group not found."}
rescueException=>e
self.fatalErrore
returnHARD_ERR
else
return{:response=>'User added to group.',:user_id=>userId,:group_id=>groupId}
end
# removes a given user from a given group
defremoveUserFromGroup(userId,groupId)
user=User.find(userId)
group=Group.find(groupId)
user.groups.delete(group)
rescueActiveRecord::RecordNotFound
return{:error=>"User/group not found."}
else
return{:response=>'User removed from group.',:user_id=>userId,:group_id=>groupId}
end
end