crcnt_mulingo/domain/application/
query.rs1use {crate::domain::{application::Application,
2 error::Result,
3 store::StoreQuery,
4 MulingoEntity,
5 MulingoLangKey,
6 MulingoMsgKey,
7 MulingoNameSpace,
8 MulingoOwner,
9 MulingoVersion},
10 async_trait::async_trait};
11
12#[async_trait]
13pub trait ApplicationQuery {
14 async fn fetch_latest_mulingo(&self,
15 owner: &MulingoOwner,
16 ns: &MulingoNameSpace,
17 msg_key: &MulingoMsgKey,
18 lang_key: &MulingoLangKey)
19 -> Result<Option<MulingoEntity>>;
20 async fn fetch_mulingo(&self,
21 owner: &MulingoOwner,
22 ns: &MulingoNameSpace,
23 msg_key: &MulingoMsgKey,
24 lang_key: &MulingoLangKey,
25 version: &MulingoVersion)
26 -> Result<Option<MulingoEntity>>;
27}
28
29#[async_trait]
30impl ApplicationQuery for Application {
31 async fn fetch_latest_mulingo(&self,
32 owner: &MulingoOwner,
33 ns: &MulingoNameSpace,
34 msg_key: &MulingoMsgKey,
35 lang_key: &MulingoLangKey)
36 -> Result<Option<MulingoEntity>> {
37 let mut all_version = self.store.get_mulingo_of_all_version(owner, ns, msg_key, lang_key).await?;
38 all_version.sort_by(|x1, x2| x2.version.inner().partial_cmp(x1.version.inner()).unwrap());
39 Ok(all_version.first().map(|x| x.clone()))
40 }
41
42 async fn fetch_mulingo(&self,
43 owner: &MulingoOwner,
44 ns: &MulingoNameSpace,
45 msg_key: &MulingoMsgKey,
46 lang_key: &MulingoLangKey,
47 version: &MulingoVersion)
48 -> Result<Option<MulingoEntity>> {
49 self.store.fetch_mulingo(owner, ns, version, msg_key, lang_key).await
50 }
51}