﻿var _ = require("lodash");
var Story = require("../models/story");

/**
 * 从数据库中查找指定 Id 的日报。
 * @param  {String} p_id         指定的日报 Id。
 * @param  {Function} p_callback 回调函数：function(err, res)。
 */
exports.findStoryById = function (p_id, p_callback)
{
    if (_.isFunction(p_callback))
    {
        Story.findOne({ id: p_id }, p_callback);
    }
};

/**
 * 从数据库中查找指定日期的日报。
 * @param  {String} p_date       指定的日期。
 * @param  {Function} p_callback 回调函数：function(err, res)。
 */
exports.findStoriesByDate = function (p_date, p_callback)
{
    if (_.isFunction(p_callback))
    {
        Story.find({ date: p_date }, p_callback);
    }
};

/**
 * 从数据库中查找指定日期的未读日报。如果未指定，则查找所有未读日报。
 * @param  {String} p_date       指定的日期。
 * @param  {Function} p_callback 回调函数：function(err, res)。
 */
exports.findUnreadStories = function (p_date, p_callback)
{
    if (_.isFunction(p_callback))
    {
        if (_.isEmpty(_.trim(p_date)))
        {
            this.findAllUnreadStories(p_callback);
        }
        else
        {
            Story.find(
                {
                    date: p_date,
                    read: false
                },
                p_callback
            );
        }
    }
};

/**
 * 从数据库中查找所有未读日报。
 * @param  {Function} p_callback 回调函数：function(err, res)。
 */
exports.findAllUnreadStories = function (p_callback)
{
    if (_.isFunction(p_callback))
    {
        Story.find({ read: false }, p_callback);
    }
};

/**
 * 保存知乎日报至数据库。如果已存在，则更新。
 * @param  {JSONObject} p_story  指定的日报（特指从服务端获取到的 JSON Object）。
 * @param  {Function} p_callback 回调函数：function(err, res)。
 */
exports.saveStory = function (p_story, p_callback)
{
    if (p_story)
    {
        var condition = {
            id: p_story.id
        };
        
        var update = {
            id: p_story.id,
            date: p_story.date,
            content: JSON.stringify(p_story),
            cached: true
        };
        
        var options = {
            new: true,
            upsert: true
        };
        
        Story.findOneAndUpdate(condition, update, options, p_callback);
    }
    else
    {
        if (_.isFunction(p_callback))
        {
            p_callback(new Error("p_story is empty."))
        }
    }
};
@@ -1648,16 +1648,27 @@
 %0A    if 
+(_.isObject
 (p_story
@@ -1668,16 +1668,17 @@
 p_story)
+)
 %0A    %7B%0A 
@@ -1688,25 +1688,21 @@
     var 
-condition
+query
  = %7B%0A   
@@ -2046,17 +2046,13 @@
 ate(
-condition
+query
 , up
@@ -2197,13 +2197,21 @@
  is 
-empty
+not an Object
 .%22))
@@ -2213,24 +2213,392 @@
 t.%22))%0A        %7D%0A    %7D%0A%7D;
+%0A%0A%0A/**%0A * %E8%AE%B0%E5%BD%95%E6%9C%AA%E7%A6%BB%E7%BA%BF%E6%88%96%E7%A6%BB%E7%BA%BF%E5%A4%B1%E8%B4%A5%E7%9A%84%E7%9F%A5%E4%B9%8E%E6%97%A5%E6%8A%A5 Id%E3%80%82%E5%A6%82%E6%9E%9C%E5%B7%B2%E5%AD%98%E5%9C%A8%EF%BC%8C%E5%88%99%E6%9B%B4%E6%96%B0%E3%80%82%0A * @param  %7BString%7D p_id         %E6%8C%87%E5%AE%9A%E7%9A%84%E6%97%A5%E6%8A%A5 Id%E3%80%82%0A * @param  %7BFunction%7D p_callback %E5%9B%9E%E8%B0%83%E5%87%BD%E6%95%B0%EF%BC%9Afunction(err, res)%E3%80%82%0A */%0Aexports.logUncachedStory = function (p_id, p_callback)%0A%7B%0A    Story.findOneAndUpdate(%7B%0A        id: p_id%0A    %7D, %7B%0A        id: p_id,%0A        cached: false%0A    %7D, %7B%0A        new: true,%0A        upsert: true%0A    %7D, p_callback);%0A%7D;

update saveStory and add logUncachedStory