# 可链接自定义表单 **Repository Path**: marsdonne/linkable-custom-forms ## Basic Information - **Project Name**: 可链接自定义表单 - **Description**: rust demo - **Primary Language**: Rust - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-06-25 - **Last Updated**: 2026-07-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README *** # Linkable Custom Forms (LCF) 一个基于 Rust 和 GraphQL 的自定义表单后端服务。 ## 项目背景 这是作者在学习完《Rust 程序设计语言》(The Rust Book)后编写的第一个 Rust 项目。项目尝试将既往的后端开发经验(DDD、Repository 模式等)应用于 Rust 生态,探索所有权系统、Trait 多态和异步编程在实际业务中的应用。 ## 核心功能 ### 1. 关联查询 (Linkable Instances) 支持表单实例间的引用关系(例如“订单”关联“购物车”)。通过 GraphQL DataLoader 实现批量加载,避免 N+1 查询问题。 ### 2. 游标分页 (Cursor Pagination) 实现 Relay 风格的游标分页接口。利用 PostgreSQL 的 `MIN/MAX` 聚合查询判断前后页状态,避免 `COUNT` 操作的性能开销。 ### 3. 动态过滤 (Dynamic Filtering) 支持基于 JSONB 的动态字段过滤。客户端可传入任意 JSON 对象作为查询条件,利用 PostgreSQL 的 `@>` 操作符实现高效匹配。 ## 项目结构 (Workspace & Crates) 本项目采用 Cargo Workspace 管理多 crate 依赖: ```text . ├── lcf-model/ # 领域模型层 │ ├── form.rs # FormInstance, FormDefinition 实体 │ └── repository.rs # Repository Trait 定义 │ ├── lcf-store-pgsql/ # 基础设施层 (PostgreSQL 实现) │ ├── lib.rs # PgRepository 实现 │ └── migrations/ # Flyway 迁移脚本 │ ↓ 依赖 lcf-model │ ├── lcf-api-graphql/ # 接口层 (GraphQL Schema) │ ├── types.rs # GraphQL 类型定义 (InputObject, SimpleObject) │ └── resolvers.rs # Query/Mutation 实现 │ ↓ 依赖 lcf-model, lcf-store-pgsql │ ├── lcf-server/ # 应用启动层 (Axum) │ └── lib.rs # 组装 Router 和 Schema │ ↓ 依赖 lcf-api-graphql, lcf-store-pgsql │ └── lcf-integration-tests/ # 集成测试 └── tests/ # 基于 Testcontainers 的端到端测试 ↓ 依赖 lcf-server, lcf-store-pgsql ``` **依赖流向**: `lcf-model` (无依赖) → `lcf-store-pgsql` → `lcf-api-graphql` → `lcf-server` ## 技术栈 * **Language**: Rust 2024 Edition (Async/Await, Traits, Generics) * **API**: async-graphql (Relay Connection) * **Database**: PostgreSQL (via sqlx) * **Testing**: Testcontainers (PostgreSQL 18.1) --- ## 🤖 AI Collaboration 本项目由 **Qwen Studio (Web)** 辅助开发。 * **Model**: `qwen3.7-plus` * **Session Link**: [https://chat.qwen.ai/s/a8e6562b-5730-4592-aa54-4ccc46613a0b?fev=0.2.68] * **Chat Export JSON**: [chat-export-1783302757959.json](./qwen-chat-export-1783302757959.json)