Advertisement
Guest User

Untitled

a guest
Mar 15th, 2016
73
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Rails 2.18 KB | None | 0 0
  1. require "bundler/setup"
  2.  
  3. Bundler.setup
  4.  
  5. require "grape"
  6. require "pg"
  7. require "json"
  8. require "redis"
  9.  
  10. class Api < Grape::API
  11.   format :json
  12.  
  13.   helpers do
  14.     def redis_connection
  15.       @r_conn ||= Redis.new
  16.     end
  17.  
  18.     def connection
  19.       @conn ||= PG.connect(dbname: 'apiapp', user: 'apiapp', password: '12345')
  20.     end
  21.  
  22.     def read_all
  23.       connection.exec("SELECT * FROM tasks JOIN analytics USING task_id").to_a
  24.     end
  25.  
  26.     def create(attrs)
  27.       res = connection.exec(
  28.         "INSERT INTO tasks VALUES (DEFAULT, '#{attrs[:title]}', '#{attrs[:description]}') RETURNING id, title, description")[0]
  29.       id = res['id']
  30.       connection.exec("INSERT INTO analytics VALUES (#{id}, 0)")
  31.       res
  32.     end
  33.  
  34.     def read(id)
  35.       if redis_connection.exists(id)
  36.         return redis_connection.get(id)
  37.       end
  38.       res = connection.exec("SELECT * FROM tasks WHERE id=#{id}")
  39.       if(res.ntuples > 0)
  40.         count = connection.exec("SELECT requests_count FROM analytics WHERE id=#{id}")[0]['requests_count'].to_i
  41.         count = count + 1
  42.         connection.exec("UPDATE analytics SET requests_count=#{count} WHERE id=#{id}")
  43.         redis_connection.set(id, res[0].to_json)
  44.         res[0]
  45.       else
  46.         {}
  47.       end
  48.     end
  49.  
  50.     def update(attrs)
  51.       if(redis_connection.exists(attrs[:id]))
  52.         redis_connection.del(attrs[:id])
  53.       end
  54.       connection.exec("UPDATE tasks SET title='#{attrs[:title]}', description='#{attrs[:description]}' WHERE id=#{attrs[:id]} RETURNING id, title, description")[0]
  55.     end
  56.  
  57.     def delete(id)
  58.       if(redis_connection.exists(id))
  59.         redis_connection.del(id)
  60.       end
  61.       connection.exec("BEGIN; DELETE FROM tasks WHERE id=#{id}; DELETE FROM analytics WHERE id=#{id}; COMMIT;")
  62.       id
  63.     end
  64.   end
  65.  
  66.   get "/tasks" do
  67.     read_all
  68.   end
  69.  
  70.   post "/tasks" do
  71.     attrs = params.extract!(:title, :description)
  72.     create(attrs)
  73.   end
  74.  
  75.   get "/tasks/:id" do
  76.     id = params[:id]
  77.     read(id)
  78.   end
  79.  
  80.   patch "/tasks/:id" do
  81.     attrs = params.extract!(:id, :title, :description)
  82.     update(attrs)
  83.   end
  84.  
  85.   delete "/tasks/:id" do
  86.     id = params[:id]
  87.     delete(id)
  88.   end
  89. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement