Skip to content

Commit da64f40

Browse files
todays price in collection
1 parent d670d2e commit da64f40

File tree

8 files changed

+211
-103
lines changed

8 files changed

+211
-103
lines changed

api/schemas/todaysPrice.js

+39
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
const mongoose = require("mongoose");
2+
3+
var Schema = mongoose.Schema;
4+
5+
const todaysPriceSchema = new Schema({
6+
name:{
7+
type: String,
8+
required:['true','Name field is required']
9+
},
10+
maxPrice:{
11+
type: Number
12+
},
13+
minPrice:{
14+
type: Number
15+
},
16+
closingPrice:{
17+
type:Number
18+
},
19+
tradedShares:{
20+
type:Number
21+
},
22+
difference:{
23+
type: Number
24+
},
25+
prevClosingPrice:{
26+
type: Number
27+
},
28+
transactionCount:{
29+
type: Number
30+
},
31+
amount:{
32+
type: Number
33+
},
34+
today:{
35+
type: String
36+
}
37+
});
38+
39+
module.exports = mongoose.model('TodaysPrice',todaysPriceSchema);

functions/brokers.js

+78
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,78 @@
1+
const connectToDatabase = require('../db.js');
2+
const brokerModel = require('../api/schemas/broker.js');
3+
4+
5+
const brokers = (event, context, callback) => {
6+
context.callbackWaitsForEmptyEventLoop = false;
7+
connectToDatabase();
8+
const request = require('request');
9+
const cheerio = require('cheerio');
10+
try {
11+
request('http://www.nepalstock.com/brokers', async (error, response,html)=>{
12+
if(!error && response.statusCode ==200){
13+
const $ = cheerio.load(html);
14+
const pager = $('.pager a').first().text();
15+
const totalPages = pager.split('/')[1]
16+
let brokerList = []
17+
const iterableArray = [...Array(+totalPages).keys()]
18+
const promises = iterableArray.map( (i,value)=>{
19+
return new Promise((resolve,reject) =>{
20+
request(`http://www.nepalstock.com/brokers/index/${i+1}/`,
21+
(error,response,html) =>{
22+
if(!error && response.statusCode ==200){
23+
const $ = cheerio.load(html);
24+
const brokers = $('.content');
25+
brokers.each((i,el) =>{
26+
const name = $(el).children('h4').text();
27+
const info = $(el).find('.row-content').text();
28+
let details = info.trim().split('\n');
29+
details = details.map(detail => detail.trim() )
30+
let [address,code,telephone,email,website,person] = details
31+
brokerList.push({ name,address,code,telephone,email,website,person });
32+
})
33+
resolve(html)
34+
} else {
35+
reject(error)
36+
}
37+
})
38+
})
39+
})
40+
await Promise.all(promises)
41+
const brokerPromise = brokerList.map((brokerinfo) => {
42+
return new Promise((resolve,reject) =>{
43+
let query = { code: brokerinfo.code };
44+
let update = brokerinfo;
45+
let options = {upsert: true, new: true, setDefaultsOnInsert: true};
46+
brokerModel.findOneAndUpdate(query, update, options).then((data)=>{
47+
resolve(data)
48+
}). catch(()=>{
49+
reject(err)
50+
})
51+
})
52+
})
53+
await Promise.all(brokerPromise)
54+
const response = {
55+
statusCode: 200,
56+
headers:{
57+
"Access-Control-Allow-Origin": "*"
58+
},
59+
body: JSON.stringify(
60+
{
61+
status: "success",
62+
brokers: brokerList
63+
}),
64+
};
65+
callback(null,response);
66+
}
67+
});
68+
69+
}
70+
catch(error) {
71+
//callback(error)
72+
}
73+
74+
75+
76+
}
77+
78+
module.exports = brokers

functions/getTodaysPriceFromDb.js

+31
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
const connectToDatabase = require('../db.js');
2+
const todaysPriceModel = require('../api/schemas/todaysPrice.js');
3+
4+
const getTodaysPriceFromDb = (event, context,callback) => {
5+
context.callbackWaitsForEmptyEventLoop = false;
6+
connectToDatabase().then(() => {
7+
todaysPriceModel.find({})
8+
.then((result) => {
9+
const response = {
10+
statusCode: 200,
11+
headers:{
12+
"Access-Control-Allow-Origin": "*"
13+
},
14+
body: JSON.stringify(
15+
{
16+
prices: result,
17+
})
18+
};
19+
callback(null,response);
20+
}
21+
).catch(err =>
22+
callback(null,{
23+
statusCode: err.statusCode || 500,
24+
headers:{ 'Content-Type': 'text/plain' },
25+
body: 'Could not get brokers'
26+
})
27+
);
28+
});
29+
};
30+
31+
module.exports = getTodaysPriceFromDb;

