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
40
41
42
43
44
45
46
47
48
49
50
use async_graphql::{Enum, SimpleObject};
use chrono::{DateTime, Utc};
use poem_openapi::Enum as OpenApiEnum;
use poem_openapi::Object;
use serde::{Deserialize, Serialize};
use strum_macros::Display;
use strum_macros::EnumString;
use uuid::Uuid;

#[derive(Debug, SimpleObject, Object, Clone)]
pub struct Member {
    pub id: Uuid,
    pub created_at: DateTime<Utc>,
    pub updated_at: DateTime<Utc>,

    pub name: String,
    pub email: String,

    pub role: MemberRole,

    pub github_id: Option<String>,
    pub google_id: Option<String>,

    pub photo_url: Option<String>,

    #[graphql(skip)]
    #[oai(skip)]
    pub password_hash: Option<String>,
}

#[derive(
    Debug,
    Enum,
    OpenApiEnum,
    Copy,
    Clone,
    Default,
    Display,
    EnumString,
    Deserialize,
    Serialize,
    Eq,
    PartialEq,
)]
pub enum MemberRole {
    Admin,
    #[default]
    Member,
    ReadOnly,
}