1
1
const express = require ( 'express' ) ;
2
2
const router = express . Router ( ) ;
3
3
const mongoose = require ( 'mongoose' ) ;
4
- const Book = require ( '../../models/Book' ) ;
5
4
const {
6
- validateAndGetBookData ,
7
- octokit ,
5
+ getBooksByLanguage ,
6
+ getBooksByNameAndLanguage ,
8
7
createIssue,
9
8
} = require ( '../../util/util' ) ;
9
+ const {
10
+ validateLanguageInQuery,
11
+ validateBugReportRequestBody,
12
+ validateNewBookBody,
13
+ } = require ( '../../util/middleware' ) ;
10
14
11
15
const connectMongoose = async ( ) => {
12
16
await mongoose . connect ( process . env . MONGODB_URI ) . catch ( ( err ) => {
@@ -28,7 +32,7 @@ connectMongoose();
28
32
handleMongooseConnectionEvents ( ) ;
29
33
30
34
/**
31
- * @endpoint : /api/v1/get
35
+ * @endpoint : /api/v1/book
32
36
*
33
37
* @method GET
34
38
* @access public
@@ -39,12 +43,13 @@ handleMongooseConnectionEvents();
39
43
*
40
44
* @return response
41
45
**/
42
- router . get ( '/get' , ( req , res ) => {
43
- return validateAndGetBookData ( req , res ) ;
46
+ router . get ( '/book' , validateLanguageInQuery , ( req , res ) => {
47
+ const { language } = req . query ;
48
+ return getBooksByLanguage ( res , language ) ;
44
49
} ) ;
45
50
46
51
/**
47
- * @endpoint : /api/v1/search
52
+ * @endpoint : /api/v1/book/ search
48
53
*
49
54
* @method GET
50
55
* @access public
@@ -56,37 +61,21 @@ router.get('/get', (req, res) => {
56
61
*
57
62
* @return response
58
63
**/
59
- router . get ( '/search' , ( req , res ) => {
64
+ router . get ( '/book/ search' , validateLanguageInQuery , ( req , res ) => {
60
65
const { language, name } = req . query ;
61
- if ( ! language ) {
62
- return res . status ( 400 ) . json ( {
63
- message : 'Bad Request because of no language parameter' ,
64
- status : 400 ,
65
- } ) ;
66
- } else if ( ! name ) {
67
- return validateAndGetBookData ( req , res ) ;
66
+ if ( ! name ) {
67
+ return getBooksByLanguage ( res , language ) ;
68
68
} else {
69
- let expression = new RegExp ( name , 'i' ) ;
70
- Book . find ( { language : language , name : expression } , ( err , result ) => {
71
- if ( err ) {
72
- console . log ( err ) ;
73
- return res . status ( 404 ) . json ( {
74
- message : 'Requested information not found' ,
75
- status : 404 ,
76
- } ) ;
77
- } else {
78
- return res . json ( result ) ;
79
- }
80
- } ) ;
69
+ return getBooksByNameAndLanguage ( res , language , name ) ;
81
70
}
82
71
} ) ;
83
72
84
73
/**
85
- * @endpoint /api/v1/bugs /report
74
+ * @endpoint /api/v1/bug /report
86
75
*
87
76
* @method POST
88
77
**/
89
- router . post ( '/bugs /report' , ( req , res ) => {
78
+ router . post ( '/bug /report' , validateBugReportRequestBody , async ( req , res ) => {
90
79
const {
91
80
title,
92
81
description,
@@ -98,53 +87,39 @@ router.post('/bugs/report', (req, res) => {
98
87
username,
99
88
} = req . body ;
100
89
101
- if (
102
- ! title ||
103
- ! description ||
104
- ! expectedBehaviour ||
105
- ! device ||
106
- ! os ||
107
- ! browser ||
108
- ! version ||
109
- ! username
110
- ) {
111
- return res . status ( 400 ) . json ( {
112
- message : 'Bad Request because of missing parameter' ,
113
- status : 400 ,
90
+ const issueBody = '' . concat (
91
+ '**Describe the bug**\n' ,
92
+ description ,
93
+ '\n\n**Expected behavior**\n' ,
94
+ expectedBehaviour ,
95
+ '\n\n**Desktop/Smartphone**\n-Device: ' ,
96
+ device ,
97
+ '\n-OS: ' ,
98
+ os ,
99
+ '\n-Browser: ' ,
100
+ browser ,
101
+ '\n-Version: ' ,
102
+ version ,
103
+ '\n\n**Github Username**\n' ,
104
+ username
105
+ ) ;
106
+
107
+ try {
108
+ await createIssue ( `Bug Report: ${ title } ` , issueBody , [ 'bug' ] ) ;
109
+ return res . status ( 200 ) . json ( {
110
+ message : 'Bug reported successfully' ,
111
+ status : 200 ,
112
+ } ) ;
113
+ } catch ( err ) {
114
+ return res . status ( 500 ) . json ( {
115
+ message : 'Internal Server Error' ,
116
+ status : 500 ,
114
117
} ) ;
115
- } else {
116
- // check valid github username
117
- octokit . users
118
- . getByUsername ( {
119
- username,
120
- } )
121
- . then ( ( response ) => {
122
- if ( response . data ) {
123
- let issueBody = '' . concat (
124
- '**Describe the bug**\n' ,
125
- description ,
126
- '\n\n**Expected behavior**\n' ,
127
- expectedBehaviour ,
128
- '\n\n**Desktop/Smartphone**\n-Device: ' ,
129
- device ,
130
- '\n-OS: ' ,
131
- os ,
132
- '\n-Browser: ' ,
133
- browser ,
134
- '\n-Version: ' ,
135
- version ,
136
- '\n\n**Github Username**\n' ,
137
- username
138
- ) ;
139
- createIssue ( title , issueBody , [ 'bug' ] , res ) ;
140
- }
141
- } )
142
- . catch ( ( err ) => res . status ( 404 ) . json ( err ) ) ;
143
118
}
144
119
} ) ;
145
120
146
121
/**
147
- * @endpoint /api/v1/book/add
122
+ * @endpoint /api/v1/book
148
123
*
149
124
* @method POST
150
125
* @access public
@@ -156,36 +131,34 @@ router.post('/bugs/report', (req, res) => {
156
131
*
157
132
* @return response
158
133
**/
159
- router . post ( '/book/add' , ( req , res ) => {
134
+ router . post ( '/book' , validateNewBookBody , async ( req , res ) => {
160
135
const { title, bookName, language, downloadLink, username } = req . body ;
161
136
162
- if ( ! title || ! bookName || ! language || ! downloadLink || ! username ) {
163
- return res . status ( 400 ) . json ( {
164
- message : 'Bad Request because of missing parameters' ,
165
- status : 400 ,
137
+ let issueBody = '' . concat (
138
+ '**Book Name**\n' ,
139
+ bookName ,
140
+ '\n\n**Programming Language**\n' ,
141
+ language ,
142
+ '\n\n**Book Download Link**\n' ,
143
+ downloadLink ,
144
+ '\n\n**Github Username**\n' ,
145
+ username
146
+ ) ;
147
+
148
+ try {
149
+ await createIssue ( `New Book Request: ${ title } ` , issueBody , [
150
+ 'question' ,
151
+ ] ) ;
152
+ return res . status ( 200 ) . json ( {
153
+ message : 'Book add request submitted successfully' ,
154
+ status : 200 ,
155
+ } ) ;
156
+ } catch ( err ) {
157
+ console . log ( err ) ;
158
+ return res . status ( 500 ) . json ( {
159
+ message : 'Internal Server Error' ,
160
+ status : 500 ,
166
161
} ) ;
167
- } else {
168
- // check valid github username
169
- octokit . users
170
- . getByUsername ( {
171
- username,
172
- } )
173
- . then ( ( response ) => {
174
- if ( response . data ) {
175
- let issueBody = '' . concat (
176
- '**Book Name**\n' ,
177
- bookName ,
178
- '\n\n**Programming Language**\n' ,
179
- language ,
180
- '\n\n**Book Download Link**\n' ,
181
- downloadLink ,
182
- '\n\n**Github Username**\n' ,
183
- username
184
- ) ;
185
- createIssue ( title , issueBody , [ 'question' ] , res ) ;
186
- }
187
- } )
188
- . catch ( ( err ) => res . status ( 404 ) . json ( err ) ) ;
189
162
}
190
163
} ) ;
191
164
0 commit comments