functions/index.js

+8-3
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,14 @@
11
const hello = require('./hello');
2-
const todaysPrice = require('./todaysPrice')
3-
const getBrokersFromDb = require('./getBrokersFromDb')
2+
const todaysPrice = require('./todaysPrice');
3+
const getBrokersFromDb = require('./getBrokersFromDb');
4+
const brokers = require('./brokers');
5+
const getTodaysPriceFromDb = require('./getTodaysPriceFromDb');
6+
47

58
module.exports = {
69
hello,
710
todaysPrice,
8-
getBrokersFromDb
11+
getBrokersFromDb,
12+
brokers,
13+
getTodaysPriceFromDb
914
}

functions/todaysPrice.js

+37-12
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,9 @@
1+
const connectToDatabase = require('../db.js');
2+
const todaysPriceModel = require('../api/schemas/todaysPrice.js');
3+
14
const todaysPrice = (event, context, callback) => {
25
context.callbackWaitsForEmptyEventLoop = false;
3-
6+
connectToDatabase();
47
const request = require('request');
58
const cheerio = require('cheerio');
69
try {
@@ -17,6 +20,11 @@ const todaysPrice = (event, context, callback) => {
1720
(error,response,html) =>{
1821
if(!error && response.statusCode ==200){
1922
const $ = cheerio.load(html);
23+
const todayText = $('#date').text().trim()
24+
const todayArray = todayText.split(/\s+/)
25+
const day = todayArray[2];
26+
const time = todayArray[3];
27+
const today= day + '-' + time;
2028
const companies = $('#home-contents .table tr')
2129
companies.each((i,el) =>{
2230
const info = $(el).text();
@@ -25,40 +33,43 @@ const todaysPrice = (event, context, callback) => {
2533
let [
2634
sn,
2735
name,
28-
noOfTransactions,
36+
transactionCount,
2937
maxPrice,
3038
minPrice,
3139
closingPrice,
3240
tradedShares,
33-
Amount,
34-
prevClosing,
41+
amount,
42+
prevClosingPrice,
3543
difference
3644
] = details
3745

3846
sn = +sn
3947
maxPrice = +maxPrice
4048
minPrice = +minPrice
4149
closingPrice = +closingPrice
42-
Amount = +Amount
43-
prevClosing = +prevClosing
50+
amount = +amount
51+
prevClosingPrice = +prevClosingPrice
4452

4553
let isValidEntry = sn && maxPrice
4654
&& minPrice && closingPrice
47-
&& Amount &&
48-
prevClosing
55+
&& amount &&
56+
prevClosingPrice
4957

5058
if(isValidEntry){
59+
name = name.trim()
5160
CompaniesWithTradingData.push({
5261
sn,
5362
name,
54-
noOfTransactions,
63+
transactionCount,
5564
maxPrice,
5665
minPrice,
5766
closingPrice,
5867
tradedShares,
59-
Amount,
60-
prevClosing,
61-
difference });
68+
amount,
69+
prevClosingPrice,
70+
difference,
71+
today
72+
});
6273
}
6374
})
6475
resolve(html)
@@ -69,13 +80,27 @@ const todaysPrice = (event, context, callback) => {
6980
})
7081
})
7182
await Promise.all(promises)
83+
const tradingPromise = CompaniesWithTradingData.map((tradinginfo) => {
84+
return new Promise((resolve,reject) =>{
85+
let query = { name: tradinginfo.name };
86+
let update = tradinginfo;
87+
let options = {upsert: true, new: true, setDefaultsOnInsert: true};
88+
todaysPriceModel.findOneAndUpdate(query, update, options).then((data)=>{
89+
resolve(data)
90+
}). catch(()=>{
91+
reject(err)
92+
})
93+
})
94+
})
95+
await Promise.all(tradingPromise)
7296
const response = {
7397
statusCode: 200,
7498
headers:{
7599
"Access-Control-Allow-Origin": "*"
76100
},
77101
body: JSON.stringify(
78102
{
103+
status:"success",
79104
prices: CompaniesWithTradingData,
80105
}),
81106
};

handler.js

+9-87
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,13 @@
11
'use strict';
22

33
const functions = require('./functions/index');
4-
let { hello, todaysPrice,getBrokersFromDb} = functions
4+
let {
5+
hello,
6+
todaysPrice,
7+
getBrokersFromDb,
8+
brokers,
9+
getTodaysPriceFromDb
10+
} = functions
511

612
const connectToDatabase = require('./db');
713
const brokerModel = require('./api/schemas/broker.js');
@@ -10,91 +16,7 @@ const brokerModel = require('./api/schemas/broker.js');
1016
module.exports.hello = hello;
1117
module.exports.todaysPrice = todaysPrice;
1218
module.exports.getBrokersFromDb = getBrokersFromDb;
19+
module.exports.brokers = brokers;
20+
module.exports.getTodaysPriceFromDb = getTodaysPriceFromDb
1321

14-
var mongoose = require("mongoose");
15-
mongoose.connect('mongodb+srv://lambdaUser:[email protected]/test?retryWrites=true&w=majority',
16-
{ useNewUrlParser: true });
1722

18-
19-
20-
module.exports.brokers = (event, context, callback) => {
21-
context.callbackWaitsForEmptyEventLoop = false;
22-
const db = mongoose.connection
23-
db.once('open', _ => {
24-
console.log('Database connected:')
25-
})
26-
db.on('error', err => {
27-
console.error('connection error:', err)
28-
callback(null,'failure')
29-
})
30-
31-
32-
const request = require('request');
33-
const cheerio = require('cheerio');
34-
try {
35-
request('http://www.nepalstock.com/brokers', async (error, response,html)=>{
36-
if(!error && response.statusCode ==200){
37-
const $ = cheerio.load(html);
38-
const pager = $('.pager a').first().text();
39-
const totalPages = pager.split('/')[1]
40-
let brokerList = []
41-
const iterableArray = [...Array(+totalPages).keys()]
42-
const promises = iterableArray.map( (i,value)=>{
43-
return new Promise((resolve,reject) =>{
44-
request(`http://www.nepalstock.com/brokers/index/${i+1}/`,
45-
(error,response,html) =>{
46-
if(!error && response.statusCode ==200){
47-
const $ = cheerio.load(html);
48-
const brokers = $('.content');
49-
brokers.each((i,el) =>{
50-
const name = $(el).children('h4').text();
51-
const info = $(el).find('.row-content').text();
52-
let details = info.trim().split('\n');
53-
details = details.map(detail => detail.trim() )
54-
let [address,code,telephone,email,website,person] = details
55-
brokerList.push({ name,address,code,telephone,email,website,person });
56-
})
57-
resolve(html)
58-
} else {
59-
reject(error)
60-
}
61-
})
62-
})
63-
})
64-
await Promise.all(promises)
65-
const brokerPromise = brokerList.map((brokerinfo) => {
66-
return new Promise((resolve,reject) =>{
67-
let query = { code: brokerinfo.code };
68-
let update = brokerinfo;
69-
let options = {upsert: true, new: true, setDefaultsOnInsert: true};
70-
brokerModel.findOneAndUpdate(query, update, options).then((data)=>{
71-
resolve(data)
72-
}). catch(()=>{
73-
reject(err)
74-
})
75-
})
76-
})
77-
await Promise.all(brokerPromise)
78-
mongoose.connection.close();
79-
const response = {
80-
statusCode: 200,
81-
headers:{
82-
"Access-Control-Allow-Origin": "*"
83-
},
84-
body: JSON.stringify(
85-
{
86-
status: "success",
87-
}),
88-
};
89-
callback(null,response);
90-
}
91-
});
92-
93-
}
94-
catch(error) {
95-
//callback(error)
96-
}
97-
98-
99-
100-
}

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
"description": "",
55
"main": "handler.js",
66
"scripts": {
7-
"test": "echo \"Error: no test specified\" && exit 1"
7+
"offline": "serverless offline --useSeparateProcesses"
88
},
99
"keywords": [],
1010
"author": "",

0 commit comments

Comments
 (0)