/
app.rb
138 lines (111 loc) · 3.51 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
require_relative "db/connection"
require_relative "models/user"
require_relative "models/topic"
require_relative "models/comment"
# https://github.com/ryanto/acts_as_votable
module App
class Server < Sinatra::Base
markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML, autolink: true, tables: true)
# =====Setup==========================================
enable :sessions #keeps state during requests.
enable :method_override #_method to put/delete forms in browsers that don't support it.
configure :development do
register Sinatra::Reloader
end
# =====Vars_&_Methods==========================================
def current_user
if session[:current_user]
User.find_by_id(session[:current_user])
end
end
def logged_in?
!!current_user #same as !current_user.nil?
end
# =====Validation===============================================
# Login validation
before do
if request.path_info=="/login" || request.path_info=="/"
pass
elsif logged_in?
pass
else
@message = "You must Log in to do that."
erb :login
redirect '/login'
end
end
# Admin validation
# =====Routes==========================================
# -- test --
get('/test') do
binding.pry
erb :test
end
# -- root --
get('/') do
#if not loggedin
redirect '/login'
#else erb :topics
end
# -- login --
get('/login') do
erb :login
end
post('/login') do
@user = User.find_by_email(params[:email])
if @user && params[:password]==@user.password
session[:current_user]=@user.id
redirect '/topics'
else
@message = "Incorrect User Name or Password "
erb :login
end
end
# -- /user/:id --
get '/user/:id' do
@user = User.find_by_id(params[:id])
erb :profile
end
# -- /users --
get '/users' do
@users = $db.exec_params("SELECT * FROM users")
erb :user_list
end
# -- /topic views --
get '/topics' do
@topics = Topic.list_all
erb :topics
end
get '/topics/:id' do
@topic = Topic.find_by_id(params[:id])
@topic_creator = User.find_by_id(@topic.topic_creator_id)
@topic_comments = Comment.find_by_topic_id(params[:id])
erb :convo
end
# -- topic and comment POSTs --
post '/topics' do
@topic = Topic.create(params, current_user)
topic_url = "/topics/#{@topic.id}"
redirect topic_url
end
post '/comments' do
@comment = Comment.create(params, current_user)
topic_url = "/topics/#{params[:parent_topic_id]}"
redirect topic_url
end
# -- vote button posts --
post '/upvote/:id'do
@topic = Topic.find_by_id(params[:id])
@topic.upvote(current_user.id)
@topics = Topic.list_all
erb :topics
end
post '/downvote/:id'do
@topic = Topic.find_by_id(params[:id])
@topic.downvote(current_user.id)
@topics = Topic.list_all
erb :topics
end
# ====================================================
end #Server class
end #Module App