1use mongodb::bson::oid::ObjectId;
2use mongodb::bson::DateTime;
3use serde::{Deserialize, Serialize};
4
5use crate::serialize_option_oid_as_string;
6use crate::role::RoleItems;
7
8pub const LOCAL_APP: &str = "local";
9
10#[derive(Clone, Debug, Deserialize, Serialize, PartialEq)]
11#[serde(rename_all = "camelCase")]
12pub struct App {
13 #[serde(
14 rename(serialize = "id", deserialize = "_id"),
15 skip_serializing_if = "Option::is_none",
16 serialize_with = "serialize_option_oid_as_string"
17 )]
18 pub id: Option<ObjectId>,
19 pub name: String,
20 pub version: u64,
21 pub default_role: RoleItems,
22 #[serde(skip_serializing_if = "Option::is_none")]
23 pub created_at: Option<DateTime>,
24 #[serde(skip_serializing_if = "Option::is_none")]
25 pub updated_at: Option<DateTime>,
26}
27
28impl Default for App {
29 fn default() -> Self {
30 Self {
31 id: None,
32 name: LOCAL_APP.to_string(),
33 version: 1,
34 default_role: RoleItems::local(),
35 created_at: None,
36 updated_at: None,
37 }
38 }
39}
40
41impl App {
42 pub fn id(&self) -> ObjectId {
43 self.id.unwrap_or_default()
44 }
45}