Skip to content

Commit 3c91c81

Browse files
authored
Merge pull request #2 from mohitdmak/dev
final implementations
2 parents c0fd87b + bade1bf commit 3c91c81

File tree

14 files changed

+1322
-82
lines changed

14 files changed

+1322
-82
lines changed

.github/workflows/node.js.yml

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,11 @@ jobs:
2727
uses: actions/setup-node@v2
2828
with:
2929
node-version: ${{ matrix.node-version }}
30-
- run: npm ci
31-
- run: npm run build --if-present
32-
- run: npm test
30+
- name: Install Packages
31+
run: npm ci
32+
33+
- name: Run tests
34+
env:
35+
MONGO_GITHUB_URI: ${{ secrets.MONGO_GITHUB_URI }}
36+
API_KEY_GITHUB: ${{ secrets.API_KEY_GITHUB }}
37+
run: npm run test

Dockerfile

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
FROM node:16-alpine
2+
3+
WORKDIR /YoutubeSearchApi
4+
5+
COPY . .
6+
7+
RUN npm install -g nodemon
8+
9+
RUN npm install
10+
11+
RUN npm run test
12+
13+
CMD ["npm", "run", "start"]

app.js

Lines changed: 5 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -11,44 +11,13 @@ app.get('/', (req, res) => {
1111
res.json({ response: "Hello Welcome to Yt SearchApi Homepage !" });
1212
});
1313

14-
const API_KEY = require('./config/apiKey');
1514
const fetch = require('axios');
1615

17-
const Router = require('./routes/searchRoutes');
18-
app.use('/search', Router);
16+
const ytRouter = require('./routes/searchYtRoutes');
17+
app.use('/search', ytRouter);
18+
19+
const dbRouter = require('./routes/searchDbRoutes');
20+
app.use('/find', dbRouter)
1921

20-
// app.get('/:id', async (req, res) =>{
21-
// var search = req.params.id;
22-
// var url = `https://www.googleapis.com/youtube/v3/search?part=snippet&maxResults=3&q=${search}&type=video&key=${API_KEY}`;
23-
// var arr = [];
24-
// try{
25-
// var response = await fetch(url);
26-
// for(i in response.data.items){
27-
// var items = response.data.items[i];
28-
// arr.push(items.snippet);
29-
// console.log(i);
30-
// }
31-
// res.status(200).json(arr);
32-
// }
33-
// catch(err){
34-
// console.log(err);
35-
// res.status(500).json(err);
36-
// }
37-
// fetch.get(url)
38-
// .then((r) => {
39-
// for(i in r.data.items){
40-
// var items = r.data.items[i];
41-
// arr.push(items.snippet);
42-
// console.log(arr);
43-
// }
44-
// res.json(arr);
45-
// })
46-
// .catch((err) => {
47-
// console.log(err);
48-
// res.send(err);
49-
// });
50-
//JSON.parse(data);
51-
52-
// });
5322

5423
module.exports = app;

controllers/findControllers.js

Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
// Importing axios module to make get requests
2+
var fetch = require('axios');
3+
4+
// Importing mongo model for storing search data and video details
5+
var searchData = require('../models/searchModel');
6+
var videoData = require('../models/videoModel').videoData;
7+
8+
// Search Function which regularly refreshes search results
9+
async function findByTitle(Query, title){
10+
11+
try{
12+
var searchDB = await searchData.findOne({ query: Query });
13+
14+
if(searchDB === null){
15+
16+
return null;
17+
}
18+
else{
19+
20+
var data;
21+
for(video in searchDB.videoDetails){
22+
if( searchDB.videoDetails[video].title == title ){
23+
data = searchDB.videoDetails[video];
24+
}
25+
}
26+
return data;
27+
}
28+
}
29+
catch(err){
30+
console.log(err);
31+
return err;
32+
}
33+
}
34+
35+
// Search Function which regularly refreshes search results
36+
async function findByDescription(Query, description){
37+
38+
try{
39+
var searchDB = await searchData.findOne({ query: Query });
40+
41+
if(searchDB === null){
42+
return null;
43+
}
44+
else{
45+
46+
var data;
47+
for(video in searchDB.videoDetails){
48+
if( searchDB.videoDetails[video].description == description ){
49+
data = searchDB.videoDetails[video];
50+
}
51+
}
52+
return data;
53+
}
54+
}
55+
catch(err){
56+
console.log(err);
57+
return err;
58+
}
59+
}
60+
61+
// Search Function which regularly refreshes search results
62+
async function findByTitleAndDescription(Query, title, description){
63+
64+
try{
65+
var searchDB = await searchData.findOne({ query: Query });
66+
67+
if(searchDB === null){
68+
return null;
69+
}
70+
else{
71+
72+
var data;
73+
for(video in searchDB.videoDetails){
74+
if( searchDB.videoDetails[video].title == title && searchDB.videoDetails[video].description == description){
75+
data = searchDB.videoDetails[video];
76+
}
77+
}
78+
return data;
79+
}
80+
}
81+
catch(err){
82+
console.log(err);
83+
return err;
84+
}
85+
}
86+
87+
88+
// Controller to provide results as per request
89+
const provideResults = async (req, res) => {
90+
var maxResults = 2;
91+
var Query = req.params.searchquery;
92+
93+
if(req.query.title && !req.query.description){
94+
95+
var title = req.query.title;
96+
var data = await findByTitle(Query, title);
97+
}
98+
else if(req.query.description && !req.query.title){
99+
100+
var description = req.query.description;
101+
var data = await findByDescription(Query, description);
102+
}
103+
else if(req.query.title && req.query.description){
104+
105+
var title = req.query.title;
106+
var description = req.query.description;
107+
var data = await findByTitleAndDescription(Query, title, description);
108+
}
109+
else{
110+
res.status(400).json({ response: "Please provide either title or description of the required video."});
111+
}
112+
113+
114+
if(data === null){
115+
res.status(400).json({ response: "Please search for a video only after obtaining results through Youtube Api, thus visit the /search/:query URL first."});
116+
}else{
117+
res.status(200).json(data);
118+
}
119+
}
120+
121+
module.exports = {
122+
provideResults
123+
}

0 commit comments

Comments
 (0)