Skip to content

Commit 8d94875

Browse files
Merge branch 'develop' into authorization
2 parents 0abf40d + 35466aa commit 8d94875

File tree

18 files changed

+560
-36
lines changed

18 files changed

+560
-36
lines changed

constants/users.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
const userStatusEnum = ['ooo', 'idle', 'active']
2+
module.exports = userStatusEnum

controllers/pullRequests.js

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,8 @@ const getUserPRs = async (req, res) => {
3737
*/
3838
const getStalePRs = async (req, res) => {
3939
try {
40-
const { data } = await githubService.fetchStalePRs()
40+
const { size, page } = req.query
41+
const { data } = await githubService.fetchStalePRs(size, page)
4142

4243
if (data.total_count) {
4344
const allPRs = githubService.extractPRdetails(data)
@@ -65,7 +66,8 @@ const getStalePRs = async (req, res) => {
6566
*/
6667
const getOpenPRs = async (req, res) => {
6768
try {
68-
const { data } = await githubService.fetchOpenPRs((req.query.page) || 1)
69+
const { size, page } = req.query
70+
const { data } = await githubService.fetchOpenPRs(size, page)
6971

7072
if (data.total_count) {
7173
const allPRs = githubService.extractPRdetails(data)

controllers/stocks.js

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,16 +29,36 @@ const fetchStocks = async (req, res) => {
2929
try {
3030
const allStock = await stocks.fetchStocks()
3131
return res.json({
32-
message: 'Stocks returned successfully!',
32+
message: allStock.length > 0 ? 'Stocks returned successfully!' : 'No stocks found',
3333
stock: allStock.length > 0 ? allStock : []
3434
})
3535
} catch (err) {
3636
logger.error(`Error while fetching stocks ${err}`)
3737
return res.boom.badImplementation('An internal server error occurred')
3838
}
3939
}
40+
/**
41+
* Fetches all the stocks of the user
42+
*
43+
* @param req {Object} - Express request object
44+
* @param res {Object} - Express response object
45+
*/
46+
const getSelfStocks = async (req, res) => {
47+
try {
48+
const { id: userId } = req.userData
49+
const userStocks = await stocks.fetchUserStocks(userId)
50+
return res.json({
51+
message: userStocks.length > 0 ? 'User stocks returned successfully!' : 'No stocks found',
52+
userStocks
53+
})
54+
} catch (err) {
55+
logger.error(`Error while getting user stocks ${err}`)
56+
return res.boom.badImplementation('An internal server error occurred')
57+
}
58+
}
4059

4160
module.exports = {
4261
addNewStock,
43-
fetchStocks
62+
fetchStocks,
63+
getSelfStocks
4464
}

controllers/trading.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
const tradeModel = require('../models/trading')
1+
const tradeService = require('../services/tradingService')
22
/**
33
* New Trading Request
44
*
@@ -13,15 +13,15 @@ const trade = async (req, res) => {
1313
username,
1414
userId
1515
}
16-
const { canUserTrade, errorMessage, userBalance } = await tradeModel.trade(tradeStockData)
16+
const { canUserTrade, errorMessage, userBalance } = await tradeService.trade(tradeStockData)
1717

1818
if (!canUserTrade) {
1919
return res.boom.forbidden(errorMessage)
2020
}
2121

2222
return res.json({ userBalance })
2323
} catch (err) {
24-
logger.error(`Error while updating task: ${err}`)
24+
logger.error(`Error during trading: ${err}`)
2525
return res.boom.badImplementation('An internal server error occurred')
2626
}
2727
}

docs/swaggerDefinition.js

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -445,6 +445,9 @@ const swaggerOptions = {
445445
},
446446
tokens: {
447447
type: 'object'
448+
},
449+
status: {
450+
type: 'string'
448451
}
449452
}
450453
},
@@ -521,6 +524,29 @@ const swaggerOptions = {
521524
}
522525
}
523526
},
527+
userStocks: {
528+
type: 'object',
529+
properties: {
530+
userId: {
531+
type: 'string'
532+
},
533+
stockId: {
534+
type: 'string'
535+
},
536+
stockName: {
537+
type: 'string'
538+
},
539+
quantity: {
540+
type: 'number'
541+
},
542+
orderValue: {
543+
type: 'number'
544+
},
545+
initialStockValue: {
546+
type: 'number'
547+
}
548+
}
549+
},
524550
auctions: {
525551
type: 'object',
526552
properties: {

middlewares/validators/user.js

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
const joi = require('joi')
2+
const userStatusEnum = require('../../constants/users')
23

34
const updateUser = async (req, res, next) => {
45
const schema = joi.object().keys({
@@ -14,7 +15,8 @@ const updateUser = async (req, res, next) => {
1415
linkedin_id: joi.string().optional(),
1516
twitter_id: joi.string().optional(),
1617
instagram_id: joi.string().optional(),
17-
website: joi.string().optional()
18+
website: joi.string().optional(),
19+
status: joi.any().valid(...userStatusEnum).optional()
1820
})
1921

2022
try {

models/stocks.js

Lines changed: 61 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
const firestore = require('../utils/firestore')
22
const stocksModel = firestore.collection('stocks')
3+
const userStocksModel = firestore.collection('user-stocks')
4+
35
/**
46
* Adds Stocks
57
*
@@ -38,7 +40,65 @@ const fetchStocks = async () => {
3840
}
3941
}
4042

43+
/**
44+
* Fetches the user stocks
45+
* @return {Promise<userStocks|object>}
46+
*/
47+
const fetchUserStocks = async (userId, stockId = null) => {
48+
try {
49+
let userStocksRef = ''
50+
const query = userStocksModel.where('userId', '==', userId)
51+
if (stockId) {
52+
userStocksRef = await query.where('stockId', '==', stockId).get()
53+
const [userStocks] = userStocksRef.docs
54+
if (userStocks) {
55+
return { id: userStocks.id, ...userStocks.data() }
56+
}
57+
return {}
58+
}
59+
60+
userStocksRef = await query.get()
61+
const userStocks = []
62+
userStocksRef.forEach((stock) => {
63+
userStocks.push({
64+
id: stock.id,
65+
...stock.data()
66+
})
67+
})
68+
return userStocks
69+
} catch (err) {
70+
logger.error('Error retrieving user stocks', err)
71+
throw err
72+
}
73+
}
74+
75+
/**
76+
* Update Users Stocks
77+
* @return {Promise<userStocks|object>}
78+
*/
79+
const updateUserStocks = async (userId, stockData) => {
80+
try {
81+
const userStocks = await fetchUserStocks(userId, stockData.stockId)
82+
if (!userStocks.id) {
83+
await userStocksModel.add({
84+
userId,
85+
...stockData
86+
})
87+
return true
88+
}
89+
90+
const userStocksRef = userStocksModel.doc(userStocks.id)
91+
const res = await userStocksRef.update(stockData)
92+
return !!res
93+
} catch (err) {
94+
logger.error('Error updating users stocks', err)
95+
throw err
96+
}
97+
}
98+
4199
module.exports = {
42100
addStock,
43-
fetchStocks
101+
fetchStocks,
102+
fetchUserStocks,
103+
updateUserStocks
44104
}

public/apiSchema.json

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

routes/auctions.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ router.get('/', auction.fetchAvailableAuctions)
8585
* security:
8686
* - bearerAuth: []
8787
* responses:
88-
* 204:
88+
* 201:
8989
* description: New bid
9090
* content:
9191
* application/json:
@@ -134,7 +134,7 @@ router.post('/bid/:id', authenticate, auctionValidator.placeBid, auction.makeNew
134134
* security:
135135
* - bearerAuth: []
136136
* responses:
137-
* 204:
137+
* 201:
138138
* description: New auction
139139
* content:
140140
* application/json:

routes/pullrequests.js

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,17 @@ const pullRequest = require('../controllers/pullRequests')
99
* summary: Latest 10 Pull Requests in Real Dev Squad
1010
* tags:
1111
* - Pull Requests
12+
* parameters:
13+
* - in: query
14+
* name: size
15+
* schema:
16+
* type: integer
17+
* description: Number of pull requests to be returned
18+
* - in: query
19+
* name: page
20+
* schema:
21+
* type: integer
22+
* description: Page number for pagination
1223
* responses:
1324
* 200:
1425
* description: Pull Requests
@@ -40,6 +51,17 @@ router.get('/open', pullRequest.getOpenPRs)
4051
* summary: All open Pull Requests in Real Dev Squad
4152
* tags:
4253
* - Pull Requests
54+
* parameters:
55+
* - in: query
56+
* name: size
57+
* schema:
58+
* type: integer
59+
* description: Number of pull requests to be returned
60+
* - in: query
61+
* name: page
62+
* schema:
63+
* type: integer
64+
* description: Page number for pagination
4365
* responses:
4466
* 200:
4567
* description: Pull Requests

0 commit comments

Comments
 (0)