projectlib/jsonb/
group.rs

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
use crate::jsonb::project_user::ProjectUser;
use serde::{Deserialize, Serialize};

//todo fields
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq)]
pub struct Group {
    #[serde(skip_serializing_if = "Option::is_none")]
    pub name: Option<String>,
    #[serde(skip_serializing_if = "Option::is_none")]
    pub users: Option<Vec<ProjectUser>>,
}

impl Group {
    pub fn normalize(&self) -> Group {
        Group {
            name: self.name.clone(),
            users: self.users.clone(),
        }
    }

    pub fn try_add_user_to_group(&self, user: ProjectUser) -> Group {
        Group {
            name: self.name.clone(),
            users: {
                if self.users.is_none() {
                    let mut users = vec![];
                    users.push(user.add_requested_user());
                    Option::from(users)
                } else {
                    let mut users = self.users.clone().unwrap();
                    if users.iter().all(|u| u.id != user.id) {
                        users.push(user.add_requested_user());
                    }
                    Option::from(users)
                }
            },
        }
    }
}