cool_core/constant/
mod.rs

1//! 全局常量定义
2//!
3//! 对应 TypeScript 版本的 `constant/global.ts`
4
5use std::str::FromStr;
6
7use crate::error::CoolError;
8
9/// 错误信息常量
10pub mod error_info {
11    /// 没有实体
12    pub const NO_ENTITY: &str = "该服务没有设置实体";
13    /// 没有ID
14    pub const NO_ID: &str = "缺少ID参数";
15    /// 没有找到数据
16    pub const NOT_FOUND: &str = "数据不存在";
17    /// 参数验证失败
18    pub const VALIDATE_FAIL: &str = "参数验证失败";
19    /// 未授权
20    pub const UNAUTHORIZED: &str = "未授权访问";
21    /// 禁止访问
22    pub const FORBIDDEN: &str = "禁止访问";
23    /// 服务器错误
24    pub const SERVER_ERROR: &str = "服务器内部错误";
25}
26
27/// 响应码
28#[derive(Debug, Clone, Copy, PartialEq, Eq)]
29#[repr(i32)]
30pub enum ResCode {
31    /// 成功
32    Success = 1000,
33    /// 失败
34    Fail = 1001,
35    /// 验证失败
36    ValidateFail = 1002,
37    /// 核心异常
38    CoreError = 1003,
39    /// 通用异常
40    CommError = 1004,
41    /// 未授权
42    Unauthorized = 1005,
43    /// 禁止访问
44    Forbidden = 1006,
45    /// 未找到
46    NotFound = 1007,
47}
48
49impl ResCode {
50    /// 转换为 i32
51    pub fn code(&self) -> i32 {
52        *self as i32
53    }
54}
55
56/// CRUD 操作类型
57#[derive(Debug, Clone, Copy, PartialEq, Eq)]
58pub enum CrudType {
59    /// 新增
60    Add,
61    /// 删除
62    Delete,
63    /// 修改
64    Update,
65    /// 分页查询
66    Page,
67    /// 详情查询
68    Info,
69    /// 列表查询
70    List,
71}
72
73/// 实现 FromStr trait
74impl FromStr for CrudType {
75    type Err = CoolError;
76
77    /// 从字符串解析为 CrudType
78    fn from_str(s: &str) -> Result<Self, Self::Err> {
79        match s.to_lowercase().as_str() {
80            "add" => Ok(Self::Add),
81            "delete" => Ok(Self::Delete),
82            "update" => Ok(Self::Update),
83            "page" => Ok(Self::Page),
84            "info" => Ok(Self::Info),
85            "list" => Ok(Self::List),
86            _ => Err(CoolError::validate(format!("无效的 CrudType: {}", s))),
87        }
88    }
89}
90
91// 独立 impl 块定义其他方法
92impl CrudType {
93    /// 转换为字符串
94    pub fn as_str(&self) -> &'static str {
95        match self {
96            Self::Add => "add",
97            Self::Delete => "delete",
98            Self::Update => "update",
99            Self::Page => "page",
100            Self::Info => "info",
101            Self::List => "list",
102        }
103    }
104
105    /// 获取描述
106    pub fn description(&self) -> &'static str {
107        match self {
108            Self::Add => "新增",
109            Self::Delete => "删除",
110            Self::Update => "修改",
111            Self::Page => "分页查询",
112            Self::Info => "详情查询",
113            Self::List => "列表查询",
114        }
115    }
116
117    /// 获取请求方法
118    pub fn method(&self) -> &'static str {
119        match self {
120            Self::Info => "GET",
121            _ => "POST",
122        }
123    }
124}
125
126/// 文件上传模式
127#[derive(Debug, Clone, Copy, PartialEq, Eq)]
128pub enum FileMode {
129    /// 本地存储
130    Local,
131    /// 云存储
132    Cloud,
133    /// 其他
134    Other,
135}
136
137/// 云存储类型
138#[derive(Debug, Clone, Copy, PartialEq, Eq)]
139pub enum CloudType {
140    /// 阿里云 OSS
141    Oss,
142    /// 腾讯云 COS
143    Cos,
144    /// 七牛云
145    Qiniu,
146    /// AWS S3
147    Aws,
148}
149
150/// 数据库类型
151#[derive(Debug, Clone, Copy, PartialEq, Eq)]
152pub enum DbType {
153    /// MySQL
154    Mysql,
155    /// PostgreSQL
156    Postgres,
157    /// SQLite
158    Sqlite,
159}
160
161impl DbType {
162    /// 从 SeaORM DatabaseBackend 转换
163    pub fn from_backend(backend: sea_orm::DatabaseBackend) -> Self {
164        match backend {
165            sea_orm::DatabaseBackend::MySql => Self::Mysql,
166            sea_orm::DatabaseBackend::Postgres => Self::Postgres,
167            sea_orm::DatabaseBackend::Sqlite => Self::Sqlite,
168        }
169    }
170}