sz_rust_orm_facade/lib.rs
1//! ORM Facade — 统一访问 sz-orm 全家桶
2//!
3//! ## 设计目标
4//!
5//! 减少 `sz-rust-addons-operate`、`sz-rust-sz300` 等业务包对 `sz-orm-*` 子包的穿透依赖。
6//! 业务包应通过 `sz_rust_orm_facade::*` 访问 ORM 功能,而非直接依赖 `sz-orm-core`、
7//! `sz-orm-auth`、`sz-orm-mqtt`、`sz-orm-scheduler`、`sz-orm-logger`。
8//!
9//! ## 使用示例
10//!
11//! ```ignore
12//! // 业务包统一通过 facade 访问(推荐)
13//! use sz_rust_orm_facade::{Pool, Value, Model, ModelExt, Authorizer, JwtAuthenticator, MqttConfig, QoS};
14//! use sz_rust_orm_facade::repository::{Repository, WhereCondition, WhereOp};
15//! use sz_rust_orm_facade::scheduler::{CronScheduler, JobHandler, ScheduledTask, Scheduler};
16//! ```
17
18// ============================================================================
19// sz-orm-core:连接池 + 模型 trait + 值类型 + 仓储层 + 错误类型 + 迁移系统
20// ============================================================================
21pub use sz_orm_core::{
22 value_to_json,
23 BelongsTo,
24 BelongsToMany,
25 Cache,
26 CacheError,
27 Connection,
28 ConnectionFactory,
29 DbError,
30 DbType,
31 HasMany,
32 HasOne,
33 MemoryCache,
34 Model,
35 ModelExt,
36 MorphMany,
37 MorphTo,
38 Pool,
39 PoolConfig,
40 PoolConfigBuilder,
41 PoolError,
42 Relation,
43 RelationAccess,
44 RelationError,
45 RelationLoader,
46 TimestampFields,
47 Value,
48 // NOTE: WithRelation intentionally NOT re-exported at facade root — it is
49 // exported by both sz_orm_model and sz_orm_query via glob re-exports in
50 // sz-orm-core, which is ambiguous under Rust 1.96+'s deny(ambiguous_glob_imports).
51 // Use `crate::find_with_related::WithRelation` instead.
52};
53
54// MultiLevelCache is publicly re-exported at the sz_orm_core crate root via `pub use cache::*`
55pub use sz_orm_core::MultiLevelCache;
56
57/// 仓储子模块(Repository trait + WhereCondition/WhereOp 条件构造)
58///
59/// 业务层应通过 `sz_rust_orm_facade::repository::{Repository, WhereCondition, WhereOp}` 访问,
60/// 而非直接依赖 `sz_orm_core::repository`,以保持 facade 收口。
61pub mod repository {
62 pub use sz_orm_core::repository::{
63 BatchUpdateResult, EntityAttributes, EntityKey, GenericKeyRepository, InMemoryRepository,
64 PageResult, Repository, RepositoryError, RepositoryResult, WhereCondition, WhereOp,
65 };
66}
67
68/// 迁移子模块(schema migration)
69///
70/// 业务层应通过 `sz_rust_orm_facade::migration::*` 访问,
71/// 而非直接依赖 `sz_orm_core::migration`。
72pub mod migration {
73 pub use sz_orm_core::migration::{
74 FileMigrationResolver, Migration, MigrationContext, MigrationResolver, Migrator,
75 };
76}
77
78// ============================================================================
79// sz-orm-auth:认证 + 授权
80// ============================================================================
81pub use sz_orm_auth::{Authorizer, JwtAuthenticator, RbacAuthorizer};
82
83/// 认证子模块(Credentials / User / Claims 等数据结构)
84///
85/// 业务层应通过 `sz_rust_orm_facade::auth::{Credentials, User, Claims}` 访问,
86/// 而非直接依赖 `sz_orm_auth::auth`。
87pub mod auth {
88 pub use sz_orm_auth::auth::{Claims, Credentials, User};
89}
90
91/// JWT 子模块(JwtEncoder / JwtClaims 等编码工具)
92pub mod jwt {
93 pub use sz_orm_auth::jwt::{JwtClaims, JwtEncoder};
94}
95
96// ============================================================================
97// sz-orm-mqtt:MQTT 消息队列
98// ============================================================================
99pub use sz_orm_mqtt::{MqttConfig, MqttError, MqttMessage, MqttPlugin, MqttTopic, QoS};
100
101// ============================================================================
102// sz-orm-scheduler:定时任务调度器
103// ============================================================================
104/// 调度器子模块(CronScheduler / JobHandler / ScheduledTask 等)
105///
106/// 业务层应通过 `sz_rust_orm_facade::scheduler::*` 访问,
107/// 而非直接依赖 `sz_orm_scheduler`。
108pub mod scheduler {
109 pub use sz_orm_scheduler::{
110 CounterJobHandler, CronExpr, CronScheduler, JobHandler, RecordingJobHandler, ScheduledTask,
111 Scheduler, SchedulerError,
112 };
113}
114
115/// 调度器根级 re-export(供 core 内部 dogfood 使用)
116pub use sz_orm_scheduler::{
117 CronExpr, CronScheduler, JobHandler, RecordingJobHandler, ScheduledTask, Scheduler,
118 SchedulerError,
119};
120
121// ============================================================================
122// sz-orm-logger:日志适配器
123// ============================================================================
124/// 日志子模块(Logger / LogEntry / LogLevel 等)
125///
126/// 业务层应通过 `sz_rust_orm_facade::logger::*` 访问,
127/// 而非直接依赖 `sz_orm_logger`。
128pub mod logger {
129 pub use sz_orm_logger::{
130 LogEntry, LogLevel, Logger, LoggerFactory, Metrics, MetricsSnapshot, StructuredLogger,
131 };
132}
133
134// ============================================================================
135// sz-orm-query-builder:链式 SQL 构造器(sea-query 风格,独立于 Model)
136// ============================================================================
137pub use sz_orm_query_builder::{
138 BuiltQuery, DeleteQuery, InsertQuery, Query, SelectQuery, UpdateQuery,
139};
140
141// ============================================================================
142// sz-orm-macros:编译时 SQL 宏(sql_string! / query! 等)
143// ============================================================================
144pub use sz_orm_macros::{query, sql_string};
145
146// ============================================================================
147// sz-orm-core 补充子模块(core 内部 dogfood 所需)
148// ============================================================================
149
150/// Hooks 子模块(生命周期钩子)
151///
152/// 业务层应通过 `sz_rust_orm_facade::hooks::*` 访问,
153/// 而非直接依赖 `sz_orm_core::hooks`。
154pub mod hooks {
155 pub use sz_orm_core::hooks::*;
156}
157
158/// L2 缓存子模块(二级缓存共享层)
159///
160/// 业务层应通过 `sz_rust_orm_facade::l2_cache::*` 访问,
161/// 而非直接依赖 `sz_orm_core::l2_cache`。
162pub mod l2_cache {
163 pub use sz_orm_core::l2_cache::*;
164}
165
166/// 关联查询子模块(find_with_related eager/join/subquery 策略)
167///
168/// 业务层应通过 `sz_rust_orm_facade::find_with_related::*` 访问,
169/// 而非直接依赖 `sz_orm_core::find_with_related`。
170pub mod find_with_related {
171 pub use sz_orm_core::find_with_related::{
172 find_with_related_eager_sql, find_with_related_join, find_with_related_subquery,
173 inspect_relation, FindWithRelated, WithRelation, WithRelation as FindWithRelation,
174 };
175}
176
177// ============================================================================
178// sz-orm-limit:限流器(速率限制中间件依赖)
179// ============================================================================
180pub use sz_orm_limit::{
181 DistributedRateLimiter, FixedWindowRateLimiter, InMemoryBackend, RateLimitError,
182 RateLimitHeaders, RateLimitResponseStrategy, RateLimitResult, SlidingWindowRateLimiter,
183 TokenBucketRateLimiter,
184};
185
186/// RateLimiter trait re-export(限流中间件核心 trait)
187pub use sz_orm_limit::RateLimiter;
188
189// ============================================================================
190// sz-orm-tracing:分布式追踪(trace 中间件依赖)
191// ============================================================================
192pub use sz_orm_tracing::{
193 Alert, AlertHook, AlertLevel, ErrorBudget, ErrorRateCounter, LatencyHistogram, LogAlertHook,
194 OtelTracer, SaturationGauge, SlaMonitor, SlaReport, Span, SpanLog, SzTracer, Tracer,
195 TracingError,
196};
197
198// ============================================================================
199// sz-orm-queue:消息队列(runtime::queue 依赖)
200// ============================================================================
201pub use sz_orm_queue::{
202 ActiveConfig, BackpressurePolicy, InMemoryQueue, KafkaConfig, Message, MessageQueue, MqError,
203 MqProvider, NatsConfig, OverflowStrategy, PulsarConfig, QueueConfig,
204};
205
206// ============================================================================
207// sz-orm-websocket:WebSocket 服务(runtime::websocket 依赖)
208// ============================================================================
209pub use sz_orm_websocket::{DefaultWebSocketHandler, WebSocketHandler, WsError, WsServer};
210
211// ============================================================================
212// sz-orm-storage:云存储驱动(upload/storage 依赖)
213// ============================================================================
214pub use sz_orm_storage::{
215 AliyunOssStorage, HuaweiObsStorage, LocalStorage, QiniuKodoStorage, S3Storage, Storage,
216 StorageBuilder, StorageConfig, StorageError, StorageProvider, StorageWrapper,
217 TencentCosStorage, UpYunStorage,
218};
219
220// ============================================================================
221// sz-orm-sql-validator:SQL 安全校验(SQL 注入防护)
222// ============================================================================
223pub use sz_orm_sql_validator::{
224 detect_statement_type, validate, validate_column_name, validate_delete, validate_insert,
225 validate_parameter_count, validate_select, validate_sql, validate_table_name, validate_update,
226 ComplexityLevel, SqlComplexityScore, SqlStatementType, SqlToken, SqlValidationError,
227 ValidationResult, WhitelistValidator,
228};
229
230// ============================================================================
231// sz-orm-graphql — GraphQL 集成(可选 feature: graphql)
232// ============================================================================
233#[cfg(feature = "graphql")]
234pub mod graphql;
235
236// ============================================================================
237// sz-orm-grpc — gRPC 支持(可选 feature: grpc)
238// ============================================================================
239#[cfg(feature = "grpc")]
240pub mod grpc;
241
242// ============================================================================
243// 连接池配置调优(L2 方案:sqlx 配置调优,不修改 sz-orm 上游)
244// ============================================================================
245pub mod pool_config;
246pub use pool_config::SqlxPoolConfig;