diff --git a/app.js b/app.js
index cf87f1a..9340404 100644
--- a/app.js
+++ b/app.js
@@ -24,6 +24,7 @@ class Nodezzarella {
var db = require('./lib/db/'+config.db+'/db');
new db().connectDB(configDB).then((connexion) => {
global.dbConnexion = connexion;
+ global.dbConf = configDB;
this.run();
});
}
diff --git a/classes/Article.class.js b/classes/Article.class.js
index 7f9a0b0..f78100e 100644
--- a/classes/Article.class.js
+++ b/classes/Article.class.js
@@ -8,16 +8,19 @@ var id,
content,
date,
img,
+ categorieName,
+ categorieID,
slug;
class Article {
- constructor(id, title, author, date, img, slug, content = null){
+ constructor(id, title, author, date, img, slug, categorieID, content = null){
this.setId(id);
this.setTitle(title);
this.setAuthor(author);
this.setDate(date);
this.setImg(img);
this.setSlug(slug);
+ this.setCategorieID(categorieID);
(content !== null)?this.setContent(content):'';
}
@@ -49,6 +52,14 @@ class Article {
this.slug = slug;
}
+ setCategorieID(categorieID){
+ this.categorieID = categorieID;
+ }
+
+ setCategorieName(name){
+ this.categorieName = name;
+ }
+
getId(){
return this.id;
}
@@ -77,6 +88,10 @@ class Article {
return this.slug;
}
+ getcategorieID(){
+ return this.categorieID;
+ }
+
}
module.exports = Article;
diff --git a/classes/Controllers/Categories.class.js b/classes/Controllers/Categories.class.js
index bdae1a0..cd2c01a 100644
--- a/classes/Controllers/Categories.class.js
+++ b/classes/Controllers/Categories.class.js
@@ -10,9 +10,12 @@ const log = require('color-logs')(true, true, "Categories.class.js"),
hbs.registerHelper('listArticle', function(tabs, options) {
var i = 1;
var out = '';
-
- for(var x in options['data']['root']){
- out = out + "" + options.fn(options['data']['root'][x]) + "";
+ log.debug();
+ var articles = options['data']['root'].getArticles();
+ articles.shift();
+ log.debug(articles);
+ for(var x in articles){
+ out = out + "" + options.fn(articles[x]) + "";
if(i == 3){
i= 1;
out = out + "
";
@@ -24,6 +27,10 @@ hbs.registerHelper('listArticle', function(tabs, options) {
return out;
});
+hbs.registerHelper('disclamer', function(tabs, options) {
+ return options.fn(options['data']['root'].getArticles()[0]) + "";
+});
+
hbs.registerHelper('listNav', function(tabs, options) {
var out = '';
for(var x in options['data']['root']){
@@ -35,7 +42,6 @@ hbs.registerHelper('listNav', function(tabs, options) {
hbs.registerHelper('article', function(tabs, options) {
var out = '';
- log.debug(options['data']['root']);
for(var x in options['data']['root']){
out = out + "" + options.fn(options['data']['root'][x]) + "";
@@ -60,7 +66,7 @@ class Categories {
]
},
"condition" : "",
- "limit": ""
+ "join": ""
}).then((result) => {
return new Promise((resolve, reject) => {
fs.readFile('./views/_nav.hbs', 'utf-8', (error, source) => {
@@ -79,10 +85,10 @@ class Categories {
/**
* hydrate global var
- * @param {type} slug : url of categorie
+ * @param {type} select : object of select {id = id}
* @returns {Promise} data of categories
*/
- getCategorie(slug){
+ getCategorie(select){
var db = new dbConnector();
return db.get({
"select" : {
@@ -93,10 +99,8 @@ class Categories {
"description"
]
},
- "condition" : {
- "uri" : slug
- },
- "limit" : ""
+ "condition" : select,
+ "join" : ""
}).then((result) => {
return new Promise((resolve, reject) => {
var data = JSON.parse(result);
@@ -112,9 +116,10 @@ class Categories {
/**
*
* @param {
} categorie : object categorie
+ * @param {string} returnFormat : format of return [object, json, html]
* @returns { listArticleToHTML} a list of article in HTML format
*/
- getListArticles(categorie){
+ getListArticles(categorie, returnFormat){
var db = new dbConnector();
return db.get({
"select" : {
@@ -124,25 +129,74 @@ class Categories {
"slug",
"author",
"date",
- "img"
+ "img",
+ "categorie_id"
]
},
"condition" : {
"categorie_id" : categorie.getId()
},
- "limit" : ""
+ "join" : ""
}).then((result) => {
return new Promise((resolve) => {
var data = JSON.parse(result);
for(var i in data){
- categorie.setArticle(new Article(data[i].id,data[i].title, data[i].author, data[i].date, data[i].img, data[i].slug));
+ categorie.setArticle(new Article(data[i].id,data[i].title, data[i].author, data[i].date, data[i].img, data[i].slug, data[i].categorie_id));
+ categorie.getArticles()[i].setCategorieName(categorie.getTitle());
}
- resolve(this.listArticlesToHTML(categorie));
+ switch(returnFormat){
+ case 'html':
+ resolve(this.listArticlesToHTML(categorie));
+ break;
+ case 'json':
+ break;
+ case 'object':
+ break;
+ }
+
});
});
}
+ getHomeListArticles(returnFormat){
+ var db = new dbConnector();
+ return db.get({
+ "select" : {
+ "articles" : []
+ },
+ "condition" : "",
+ "join" : {
+ "left" : "categorie_id",
+ "right" : {
+ "db" : "categories",
+ "index" : "id"
+ }
+ }
+ }).then((result) => {
+ return new Promise((resolve) => {
+ var data = JSON.parse(result);
+ //log.debug(data);
+ var categorie = new Categorie(0, "home", "/", "home");
+ for(var i in data){
+ categorie.setArticle(new Article(data[i].left.id,data[i].left.title, data[i].left.author, data[i].left.date, data[i].left.img, data[i].left.slug, data[i].left.categorie_id));
+ categorie.getArticles()[i].setCategorieName(data[i].right.title);
+ }
+ switch(returnFormat){
+ case 'html':
+ resolve(this.listArticlesToHTML(categorie));
+ break;
+ case 'json':
+ break;
+ case 'object':
+ break;
+ }
+
+
+
+ });
+ });
+ }
/**
*
* @param {} categorie : object categorie
@@ -155,7 +209,7 @@ class Categories {
return articles;
});
var template = hbs.compile(source);
- var html = template(categorie.getArticles());
+ var html = template(categorie);
resolve(html);
});
});
@@ -178,6 +232,7 @@ class Categories {
"author",
"date",
"img",
+ "categorie_id",
"content"
]
},
@@ -185,11 +240,11 @@ class Categories {
"categorie_id" : categorie.getId(),
"slug" : uri
},
- "limit" : ""
+ "join" : ""
}).then((result) => {
return new Promise((resolve) => {
var data = JSON.parse(result);
- categorie.setArticle(new Article(data[0].id,data[0].title, data[0].author, data[0].date, data[0].img, data[0].slug, data[0].content));
+ categorie.setArticle(new Article(data[0].id,data[0].title, data[0].author, data[0].date, data[0].img, data[0].slug, data[0].categorie_id, data[0].content));
fs.readFile('./views/articles/article.hbs', 'utf-8', (error, source) => {
if(error){
log.error(error);
diff --git a/connectorSelectQuery.json b/connectorSelectQuery.json
new file mode 100644
index 0000000..b022beb
--- /dev/null
+++ b/connectorSelectQuery.json
@@ -0,0 +1,19 @@
+{
+ "select": {
+ "table" : [
+ "field1",
+ "field2"
+ ]
+ },
+ "join" : {
+ "left" : "field_to_index",
+ "right" : {
+ "db" : "tableName",
+ "index" : "field_to_index"
+ }
+ },
+ "condition" : {
+ "field1" : "equal",
+ "field2" : "equal"
+ }
+}
diff --git a/lib/db/rethinkdb/db.js b/lib/db/rethinkdb/db.js
index 54a5265..f967c84 100644
--- a/lib/db/rethinkdb/db.js
+++ b/lib/db/rethinkdb/db.js
@@ -2,7 +2,7 @@ const r = require("rethinkdb"),
promise = require('promise'),
fs = require('fs'),
log = require("color-logs")(true, true, "RethinDB connector");
-
+
class rethinkdb{
static constructor(){
@@ -12,13 +12,21 @@ class rethinkdb{
get(query){
return new Promise((resolve, reject) => {
- var nbOfTable = Object.keys(query.select).length;
-
- /**
+ /*
* select table
*/
var formatedQuery = r.table(Object.keys(query.select)[0]);
+ /*
+ * create join
+ */
+ if(typeof query.join === "object"){
+ formatedQuery = formatedQuery.eqJoin(query.join.left, r.db(dbConf.dbName).table(query.join.right.db))
+ }
+
+ /*
+ * form filter / condition of qyert
+ */
if(query.condition !== ""){
formatedQuery = formatedQuery.filter(query.condition);
}
@@ -31,21 +39,17 @@ class rethinkdb{
break;
}
}
+ // r.db("nodezzarella").table("articles").eqJoin("categorie_id", r.db("nodezzarella").table("categories")).pluck({"left":["id"]})
if(selectCollumn.length > 0){
- formatedQuery = formatedQuery.pluck(selectCollumn)
- }
-
- /**
- * make join query
- */
- if(nbOfTable > 1){
-
+ formatedQuery = formatedQuery.pluck(selectCollumn);
}
/**
* run query
*/
+ //log.debug(formatedQuery);
+
formatedQuery.run(dbConnexion).then((cursor) => {
return cursor.toArray();
}).then((result) => {
@@ -54,19 +58,6 @@ class rethinkdb{
throw err;
log.error(err);
});
- /*formatedQuery.run(dbConnexion, (err, result) => {
- if(err) throw err;
- var jsonReturn = [];
- console.log(typeof result);
- result.each(function(err, row) {
- if (err) throw err;
- log.debug(row);
- jsonReturn.push(row);
- //console.log(i);
- });
- resolve(jsonReturn);
-
- });*/
});
}
@@ -106,6 +97,9 @@ class rethinkdb{
}
connectDB(config){
+ this.host = config.host;
+ this.port = config.port;
+ this.dbName = config.dbName;
log.info("Application connecting to database...");
return r.connect({
host: config.host,
diff --git a/lib/router.js b/lib/router.js
index 52b4920..cd92408 100644
--- a/lib/router.js
+++ b/lib/router.js
@@ -15,18 +15,17 @@ router.get("/", function(req, res){
var categories = new Categories();
Promise.all([
- categories.getNav()
+ categories.getNav(),
+ categories.getHomeListArticles("html")
]).then((data) => {
var nav = data[0];
- var content = /*data[1]*/ "";
- var disclaimer = /*data[2]*/ "";
+ var content = data[1];
res.setHeader("Content-type", "text/html");
var tplData = {
"blogName": config.siteTitle,
"title": config.siteHomeTitle,
"nav": nav,
"content": content,
- "disclaimer": disclaimer
};
res.render('template.hbs', tplData);
}).catch((err) => {
@@ -43,15 +42,13 @@ router.get("/:uri/", function(req, res){
]).then(data => {
var nav = data[0];
var categorie = data[1];
- categories.getListArticles(categorie).then((result) => {
- log.debug(result)
+ categories.getListArticles(categorie, "html").then((result) => {
res.setHeader("Content-type", "text/html");
var tplData = {
"blogName": config.siteTitle,
"title": categorie.getTitle() + " - "+config.siteHomeTitle,
"nav": nav,
"content": result,
- "disclaimer": ''
};
res.render('template.hbs', tplData);
})
@@ -77,7 +74,6 @@ router.get("/:categories/:slug", function(req, res){
"title": categorie.getTitle() + " - "+config.siteHomeTitle,
"nav": nav,
"content": result,
- "disclaimer": ''
};
res.render('template.hbs', tplData);
})
diff --git a/views/articles/disclaimer.hbs b/views/articles/disclaimer.hbs
deleted file mode 100644
index 21eb166..0000000
--- a/views/articles/disclaimer.hbs
+++ /dev/null
@@ -1,8 +0,0 @@
-
\ No newline at end of file
diff --git a/views/articles/list.hbs b/views/articles/list.hbs
index a540ba8..4198502 100644
--- a/views/articles/list.hbs
+++ b/views/articles/list.hbs
@@ -1,3 +1,13 @@
+{{#disclamer article}}
+
+{{/disclamer}}
@@ -10,7 +20,7 @@
-
{{categorie}}
+
{{categorieName}}
{{title}}
diff --git a/views/template.hbs b/views/template.hbs
index 25a42ad..40baeb7 100644
--- a/views/template.hbs
+++ b/views/template.hbs
@@ -17,7 +17,6 @@
-->
-{{{disclaimer}}}
{{{content}}}