Skip to content

Commit

Permalink
Refactor code
Browse files Browse the repository at this point in the history
  • Loading branch information
pprathameshmore committed Jul 30, 2020
1 parent 5605fef commit 0299880
Show file tree
Hide file tree
Showing 4 changed files with 132 additions and 213 deletions.
317 changes: 115 additions & 202 deletions api/controllers/quotesV2.js
Original file line number Diff line number Diff line change
@@ -1,97 +1,63 @@
const Quote = require("../models/quote");
const redisClient = require("../configs/redisConfig");
const getDocCount = require("../helpers/getTotalDocCount");
const { response, documentCount } = require("../utils/utils");
/*
V2 controllers
*/

function generateResponse(statusCode, totalPages, currentPage, quotes) {
return {
statusCode: statusCode,
totalPages: totalPages,
currentPage: currentPage,
quotes: quotes,
};
}

exports.v2Random = async (req, res, next) => {
try {
const { genre } = req.query;

const count = await getDocCount.getDocCount();
const count = await documentCount(Quote);
const random = Math.floor(Math.random() * count);

Quote.findOne()
.skip(random)
.then((quote) => {
console.log(quote);
if (quote) {
return res.status(200).json({
statusCode: 200,
quote: quote,
});
}
})
.catch((error) => {
return res.status(500).json({
statusCode: 500,
message: error,
return res.status(200).json({
statusCode: 200,
quote: quote,
});
});
} catch (error) {
console.error(error);
return res.status(500).json({
statusCode: 500,
message: error,
});
}
};

exports.searchByAuthor = async (req, res, next) => {
try {
const { authorName } = req.params;
let { page = 1, limit = 10 } = req.query;

const currentPage = parseInt(page);
const pageLimit = parseFloat(limit);

const totalDocCount = await getDocCount.getDocCount();

if (authorName) {
await Quote.find({ quoteAuthor: new RegExp(authorName, "ig") })
.skip(pageLimit * currentPage - pageLimit)
.limit(pageLimit)
.then((quotes) => {
if (quotes) {
const total = Math.ceil(totalDocCount / pageLimit);

const redisStoreId = authorName + "-" + page + "-" + limit;

const response = generateResponse(
200,
total,
parseInt(page),
quotes
);

//Store in cache
redisClient.setex(
redisStoreId,
120,
JSON.stringify(response),
(err, reply) => {
if (err) {
console.log(err);
}
console.log(reply);
}
);
return res.status(200).json(response);
}
return res.status(404).json({
statusCode: 404,
message: "Quote not found",
});
const pageLimit = parseInt(limit);
const totalDocCount = await documentCount(Quote);
Quote.find({ quoteAuthor: new RegExp(authorName, "ig") })
.skip(pageLimit * currentPage - pageLimit)
.limit(pageLimit)
.then((quotes) => {
const total = Math.ceil(totalDocCount / pageLimit);
const redisStoreId = authorName + "-" + page + "-" + limit;
const sendResponse = response({
statusCode: 200,
message: `Quotes by ${authorName}`,
totalPages: total,
currentPage: currentPage,
quotes,
});
}
//Store in cache
redisClient.setex(
redisStoreId,
120,
JSON.stringify(sendResponse),
(err, reply) => {
if (err) {
console.log(err);
}
console.log(reply);
}
);
return res.status(200).json(sendResponse);
});
} catch (error) {
return res.status(500).json({
statusCode: 500,
Expand All @@ -103,50 +69,37 @@ exports.searchByAuthor = async (req, res, next) => {
exports.searchByQuote = async (req, res, next) => {
try {
const { searchQuery } = req.params;
let { author, genre, page = 1, limit = 10 } = req.query;

let { page = 1, limit = 10 } = req.query;
const currentPage = parseInt(page);
const pageLimit = parseFloat(limit);

const totalDocCount = await getDocCount.getDocCount();

if (searchQuery) {
await Quote.find({ quoteText: new RegExp(searchQuery, "ig") })
.skip(pageLimit * currentPage - pageLimit)
.limit(pageLimit)
.then((quotes) => {
if (quotes) {
const redisStoreId = searchQuery + "-" + page + "-" + limit;

const total = Math.ceil(totalDocCount / pageLimit);

const response = generateResponse(
200,
total,
parseInt(page),
quotes
);

redisClient.setex(
redisStoreId,
120,
JSON.stringify(response),
(err, reply) => {
if (err) {
console.log(err);
}
console.log(reply);
}
);
const pageLimit = parseInt(limit);
const totalDocCount = await documentCount(Quote);
Quote.find({ quoteText: new RegExp(searchQuery, "ig") })
.skip(pageLimit * currentPage - pageLimit)
.limit(pageLimit)
.then((quotes) => {
const redisStoreId = searchQuery + "-" + page + "-" + limit;
const total = Math.ceil(totalDocCount / pageLimit);
const sendResponse = response({
statusCode: 200,
message: `Quotes which includes ${searchQuery} keywords `,
totalPages: total,
currentPage: page,
quotes: quotes,
});

return res.status(200).json(response);
redisClient.setex(
redisStoreId,
120,
JSON.stringify(sendResponse),
(err, reply) => {
if (err) {
console.log(err);
}
console.log(reply);
}
return res.status(404).json({
statusCode: 404,
message: "Quotes not found",
});
});
}
);
return res.status(200).json(sendResponse);
});
} catch (error) {
return res.status(500).json({
statusCode: 500,
Expand All @@ -159,113 +112,73 @@ exports.searchByGenre = async (req, res, next) => {
try {
const { genreName } = req.params;
let { page = 1, limit = 10 } = req.query;

const currentPage = parseInt(page);
const pageLimit = parseInt(limit);

console.log("Coming");

const totalDocCount = await getDocCount.getDocCount();

if (genreName) {
Quote.find({ quoteGenre: new RegExp(genreName, "ig") })
.skip(pageLimit * currentPage - pageLimit)
.limit(pageLimit)
.then((quotes) => {
if (quotes) {
const redisStoreId = genreName + "-" + page + "-" + limit;

const total = Math.ceil(totalDocCount / pageLimit);

const response = generateResponse(
200,
total,
parseInt(page),
quotes
);

redisClient.setex(
redisStoreId,
120,
JSON.stringify(response),
(err, reply) => {
if (err) {
console.log(err);
}
console.log(reply);
}
);

return res.status(200).json(response);
}
return res.status(404).json({
statusCode: 404,
message: "Quotes not found",
});
const totalDocCount = await documentCount(Quote);
Quote.find({ quoteGenre: new RegExp(genreName, "ig") })
.skip(pageLimit * currentPage - pageLimit)
.limit(pageLimit)
.then((quotes) => {
const redisStoreId = genreName + "-" + page + "-" + limit;
const total = Math.ceil(totalDocCount / pageLimit);
const sendResponse = response({
statusCode: 200,
message: `Quotes in ${genreName} genre`,
totalPages: total,
currentPage: page,
quotes: quotes,
});
}
} catch (error) {
return res.status(500).json({
statusCode: 500,
message: error,
});
}
};

exports.allQuotes = async (req, res, next) => {
let { page = 1, limit = 10, genre } = req.query;

const totalDocCount = await getDocCount.getDocCount();

await Quote.find()
.limit(limit * 1)
.skip(page - 1)
.then((allQuotes) => {
if (allQuotes) {
const total = Math.ceil(totalDocCount / limit);

const redisStoreId = "quote" + "-" + page + "-" + limit;

const response = generateResponse(
200,
total,
parseInt(page),
allQuotes
);

redisClient.setex(
redisStoreId,
120,
JSON.stringify(response),
JSON.stringify(sendResponse),
(err, reply) => {
if (err) {
console.log(err);
}
console.log(reply);
}
);
return res.status(200).json(sendResponse);
});
} catch (error) {
return res.status(500).json({
statusCode: 500,
message: error,
});
}
};

return res.status(200).json(response);
}
return res.status(404).json({
statusCode: 404,
message: "Quotes not found",
exports.allQuotes = async (req, res, next) => {
let { page = 1, limit = 10 } = req.query;
const totalDocCount = await documentCount(Quote);
Quote.find()
.limit(limit * 1)
.skip(page - 1)
.then((quotes) => {
const total = Math.ceil(totalDocCount / limit);
const redisStoreId = "quote" + "-" + page + "-" + limit;
const sendResponse = response({
statusCode: 200,
message: "All quotes",
totalPages: total,
currentPage: page,
quotes: quotes,
});
redisClient.setex(
redisStoreId,
120,
JSON.stringify(sendResponse),
(err, reply) => {
if (err) {
console.log(err);
}
console.log(reply);
}
);
return res.status(200).json(sendResponse);
})
.catch((error) => {
console.log(error);
});
};

exports.getSingleQuote = async (req, res, next) => {
try {
console.log("Coming");
const { quote_id } = req.params;
Quote.findById(quote_id).then((quote) => {
const response = generateResponse(200, 0, 0, quote);
return res.status(200).json(response);
});
} catch (error) {
console.error(error);
}
};
7 changes: 0 additions & 7 deletions api/helpers/getTotalDocCount.js

This file was deleted.

Loading

0 comments on commit 0299880

Please sign in to comment.