FrankYan93/nanotwitter

View on GitHub
app.rb

Summary

Maintainability
A
55 mins
Test Coverage
require 'bcrypt'
require 'sinatra'
require 'sinatra/activerecord'
require 'active_record'
require 'byebug'
require 'time'
require 'faker'
require 'redis'
require 'resque'
require 'bunny'
require 'thread'
require 'net/http'
# require apis, services, models
Dir[File.dirname(__FILE__) + '/models/*.rb'].each { |file| require file }
Dir[File.dirname(__FILE__) + '/api/users/*.rb'].each { |file| require file }
Dir[File.dirname(__FILE__) + '/api/tweets/*.rb'].each { |file| require file }
Dir[File.dirname(__FILE__) + '/api/test/*.rb'].each { |file| require file }
Dir[File.dirname(__FILE__) + '/service/*.rb'].each { |file| require file }
# initialize redis
require_relative 'config/initializers/redis.rb'
# config new relic
configure :production do
    require 'newrelic_rpm'
end

enable :sessions
# flush redis if necessary
require_relative 'cache_redis.rb' if $redis.llen('nonlogin_timeline').zero? && !$rakedb

include BCrypt
# just check session
def authenticate!
    if session[:user_id].nil?
        session[:original_request] = request.path_info
        redirect '/signin'
    end
end

def redirect_to_original_request
    user = session[:user]
    original_request = session[:original_request]
    session[:original_request] = nil
    redirect original_request
end

#/?username=someone&password=sth&p=50
get '/' do
    params['username'] = params['email'] if params['username'].nil?
    #print params
    n = params['p'].to_i || 0
    if rand(100) < n
        # use redis to cache frequent login user
        tmp = $redis.get('User' + params[:username].to_s)
        bonnie = JSON.parse tmp unless tmp.nil?
        if bonnie.nil?
            bonnie = User.find_by(username: params[:username])
            $redis.set('User' + params[:username].to_s, bonnie.to_json)
        end
        #print bonnie['id'], "\n"
        x = {}
        x['user_id'] = bonnie['id']
        x['content'] = 'Hello,bonnie'
        Thread.new { newhisNewTweet(x) }
    end
    check_log_in params
end

get '/home' do
    check_log_in params
end

get '/signup' do
    erb :signUp
end

post '/signup' do
    response_reg = heRegister params
    if response_reg.class == String
        @errorString = ' ------ Username existed! Please try another name!'
        erb :signUp
    else
        session[:user_id] = response_reg.id
        session[:username] = response_reg.username
        redirect to('/home')
    end
end

get '/signin/?' do
    erb :signin
end

get 'loaderio-f1055ee771fe308ab55cc3be88736038' do
    'loaderio-f1055ee771fe308ab55cc3be88736038'
end

post '/signin/?' do
    current_user_id, current_username = User.authenticate(params)
    @errorMessage = ''
    if current_user_id.nil?
        @errorMessage = 'You could not be signed in. Did you enter the correct username and password?'
        erb :signin
    else
        session[:user_id] = current_user_id
        session[:username] = current_username
        redirect '/home'
    end
end

get '/signout/?' do
    session.clear
    redirect '/'
end

def check_log_in(params)
    if session[:user_id].nil?
        if params[:username].nil?
            not_log_in_home
        else
            id, name = User.authenticate params
            # puts id,name
            if id.nil?
                not_log_in_home
            else
                session[:user_id] = id
                session[:username] = name
                log_in_home
            end
        end
    else
        log_in_home
    end
end