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,
}