crcnt_mulingo/domain/application/
create.rs

1use {crate::domain::{application::Application,
2                     error::Result,
3                     service::{ServiceFactory,
4                               ServiceVerify},
5                     store::{StoreCreate,
6                             StoreQuery},
7                     MulingoEntity,
8                     MulingoLangKey,
9                     MulingoMemo,
10                     MulingoMsgContent,
11                     MulingoMsgKey,
12                     MulingoNameSpace,
13                     MulingoOwner,
14                     MulingoVersion},
15     async_trait::async_trait};
16
17#[async_trait]
18pub trait ApplicationCreate {
19  async fn create_mulingo(&self,
20                          owner: MulingoOwner,
21                          ns: MulingoNameSpace,
22                          lang_key: MulingoLangKey,
23                          msg_key: MulingoMsgKey,
24                          version: MulingoVersion,
25                          msg: MulingoMsgContent,
26                          memo: Option<MulingoMemo>)
27                          -> Result<MulingoEntity>;
28}
29
30#[async_trait]
31impl ApplicationCreate for Application {
32  async fn create_mulingo(&self,
33                          owner: MulingoOwner,
34                          ns: MulingoNameSpace,
35                          lang_key: MulingoLangKey,
36                          msg_key: MulingoMsgKey,
37                          version: MulingoVersion,
38                          msg: MulingoMsgContent,
39                          memo: Option<MulingoMemo>)
40                          -> Result<MulingoEntity> {
41    let _ = self.store.check_duplicated(&owner, &ns, &version, &msg_key, &lang_key).await?;
42    let entity = self.service.create_mulingo_entity(ns, owner, lang_key, msg_key, version, msg, memo)?;
43    let _ = self.service.verify_mulingo_entity(&entity)?;
44    let _ = self.store.insert_mulingo_entity(&entity).await?;
45    Ok(entity)
46  }
47}