crcnt_mulingo/domain/application/
create.rs1use {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}