changed categories to hash

v1.18.x
Baris Usakli 12 years ago
parent 9c3046b89b
commit 1a19f0e1bc

@ -11,14 +11,17 @@ var RDB = require('./../redis.js'),
var slug = cid + '/' + utils.slugify(data.name);
RDB.rpush('categories:cid', cid);
// Topic Info
RDB.set('cid:' + cid + ':name', data.name);
RDB.set('cid:' + cid + ':description', data.description);
RDB.set('cid:' + cid + ':icon', data.icon);
RDB.set('cid:' + cid + ':blockclass', data.blockclass);
RDB.set('cid:' + cid + ':slug', slug);
RDB.set('category:slug:' + slug + ':cid', cid);
RDB.hmset('category:' + cid, {
cid: cid,
name: data.name,
description: data.description,
icon: data.icon,
blockclass: data.blockclass,
slug: slug,
topic_count: 0
});
RDB.set('categoryslug:' + slug + ':cid', cid);
if (callback) callback({'status': 1});
});
@ -36,8 +39,8 @@ var RDB = require('./../redis.js'),
if (key == 'name') {
// reset slugs if name is updated
var slug = cid + '/' + utils.slugify(category[key]);
RDB.set('cid:' + cid + ':slug', slug);
RDB.set('category:slug:' + slug + ':cid', cid);
RDB.hset('category:' + cid, 'slug', slug);
RDB.set('categoryslug:' + slug + ':cid', cid);
RDB.smembers('categories:' + cid + ':tid', function(err, tids) {
var pipe = RDB.multi();

@ -9,14 +9,13 @@ var RDB = require('./redis.js'),
Categories.getCategoryById = function(category_id, current_user, callback) {
RDB.smembers('categories:' + category_id + ':tid', function(err, tids) {
RDB.multi()
.get('cid:' + category_id + ':name')
.smembers('cid:' + category_id + ':active_users')
.get('cid:' + category_id + ':slug')
.exec(function(err, replies) {
var category_name = replies[0],
active_users = replies[1],
category_slug = replies[2];
Categories.getCategoryData(category_id, function(categoryData) {
var category_name = categoryData.name;
category_slug = categoryData.slug;
RDB.smembers('cid:' + category_id + ':active_users', function(err, active_users) {
if (category_name === null) {
callback(false);
@ -85,6 +84,7 @@ var RDB = require('./redis.js'),
});
}
});
});
});
}
@ -115,6 +115,7 @@ var RDB = require('./redis.js'),
// not the permanent location for this function
Categories.getTopicsByTids = function(tids, current_user, callback, category_id /*temporary*/) {
var retrieved_topics = [];
var topicCountToLoad = tids.length;
@ -271,6 +272,14 @@ var RDB = require('./redis.js'),
});
}
Categories.hasReadCategory = function(cid, uid, callback) {
RDB.sismember('cid:' + cid + ':read_by_uid', uid, function(err, hasRead) {
RDB.handle(err);
callback(hasRead);
});
}
Categories.getRecentReplies = function(cid, callback) {
RDB.zrevrange('categories:recent_posts:cid:' + cid, 0, 4, function(err, pids) {
@ -284,69 +293,40 @@ var RDB = require('./redis.js'),
});
}
Categories.getCategoryData = function(cid, callback) {
RDB.hgetall('category:' + cid, function(err, data) {
if(err === null)
callback(data);
else
console.log(err);
});
}
Categories.getCategories = function(cids, callback, current_user) {
if (cids.length === 0) {
callback({'categories' : []});
return;
}
var name = [],
description = [],
icon = [],
blockclass = [],
slug = [],
topic_count = [],
has_read = {};
for (var i=0, ii=cids.length; i<ii; i++) {
name.push('cid:' + cids[i] + ':name');
description.push('cid:' + cids[i] + ':description');
icon.push('cid:' + cids[i] + ':icon');
blockclass.push('cid:' + cids[i] + ':blockclass');
slug.push('cid:' + cids[i] + ':slug');
topic_count.push('cid:' + cids[i] + ':topiccount');
}
RDB.multi()
.mget(name)
.mget(description)
.mget(icon)
.mget(blockclass)
.mget(slug)
.mget(topic_count)
.exec(function(err, replies) {
name = replies[0];
description = replies[1];
icon = replies[2];
blockclass = replies[3];
slug = replies[4];
topic_count = replies[5];
var categories = [];
for(var i=0; i<cids.length; ++i) {
Categories.getCategoryData(cids[i], function(categoryData) {
function generateCategories() {
var categories = [];
for (var i=0, ii=cids.length; i<ii; i++) {
categories.push({
'name' : name[i],
'cid' : cids[i],
'slug' : slug[i],
'description' : description[i],
'blockclass' : blockclass[i],
'icon' : icon[i],
'badgeclass' : (!topic_count[i] || (has_read[i] && current_user !=0)) ? '' : 'badge-important',
'topic_count' : topic_count[i] || 0
});
}
if(!categoryData)
return;
callback({'categories': categories});
}
Categories.hasReadCategory(categoryData.cid, current_user, function(hasRead) {
categoryData['badgeclass'] = (parseInt(categoryData.topic_count,10) === 0 || (hasRead && current_user != 0)) ? '' : 'badge-important';
Categories.hasReadCategories(cids, current_user, function(read_data) {
has_read = read_data;
generateCategories();
});
categories.push(categoryData);
if(categories.length === cids.length)
callback({'categories': categories});
}) ;
});
}
};
}(exports));

@ -139,7 +139,6 @@ marked.setOptions({
}
function getReadStatus(next) {
// posts.create calls this function - should be an option to skip this because its always true
if (uid && parseInt(uid) > 0) {
RDB.sismember(schema.topics(tid).read_by_uid, uid, function(err, read) {
next(null, read);
@ -400,7 +399,7 @@ marked.setOptions({
Topics.setTopicField(tid, 'category_slug', data.categories[0].slug);
});
RDB.incr('cid:' + category_id + ':topiccount');
RDB.hincrby('category:' + category_id, 'topic_count', 1);
RDB.incr('totaltopiccount');
feed.updateCategory(category_id);

@ -314,9 +314,12 @@ var express = require('express'),
app.all('/test', function(req, res) {
topics.getTopicById(24, 1, function(data) {
/*topics.getTopicById(24, 1, function(data) {
res.send(data);
});
});*/
categories.getCategoryById(1,1, function(data) {
res.send(data);
},1);
});

Loading…
Cancel
Save