crcnt_mulingo/domain/application/
query.rs

1use {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}