sylvia_iot_data/models/
application_uldata.rs1use std::error::Error as StdError;
4
5use async_trait::async_trait;
6use chrono::{DateTime, Utc};
7use serde_json::{Map, Value};
8
9#[derive(Debug, PartialEq)]
11pub struct ApplicationUlData {
12 pub data_id: String,
13 pub proc: DateTime<Utc>,
14 pub publish: DateTime<Utc>,
15 pub unit_code: Option<String>,
16 pub network_code: String,
17 pub network_addr: String,
18 pub unit_id: String,
19 pub device_id: String,
20 pub time: DateTime<Utc>,
21 pub profile: String,
22 pub data: String,
23 pub extension: Option<Map<String, Value>>,
24}
25
26pub enum SortKey {
28 Proc,
29 Pub,
30 Time,
31 NetworkCode,
32 NetworkAddr,
33}
34
35pub struct SortCond {
37 pub key: SortKey,
38 pub asc: bool,
39}
40
41pub struct ListOptions<'a> {
43 pub cond: &'a ListQueryCond<'a>,
45 pub offset: Option<u64>,
47 pub limit: Option<u64>,
49 pub sort: Option<&'a [SortCond]>,
51 pub cursor_max: Option<u64>,
55}
56
57#[derive(Default)]
59pub struct QueryCond<'a> {
60 pub unit_id: Option<&'a str>,
61 pub device_id: Option<&'a str>,
62 pub proc_gte: Option<DateTime<Utc>>,
63 pub proc_lte: Option<DateTime<Utc>>,
64}
65
66#[derive(Default)]
68pub struct ListQueryCond<'a> {
69 pub unit_id: Option<&'a str>,
71 pub device_id: Option<&'a str>,
73 pub network_code: Option<&'a str>,
75 pub network_addr: Option<&'a str>,
77 pub profile: Option<&'a str>,
79 pub proc_gte: Option<DateTime<Utc>>,
81 pub proc_lte: Option<DateTime<Utc>>,
83 pub pub_gte: Option<DateTime<Utc>>,
85 pub pub_lte: Option<DateTime<Utc>>,
87 pub time_gte: Option<DateTime<Utc>>,
89 pub time_lte: Option<DateTime<Utc>>,
91}
92
93#[async_trait]
95pub trait ApplicationUlDataModel: Sync {
96 async fn init(&self) -> Result<(), Box<dyn StdError>>;
98
99 async fn count(&self, cond: &ListQueryCond) -> Result<u64, Box<dyn StdError>>;
103
104 async fn list(
112 &self,
113 opts: &ListOptions,
114 cursor: Option<Box<dyn Cursor>>,
115 ) -> Result<(Vec<ApplicationUlData>, Option<Box<dyn Cursor>>), Box<dyn StdError>>;
116
117 async fn add(&self, data: &ApplicationUlData) -> Result<(), Box<dyn StdError>>;
119
120 async fn del(&self, cond: &QueryCond) -> Result<(), Box<dyn StdError>>;
122}
123
124#[async_trait]
129pub trait Cursor: Send {
130 async fn try_next(&mut self) -> Result<Option<ApplicationUlData>, Box<dyn StdError>>;
131
132 fn offset(&self) -> u64;
133}
134
135pub const EXPIRES: i64 = 100 * 86400;