< 返回版块

philipgreat 发表于 2026-06-15 11:53

Tags:aicoding,teaql,ddd,worldcup

大家好!今天想和大家分享一个最近开源的有趣项目——World Cup 2026 - Rust Edition。

这是一个高性能、交互式的命令行(CLI)应用程序,用来查看 2026 年 FIFA 世界杯的分组和积分榜情况。

🌟 项目背景与亮点

这个项目最初是用 Java 实现的,现在我们使用 Rust + TeaQL 数据引擎 + SQLite 进行了完全的重写。得益于 Rust 的特性,这个版本实现了零冷启动开销和极速的执行效率。

最酷的是,它被编译成了一个完全静态链接的独立可执行文件(基于 musl),并打包进了一个 scratch Docker 镜像中,整个 Docker 镜像大小不到 7MB!完全不需要 JVM 或任何其他外部运行时依赖。 核心功能包括: • 交互式 CLI Shell: 带有 wc2026> 提示符的完整 REPL 体验。 • 漂亮的终端视图: 支持查看 A-L 分组,拥有完美的文本对齐、Emoji 国旗支持和动态的颜色高亮。 • TeaQL 无缝集成: 使用 TeaQL 生成的 Rust 宏和 ORM 直接映射到内嵌的 SQLite 数据库。

🛠️ 深入了解 TeaQL 核心 API 实践

在这个项目中,我们深度使用了 TeaQL 框架提供的三大核心 API,不仅让数据操作更加类型安全,也让业务代码极其易读。以下是我们在项目中的一些真实使用场景,希望能给大家在 Rust 中做数据持久化一些参考:

  1. Q API (Query API - 查询 API) Q API 提供了强类型、可链式调用的数据库查询方法,非常适合复杂的多表级联和排序。
// 场景:关系联表查询与复杂多重排序
let standings = Q::group_standings()
    .select_tournament_team_with(Q::tournament_teams().select_self()) // 级联加载队伍数据
    .with_match_group_matching(Q::match_groups().with_id_is(g.id()))
    .order_by_points_desc()
    .order_by_goal_difference_desc()
    .order_by_goals_for_desc()
    .purpose("cli").execute_for_list(ctx).await?;
  1. E API (Expression Facade - 表达式门面) E API 提供了一种安全、强类型的方式,用来从已加载的实体中提取值或导航关联关系,避免手写魔术字符串。
// 场景:强类型安全地提取实体数据
let name = E::tournament(entity)
    .get_tournament_name()
    .eval();
  1. Entity API (实体 API) Entity API 负责状态变更(增、删、改),并且它内置了非常健壮的审计日志(Audit Logging)功能。
// 场景:数据初始化与带审计追踪的插入
let mut t = Q::tournaments().new_entity(ctx);
t.update_tournament_name("FIFA World Cup 2026".to_string());
t.update_total_teams(48);

// 保存实体的同时,生成详细的 trace log 用于后续追踪
t.audit_as("Seed tournament").save(ctx).await?;

🚀 如何体验?

你可以直接使用 Docker 秒速体验(由于镜像极小,拉取瞬间完成):

docker run -it --rm teaql/worldcup2026:latest group A

或者克隆代码并在本地运行:

cd rust-workspace
cargo run

项目的代码结构非常清晰,分为领域模型 models/ 、生成的实体库 generate-lib/ 和主应用 rust-workspace/ 。非常适合作为学习 Rust 命令行开发 以及 TeaQL 框架使用 的参考样例。

非常欢迎大家去 Repo 看看,跑一下代码。如果觉得有意思欢迎点个 Star ⭐️,也期待在评论区听到你们的建议和探讨!

🔗 项目仓库地址:https://github.com/teaql/teaql-rust-app-examples/tree/main/001-world-cpu-2006-cli

评论区

写评论

还没有评论

1 共 0 条评论, 1 页