-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.rb
114 lines (93 loc) · 2.79 KB
/
main.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
require 'sinatra'
require 'json'
require './helper/app/http404'
require './app/controllers'
set :environment, :production
before do
Http404.instance.document_type = 'erb'
end
get '/' do
# ルートのページのリンクに飛ぶ
redirect '/post/'
end
# 画面表示
# 投稿一覧
get '/post/' do
erb :post
end
# 特定の投稿の返信一覧
get '/post/:post_id/reply/' do
# 特定の投稿を取得する
status, headers, body =
call env.merge('PATH_INFO' => "/api/post/#{params[:post_id]}/")
# 投稿が存在しなかったら、ページが存在しないということを示す
if status == 404
status 404
Http404.instance.document_type = 'erb'
return
end
# HTTPレスポンスのBODYの連想配列から特定の投稿の情報を取得する
response_body_hash = JSON.parse(body[0])
@post = response_body_hash['post']
erb :reply
end
# API
# 投稿機能アプリ
# 投稿一覧を取得するエンドポイント
get '/api/post/' do
response = controller_by_appname('post').list(params)
status response['status']
body response['body']
end
# 投稿を作成するエンドポイント
post '/api/post/' do
response = controller_by_appname('post').create(request, params)
status response['status']
body response['body']
end
# 特定の投稿を取得するエンドポイント
get '/api/post/:post_id/' do
response = controller_by_appname('post').detail(params)
status response['status']
body response['body']
end
# 特定の投稿を削除するエンドポイント
post '/api/post/:post_id/delete/' do
response = controller_by_appname('post').delete(params)
status response['status']
body response['body']
end
# 特定の投稿のいいね数を増やすエンドポイント
post '/api/post/:post_id/heart/increment/' do
response = controller_by_appname('post').increment_heart(params)
status response['status']
body response['body']
end
# 返信機能アプリ
# 返信一覧を取得するエンドポイント
get '/api/post/:post_id/reply/' do
response = controller_by_appname('reply').list(params)
status response['status']
body response['body']
end
# 返信を作成するエンドポイント
post '/api/post/:post_id/reply/' do
response = controller_by_appname('reply').create(request, params)
status response['status']
body response['body']
end
# 特定の返信を削除するエンドポイント
post '/api/post/:post_id/reply/:reply_id/delete/' do
response = controller_by_appname('reply').delete(params)
status response['status']
body response['body']
end
# APIや画面表示でページが存在しなかった場合の処理
not_found do
document_type = Http404.instance.document_type
if document_type == 'erb'
@status = 404
@message = 'このページは存在しません'
erb :http4
end
end