main
use sea_orm::entity::prelude::*;
use serde::{Deserialize, Serialize};
use utoipa::ToSchema;
pub mod space_extras;
pub mod space_group_permissions;
pub mod space_groups;
pub mod space_invite_redemptions;
pub mod space_invites;
pub mod space_join_requests;
pub mod space_join_rules;
pub mod space_member_extras;
pub mod space_member_groups;
pub mod space_member_permissions;
pub mod space_member_roles;
pub mod space_members;
pub mod space_role_permissions;
pub mod space_roles;
pub mod space_warn;
pub mod spaces;
#[derive(
Clone, Copy, Debug, PartialEq, Eq, EnumIter, DeriveActiveEnum, Serialize, Deserialize, ToSchema,
)]
#[serde(rename_all = "snake_case")]
#[sea_orm(
rs_type = "String",
db_type = "String(StringLen::N(16))",
rename_all = "snake_case"
)]
pub enum SpaceStatus {
Active,
Suspended,
Archived,
}
#[derive(
Clone, Copy, Debug, PartialEq, Eq, EnumIter, DeriveActiveEnum, Serialize, Deserialize, ToSchema,
)]
#[serde(rename_all = "snake_case")]
#[sea_orm(
rs_type = "String",
db_type = "String(StringLen::N(16))",
rename_all = "snake_case"
)]
pub enum SpaceMemberRole {
Member,
Admin,
Owner,
}
#[derive(
Clone, Copy, Debug, PartialEq, Eq, EnumIter, DeriveActiveEnum, Serialize, Deserialize, ToSchema,
)]
#[serde(rename_all = "snake_case")]
#[sea_orm(
rs_type = "String",
db_type = "String(StringLen::N(16))",
rename_all = "snake_case"
)]
pub enum SpaceJoinMethod {
Direct,
InviteLink,
InviteTargeted,
InviteEmail,
}
#[derive(
Clone, Copy, Debug, PartialEq, Eq, EnumIter, DeriveActiveEnum, Serialize, Deserialize, ToSchema,
)]
#[serde(rename_all = "snake_case")]
#[sea_orm(
rs_type = "String",
db_type = "String(StringLen::N(16))",
rename_all = "snake_case"
)]
pub enum PermissionEffect {
Allow,
Deny,
}
/// 会籍的通知偏好,对应旧 `space_members.message_notifications`。
/// 旧表用 0/1/2 存,这里用字符串存,便于跨服务读写时直接透传。
#[derive(
Clone, Copy, Debug, PartialEq, Eq, EnumIter, DeriveActiveEnum, Serialize, Deserialize, ToSchema,
)]
#[serde(rename_all = "snake_case")]
#[sea_orm(
rs_type = "String",
db_type = "String(StringLen::N(16))",
rename_all = "snake_case"
)]
pub enum MessageNotifications {
All,
Mentions,
Nothing,
}
impl MessageNotifications {
pub fn as_str(self) -> &'static str {
match self {
Self::All => "all",
Self::Mentions => "mentions",
Self::Nothing => "nothing",
}
}
pub fn from_str(value: &str) -> Self {
match value.trim() {
"mentions" => Self::Mentions,
"nothing" => Self::Nothing,
_ => Self::All,
}
}
}
#[derive(
Clone, Copy, Debug, PartialEq, Eq, EnumIter, DeriveActiveEnum, Serialize, Deserialize, ToSchema,
)]
#[serde(rename_all = "snake_case")]
#[sea_orm(
rs_type = "String",
db_type = "String(StringLen::N(16))",
rename_all = "snake_case"
)]
#[derive(Default)]
pub enum SpaceJoinPolicy {
Open,
Approval,
#[default]
InviteOnly,
Private,
}
#[derive(
Clone, Copy, Debug, PartialEq, Eq, EnumIter, DeriveActiveEnum, Serialize, Deserialize, ToSchema,
)]
#[serde(rename_all = "snake_case")]
#[sea_orm(
rs_type = "String",
db_type = "String(StringLen::N(16))",
rename_all = "snake_case"
)]
#[derive(Default)]
pub enum SpaceJoinRequestState {
#[default]
Pending,
Approved,
Rejected,
Withdrawn,
}
/// 会籍状态,由 `joined_at` / `left_at` / `banned_at` 推导,供 API 层展示。
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default, Serialize, Deserialize, ToSchema)]
pub enum MemberStatus {
#[default]
Active,
Inactive,
Left,
Removed,
Banned,
}
impl space_members::Model {
pub fn status(&self) -> MemberStatus {
if self.banned_at.is_some() {
MemberStatus::Banned
} else if self.left_at.is_some() {
MemberStatus::Left
} else {
MemberStatus::Active
}
}
}
/// 允许加入的历史开关,映射 `spaces.allow_join_level`。
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default, Serialize, Deserialize, ToSchema)]
pub enum AllowJoinLevel {
#[default]
None,
NeedMailActive,
NeedMailActiveAndLastOneMid,
NeedMailActiveAndLastOneHours,
NeedMailActiveAndPhoneActive,
}
impl AllowJoinLevel {
pub fn from_i16(value: i16) -> Self {
match value {
1 => Self::NeedMailActive,
2 => Self::NeedMailActiveAndLastOneMid,
3 => Self::NeedMailActiveAndLastOneHours,
4 => Self::NeedMailActiveAndPhoneActive,
_ => Self::None,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq, Default, Serialize, Deserialize, ToSchema)]
#[serde(rename_all = "snake_case")]
pub enum SpaceJoinTrigger {
#[default]
IssueReaction,
IssueCommentReaction,
}
impl SpaceJoinTrigger {
pub fn as_str(self) -> &'static str {
match self {
Self::IssueReaction => "issue_reaction",
Self::IssueCommentReaction => "issue_comment_reaction",
}
}
pub fn from_str(value: &str) -> Self {
match value.trim() {
"issue_comment_reaction" => Self::IssueCommentReaction,
_ => Self::IssueReaction,
}
}
}