#holochain #crud #entry #pattern #zomes #ceps #chained

hc_crud_ceps

Holochain zomes 的 CRUD 库,实现 CEPS 模式(链式、条目、永久链接、基于状态的)

33 个版本 (破坏性更新)

0.80.0 2023年7月20日
0.78.0 2023年6月12日
0.76.0 2023年3月22日
0.72.0 2022年12月21日
0.6.1 2021年11月23日

#12 in #zomes

Download history 2/week @ 2024-03-08 2/week @ 2024-03-15 110/week @ 2024-03-29 34/week @ 2024-04-05

每月下载量 209

CAL-1.0AGPL-3.0 WITH mif-exception

32KB
405

Holochain CRUD 库(CEPS 模式)

Holochain zomes 的 CRUD 库,实现 CEPS 模式(链式、条目、永久链接、基于状态的)

Holochain 版本映射表

有关该软件包的哪个版本适用于每个 Holochain 版本的信息,请参阅 docs/Holochain_Version_Map.md

概览

安装

Cargo.toml 中添加的示例

[dependencies]
hc_crud_ceps = "0.3.0"

常见导入示例

use hc_crud::{
    now,
    create_entity, get_entity, get_entities, update_entity, delete_entity,
    Entity, EntryModel, EntityType,
};

基本用法

CRUD 操作

以下导入和结构体假定适用于所有示例

use hdk::prelude::*;
use hc_crud::{
    now,
    create_entity, get_entity, get_entities, update_entity, delete_entity,
    Entity, EntryModel, EntityType,
};

#[hdk_entry_helper]
#[derive(Clone)]
pub struct PostEntry {
    pub title: String,
    pub message: String,
    pub published_at: Option<u64>,
    pub last_updated: Option<u64>,
}

#[hdk_entry_defs]
#[unit_enum(UnitEntryTypes)]
pub enum EntryTypes {
    #[entry_def]
    Post(PostEntry),
}

impl EntryModel<EntryTypes> for PostEntry {
    fn name() -> &'static str { "Post" }
    fn get_type(&self) -> EntityType {
        EntityType::new( "post", "entry" )
    }
    fn to_input(&self) -> EntryTypes {
        EntryTypes::Post(self.clone())
    }
}

创建条目

示例

let input = PostEntry {
    title: String::from("Greeting"),
    message: String::from("Hello world!"),
    published_at: Some(1633108520744),
    last_updated: None,
};

let post_entity = create_entity( &input )?;

[读取] 获取条目

示例

let post_entity = get_entity( &entity.id )?;

更新条目

示例

let post_entity = update_entity( &entity.address, |mut previous: PostEntry, _| {
    previous.message = String::from("Hello, world!");
    previous.last_updated = Some( now()? );
    Ok(previous)
})?;

删除条目

示例

delete_entity::<PostEntry,EntryTypes>( &entity.id )?;

关系 CRUD 示例

为帖子的条目创建一个 1 对多关系,以便具有评论条目。

以下示例使用此附加结构体

#[hdk_entry_helper]
#[derive(Clone)]
pub struct CommentEntry {
    pub message: String,
    pub published_at: Option<u64>,
    pub last_updated: Option<u64>,
}

impl EntryModel<EntryTypes> for CommentEntry {
    fn name() -> &'static str { "Comment" }
    fn get_type(&self) -> EntityType {
        EntityType::new( "comment", "entry" )
    }
    fn to_input(&self) -> EntryTypes {
        EntryTypes::Comment(self.clone())
    }
}

CommentEntry 添加到 EntryTypes 枚举

 #[hdk_entry_defs]
 #[unit_enum(UnitEntryTypes)]
 pub enum EntryTypes {
     #[entry_def]
     Post(PostEntry),
+    #[entry_def]
+    Comment(CommentEntry),
 }

创建一个 CommentEntry 并将其链接到 PostEntry

#[hdk_link_types]
pub enum LinkTypes {
    Post,
    Comment,
}

let input = CommentEntry {
    message: String::from("Where is the sun?"),
    published_at: Some( now()? ),
    last_updated: None,
};

let comment_entity = create_entity( &input )?;

comment_entity.link_from( &post_entity.id, LinkTypes::Comment, None )?;

获取特定基本和标签的 Collection

let collection : Vec<Entity<CommentEntry>> = get_entities( &post_entity.id, LinkTypes::Comment, None )?;

API 参考文档

请参阅 docs.rs/hc_crud_ceps

贡献

请参阅 CONTRIBUTING.md

依赖关系

~16–29MB
~434K SLoC