Add bible API

This commit is contained in:
aeroreyna
2023-01-12 12:19:29 -05:00
parent fddce94cfb
commit dadf070ac5
5 changed files with 89 additions and 8 deletions

View File

@@ -128,6 +128,7 @@ userDB = (DB) => {
let regEx = new RegExp(queryStr, 'i'); let regEx = new RegExp(queryStr, 'i');
let query = { let query = {
isGroup: false, isGroup: false,
isChat: false,
$or: [ $or: [
{"profile.firstName": { {"profile.firstName": {
$regex: regEx $regex: regEx
@@ -140,7 +141,7 @@ userDB = (DB) => {
}}, }},
] ]
}; };
let r = await DB.profileCols.find(queryStr ? query : {isGroup: false}) let r = await DB.profileCols.find(queryStr ? query : {isGroup: false, isChat: false})
.sort({ lastUpdate: -1 }).limit(20) .sort({ lastUpdate: -1 }).limit(20)
.toArray().catch((err) => { .toArray().catch((err) => {
console.log(err); console.log(err);
@@ -166,7 +167,7 @@ userDB = (DB) => {
return false; return false;
}); });
let index = 0; let index = 0;
while(r[index].isGroup) index += 1; while(r[index].isGroup || r[index].isChat) index += 1;
if (r[index]) userProfileCache[r[index].id] = r[index]; if (r[index]) userProfileCache[r[index].id] = r[index];
return r[index]; return r[index];
} }
@@ -273,6 +274,7 @@ userDB = (DB) => {
let query = { let query = {
isGroup: true, isGroup: true,
isCourse: {$ne: true}, isCourse: {$ne: true},
isChat: {$ne: true},
}; };
if(excludePrivate) query.isPrivate = false; if(excludePrivate) query.isPrivate = false;
let r = await DB.profileCols.find(query).sort({ lastUpdate: -1 }).limit(10) let r = await DB.profileCols.find(query).sort({ lastUpdate: -1 }).limit(10)
@@ -289,13 +291,14 @@ userDB = (DB) => {
for(id in profile.following){ for(id in profile.following){
let oId = DB.ObjectID(id); let oId = DB.ObjectID(id);
let checkProfile = await DB.getProfileCache(oId) let checkProfile = await DB.getProfileCache(oId)
if(checkProfile && checkProfile.isGroup){ if(checkProfile && checkProfile.isGroup && !checkProfile.isChat){
ids.push(oId) ids.push(oId)
} }
} }
let query = { let query = {
isGroup: true, isGroup: true,
isCourse: {$ne: true}, isCourse: {$ne: true},
isChat: {$ne: true},
_id: { _id: {
$in: ids $in: ids
} }
@@ -312,6 +315,7 @@ userDB = (DB) => {
let regEx = new RegExp(queryStr, 'i'); let regEx = new RegExp(queryStr, 'i');
let query = queryStr ? { let query = queryStr ? {
isGroup: true, isGroup: true,
isChat: {$ne: true},
isCourse: coursesB, isCourse: coursesB,
$or: [ $or: [
{"profile.firstName": { {"profile.firstName": {
@@ -327,7 +331,7 @@ userDB = (DB) => {
$regex: regEx $regex: regEx
}} }}
] ]
} : {isGroup: true, isCourse: coursesB}; } : {isGroup: true, isChat: {$ne: true}, isCourse: coursesB};
let r = await DB.profileCols.find(query) let r = await DB.profileCols.find(query)
.sort({ lastUpdate: -1 }).limit(20) .sort({ lastUpdate: -1 }).limit(20)
.toArray().catch((err) => { .toArray().catch((err) => {
@@ -353,7 +357,7 @@ userDB = (DB) => {
DB.getGroup = async (groupid) => { DB.getGroup = async (groupid) => {
const _id = DB.ObjectID(groupid); const _id = DB.ObjectID(groupid);
//if(userProfileCache[groupid]) return userProfileCache[groupid]; //if(userProfileCache[groupid]) return userProfileCache[groupid];
let r = await DB.profileCols.findOne({_id, isGroup: true}).catch((err) => { let r = await DB.profileCols.findOne({_id, isGroup: true, isChat: {$ne: true},}).catch((err) => {
console.log(err); console.log(err);
return false; return false;
}); });
@@ -425,7 +429,7 @@ userDB = (DB) => {
//Courses //Courses
DB.getCourses = async () => { DB.getCourses = async () => {
let r = await DB.profileCols.find({isGroup: true, isCourse: true}) let r = await DB.profileCols.find({isGroup: true, isCourse: true, isChat: {$ne: true}})
.sort({ lastUpdate: -1 }).limit(20) .sort({ lastUpdate: -1 }).limit(20)
.toArray().catch((err) => { .toArray().catch((err) => {
console.log(err); console.log(err);

View File

@@ -16,6 +16,9 @@ class Post {
this.lastUpdated = info.lastUpdated || this.createdAt; this.lastUpdated = info.lastUpdated || this.createdAt;
// Add tags to posts // Add tags to posts
this.tags = info.tags; this.tags = info.tags;
// For chats profileid will be the chat profile and the chatSenderId will be
// the user sending the message, this will prevent showing on feed.
this.chatSenderId = info.chatSenderId;
} }
addComment(comment){ addComment(comment){

View File

@@ -22,9 +22,9 @@ class User {
this.isGroup = info.isGroup || false; this.isGroup = info.isGroup || false;
this.isCourse = info.isCourse || false; this.isCourse = info.isCourse || false;
this.isPrivate = info.isPrivate || false; this.isPrivate = info.isPrivate || false;
this.isChat = info.isChat || false;
this.subscribed = info.subscribed || {}; //Subscribed user to groups this.subscribed = info.subscribed || {}; //Subscribed user to groups
this.pending = info.subscribed || {}; //Private groups require authorization this.pending = info.pending || {}; //Private groups require authorization
} }
toObj(){ toObj(){
@@ -42,6 +42,7 @@ class User {
r.isGroup = this.isGroup; r.isGroup = this.isGroup;
r.isCourse = this.isCourse; r.isCourse = this.isCourse;
r.isPrivate = this.isPrivate; r.isPrivate = this.isPrivate;
r.isChat = this.isChat;
r.subscribed = this.subscribed; r.subscribed = this.subscribed;
r.pending = this.pending; r.pending = this.pending;
return r; return r;

View File

@@ -49,6 +49,7 @@ const profileRoute = require('./routes/profile.js');
const postRoute = require('./routes/post.js'); const postRoute = require('./routes/post.js');
const paymentsRoute = require('./routes/payments.js'); const paymentsRoute = require('./routes/payments.js');
const subsplashRoute = require('./routes/subsplash.js'); const subsplashRoute = require('./routes/subsplash.js');
const bibleRoute = require('./routes/bible.js');
DB.getDB.then((DB) => { DB.getDB.then((DB) => {
@@ -256,9 +257,11 @@ DB.getDB.then((DB) => {
app.use('/user', sessionChecker, profileRoute); app.use('/user', sessionChecker, profileRoute);
app.use('/post', sessionChecker, postRoute); app.use('/post', sessionChecker, postRoute);
app.use('/payments', sessionChecker, paymentsRoute); app.use('/payments', sessionChecker, paymentsRoute);
app.use('/bible', sessionChecker, bibleRoute);
//Public Routes //Public Routes
app.use('/subsplash', subsplashRoute); app.use('/subsplash', subsplashRoute);
// route for handling 404 requests(unavailable routes) // route for handling 404 requests(unavailable routes)
app.use(function (req, res, next) { app.use(function (req, res, next) {

70
routes/bible.js Normal file
View File

@@ -0,0 +1,70 @@
const axios = require('axios');
var express = require('express')
var router = express.Router()
const DB = require("./../mongoDB.js");
const fetchAPI = async (path) => {
baseUrl = "https://api.scripture.api.bible/v1/"
let detailHtml = await axios.get(baseUrl + path, {headers:{'api-key':'8b43472a173a39e04cd868fd4848ed75'}}).catch(console.error);
return detailHtml?.data;
}
const defaultBibleId = "592420522e16049f-01";
//getMedia('y42zyf3').then(console.log)
DB.getDB.then((DB) => {
router.get("", async (req, res) => {
const bibles = await fetchAPI('bibles');
return res.json(bibles);
});
router.get("/books", async (req, res) => {
const bibleId = req.query.bibleId || defaultBibleId;
const bibles = await fetchAPI('bibles/' + bibleId +"/books");
return res.json(bibles);
});
router.get("/books", async (req, res) => {
const bibleId = req.query.bibleId || defaultBibleId;
const bibles = await fetchAPI('bibles/' + bibleId +"/books");
return res.json(bibles);
});
router.get("/books/:bookId", async (req, res) => {
const bookId = req.params.bookId;
const bibles = await fetchAPI('bibles/' + bibleId +"/books/" + bookId);
return res.json(bibles);
});
router.get("/books/:bookId/chapters", async (req, res) => {
const bookId = req.params.bookId;
const bibleId = req.query.bibleId || defaultBibleId;
const bibles = await fetchAPI('bibles/' + bibleId +"/books/" + bookId + "/chapters");
return res.json(bibles);
});
router.get("/chapters/:chapterId", async (req, res) => {
const chapterId = req.params.chapterId;
const bibleId = req.query.bibleId || defaultBibleId;
const bibles = await fetchAPI('bibles/' + bibleId + "/chapters/" + chapterId);
return res.json(bibles);
});
router.get("/chapters/:chapterId/verses", async (req, res) => {
const chapterId = req.params.chapterId;
const bibleId = req.query.bibleId || defaultBibleId;
const bibles = await fetchAPI('bibles/' + bibleId + "/chapters/" + chapterId + "/verses");
return res.json(bibles);
});
router.get("/search", async (req, res) => {
const query = req.query.query;
const limit = req.query.limit || 10;
const bibleId = req.query.bibleId || defaultBibleId;
const bibles = await fetchAPI('bibles/' + bibleId + "/search?query=" + query + "&limit=" + limit);
return res.json(bibles);
});
});
module.exports = router