zero4rs 2.0.0

zero4rs is a powerful, pragmatic, and extremely fast web framework for Rust
Documentation
use lazy_static::lazy_static;

pub mod models;

pub use models::*;

use mongodb::bson::doc;

use crate::core::error2::Error;
use crate::core::error2::Result;

use crate::core::auth0::UserDetails;
use crate::core::mongo;

use crate::services::feeds_service::FEEDS_DB;

lazy_static! {
    pub static ref FEED_COMMENTS_COL: &'static str = "t_feed_comments";
}

pub async fn save_feed_comment(
    client: &mongo::MongoClient,
    record: models::FeedsCommentFormData,
    curr_user: &UserDetails,
) -> Result<String> {
    let user_feeds_record = FeedCommentSave::from(&record, curr_user);

    client
        .insert_one(*FEEDS_DB, *FEED_COMMENTS_COL, user_feeds_record)
        .await
        .map_err(Error::run_time)
}

pub async fn feed_comment_list(
    client: &mongo::MongoClient,
    user_id: Option<String>,
    feed_id: &str,
) -> Result<Vec<FeedCommentVo>> {
    let _filter = doc! {"feed_id": feed_id};
    let _sort = doc! {"created_at": 1};

    let list = client
        .select::<FeedCommentRecord>(*FEEDS_DB, *FEED_COMMENTS_COL, _filter, _sort, (0, 15000))
        .await?
        .into_iter()
        .map(|r| FeedCommentVo::from(&r, user_id.as_ref()))
        .collect();

    Ok(list)
}

// 查询评论数量
pub async fn feeds_comment_count(client: &mongo::MongoClient, feed_id: &str) -> Result<i32> {
    let pipeline = vec![
        doc! { "$match": { "feed_id": feed_id } },
        doc! {
            "$group": {
                "_id": "$feed_id",
                "_cnt": { "$sum": 1 }
            }
        },
    ];

    let result = client
        .pipeline(*FEEDS_DB, *FEED_COMMENTS_COL, pipeline)
        .await?;

    if !result.is_empty() {
        Ok(result[0].1)
    } else {
        Ok(0)
    }
}