-
Notifications
You must be signed in to change notification settings - Fork 0
/
app.rb
141 lines (129 loc) · 4.24 KB
/
app.rb
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
require "sinatra"
require "yaml"
require "json"
require "puma"
require "sequel"
require "mysql2"
require "sinatra/json"
CONFIG = YAML.load_file File.join(__dir__, 'config/config.yml')
DB = Sequel.connect(CONFIG['mysql'], max_connections: 50, preconnect: :concurrently)
configure do
set :server, :puma
set :bind, '0.0.0.0'
set :port, '7777'
end
get '/accounts/filter/' do
error 501
end
post '/accounts/new/' do
request.body.rewind
account = JSON.parse(request.body.read)
begin
DB.transaction do
# DB.run("INSERT INTO accounts (id, email, fname, sname, phone, sex, birth, country, city, joined, status) VALUES (?,?,?,?,?,?,?,?,?,?,?)", [account["id"], account["email"], account["fname"], account["sname"], account["phone"], account["sex"], account["birth"], account["country"], account["city"], account["joined"], account["status"]])
DB[:accounts].insert('id' => account["id"], 'email' => account["email"], 'fname' => account["fname"], 'sname' => account["sname"], 'phone' => account["phone"], 'sex' => account["sex"], 'birth' => account["birth"], 'country' => account["country"], 'city' => account["city"], 'joined' => account["joined"], 'status' => account["status"])
if account['likes']
account['likes'].each do |like|
# DB.run("INSERT INTO account_likes (id, from_account_id, ts) VALUES (?,?,?)", like["id"], account["id"], like["ts"])
DB[:account_likes].insert('id' => like["id"], 'from_account_id' => account["id"], 'ts' => like["ts"])
end
end
if account['interests']
account['interests'].each do |interest|
interest_id = DB["SELECT id FROM interests WHERE value LIKE ?", interest].first[:id] rescue nil
if interest_id.nil?
# interest_id = DB.run("INSERT INTO interests (value) VALUES (?)", interest)
interest_id = DB[:interests].insert('value' => interest)
end
# DB.run("INSERT INTO account_interests (account_id, interest_id) VALUES (?,?)", account["id"], interest_id)
DB[:account_interests].insert('account_id' => account["id"], 'interest_id' => interest_id)
end
end
end
rescue Sequel::UniqueConstraintViolation
DB.disconnect
status 400
content_type :json
return {}.to_json
rescue
DB.disconnect
status 400
content_type :json
return {}.to_json
end
DB.disconnect
status 200
content_type :json
return {}.to_json
end
post '/accounts/:id/' do
request.body.rewind
begin
account = JSON.parse(request.body.read)
account_id = DB["SELECT id FROM accounts WHERE id = ?", params['id']].first[:id] rescue nil
if account_id == nil
DB.disconnect
status 404
content_type :json
return {}.to_json
end
interests = nil
likes = nil
if account.key?("interests")
interests = account['interests']
account.delete('interests')
end
if account.key?("likes")
likes = account['likes']
account.delete('likes')
end
DB[:accounts].where(:id => params['id']).update(account)
if interests
DB[:account_interests].where(:account_id => params['id']).delete
interests.each do |interest|
interest_id = DB["SELECT id FROM interests WHERE value LIKE ?", interest].first[:id] rescue nil
if interest_id.nil?
interest_id = DB[:interests].insert('value' => interest)
end
DB[:account_interests].insert('account_id' => params["id"], 'interest_id' => interest_id)
end
end
if likes
DB[:account_likes].where(:from_account_id => params["id"]).delete
likes.each do |like|
DB[:account_likes].insert('id' => like["id"], 'from_account_id' => params["id"], 'ts' => like["ts"])
end
end
rescue
DB.disconnect
status 400
content_type :json
return {}.to_json
end
DB.disconnect
status 200
content_type :json
return {}.to_json
end
post '/accounts/likes/' do
request.body.rewind
begin
likes = JSON.parse(request.body.read)
DB.transaction do
likes['likes'].each do |like|
if like.keys.count != 3 or !like.key?("likee") or !like.key?("ts") or !like.key?("liker")
DB.disconnect
status 400
content_type :json
return {}.to_json
end
DB[:account_likes].insert('id' => like["likee"], 'from_account_id' => like["liker"], 'ts' => like["ts"])
end
end
rescue
DB.disconnect
status 400
content_type :json
return {}.to_json
end
end