返回顶部
f

fosmvvm-fluent-datamodel-generatorFluent数据模型生成器

Generate Fluent DataModels for FOSMVVM server-side persistence. Scaffolds models, migrations, and tests for database-backed entities.

作者: admin | 来源: ClawHub
源自
ClawHub
版本
V 2.0.6
安全检测
已通过
693
下载量
免费
免费
0
收藏
概述
安装方式
版本历史

fosmvvm-fluent-datamodel-generator

FOSMVVM Fluent DataModel 生成器

按照 FOSMVVM 架构生成用于服务端持久化的 Fluent DataModel。

依赖: 本技能使用 fosmvvm-fields-generator 生成 Fields 层(协议、消息、YAML)。对于表单驱动的模型,请先运行该技能。

适用范围守卫

本技能专门用于 Fluent 持久化层(通常用于 Vapor 服务端应用)。

遇到以下情况请停止并询问用户:

  • - 项目未使用 Fluent
  • 目标仅为 iOS 端,使用 CoreData、SwiftData 或 Realm
  • 用户提及非 Fluent 的 ORM 或持久化层
  • 您不确定 Fluent 是否为持久化层

检查 Fluent 相关标识:

  • - Package.swift 导入了 fluent、fluent-postgres-driver、fluent-sqlite-driver 等
  • 现有模型使用了 @ID、@Field、@Parent、@Children、@Siblings 属性包装器
  • 存在包含 Fluent 迁移模式的 Migrations/ 目录
  • 导入语句包含 FluentKit 或 Fluent

如果未检测到 Fluent,请告知用户:本技能用于生成服务端持久化的 Fluent DataModel。您的项目似乎未使用 Fluent。请问您希望如何处理?



何时使用本技能

  • - 用户要求创建新的模型/实体/表
  • 用户想要添加数据库支持的类型(用户、想法、文档等)
  • 用户提及需要为新概念实现 CRUD 操作
  • 为新实体创建持久化层

架构上下文

在 FOSMVVM 中,Model 是核心——所有读写操作流经的事实来源。

完整上下文请参见 FOSMVVMArchitecture.md | OpenClaw 参考

架构中的 DataModel

┌─────────────────────────────────────┐
│ Fluent DataModel │
│ (实现 Model + Fields) │
│ │
│ • 所有字段(系统 + 用户) │
│ • 关系(@Parent 等) │
│ • 时间戳、审计字段 │
│ • 持久化逻辑 │
└──────────────┬──────────────────────┘

┌────────────────────┼────────────────────────┐
│ │ │
▼ ▼ ▼
┌─────────────────┐ ┌─────────────────┐ ┌─────────────────┐
│ ViewModelFactory│ │ CreateRequest │ │ UpdateRequest │
│ (投影器) │ │ RequestBody │ │ RequestBody │
│ │ │ │ │ │
│ → ViewModel │ │ → 持久化到 │ │ → 更新 │
│ (投影) │ │ DataModel │ │ DataModel │
└─────────────────┘ └─────────────────┘ └─────────────────┘

Fields 与 DataModels 的区别

Fields 协议 = 表单输入(用户可编辑的子集)

  • - 用户输入到表单的内容
  • 验证、标签、占位符
  • 不包含关系,不包含系统分配字段

DataModel = 完整实体(Fluent 实现)

  • - 所有字段,包括系统分配字段(createdBy、时间戳)
  • 所有关系(@Parent、@Siblings、@Children)
  • Fluent 属性包装器、迁移、种子数据

并非所有实体都需要 Fields:

  • - 会话:系统认证,无用户表单 → 仅 DataModel
  • 审计记录:系统生成 → 仅 DataModel
  • 连接表:纯存储 → 仅 DataModel



文件结构

每个表单驱动的模型需要跨多个目标创建文件:

── fosmvvm-fields-generator ──────────────────────────────────
{ViewModelsTarget}/ (共享协议层)
FieldModels/
{Model}Fields.swift ← 协议 + 枚举 + 验证
{Model}FieldsMessages.swift ← 本地化消息结构体

{ResourcesPath}/ (本地化资源)
FieldModels/
{Model}FieldsMessages.yml ← YAML 本地化字符串

── fosmvvm-fluent-datamodel-generator (本技能) ───────────────
{WebServerTarget}/ (服务端实现)
DataModels/
{Model}.swift ← Fluent 模型(实现协议)
Migrations/
{Model}+Schema.swift ← 表创建迁移
{Model}+Seed.swift ← 种子数据迁移

Tests/
{ViewModelsTarget}Tests/
FieldModels/
{Model}FieldsTests.swift ← 单元测试

database.swift ← 注册迁移



如何使用本技能

调用方式:
/fosmvvm-fluent-datamodel-generator

前置条件:

  • - 通过对话上下文理解模型结构
  • 如果为表单驱动模型,Fields 协议已通过 fosmvvm-fields-generator 创建
  • 已识别关系和系统分配字段
  • 已确认 Fluent 为持久化层

工作流集成:
本技能用于使用 Fluent 的服务端持久化。对于表单驱动模型,请先运行 fosmvvm-fields-generator 创建 Fields 协议。技能会自动引用对话上下文——无需文件路径或问答。

模式实现

本技能引用对话上下文来确定 DataModel 结构:

模型类型检测

通过对话上下文,技能识别:

  • - 实体用途(用户数据、系统记录、审计日志、连接表)
  • 用户输入参与度(表单驱动 vs 系统生成)
  • Fields 协议需求(如果用户编辑此数据)

关系分析

根据上下文中已有的需求:

  • - 一对多关系(DataModel 中使用 @Parent,Fields 中不使用)
  • 多对多关系(连接表 + @Siblings,不使用 UUID 数组)
  • 关系命名(自文档化名称,而非模糊引用)

字段分类

基于数据来源:

  • - 用户可编辑字段(来自 Fields 协议)
  • 系统分配字段(createdBy、时间戳、状态——仅 DataModel)
  • 计算关系(@Parent、@Children、@Siblings)

文件生成顺序

如果是表单驱动模型(Fields 协议已存在):

  1. 1. Fields 层已通过 fosmvvm-fields-generator 创建
  2. 引用 Fields 的 DataModel 实现
  3. Schema 迁移
  4. 种子数据迁移
  5. 测试
  6. 迁移注册

如果是纯系统模型(无 Fields):

  1. 1. DataModel 结构体
  2. Schema 迁移
  3. 种子数据迁移(如果需要)
  4. 测试
  5. 迁移注册

设计验证

在生成之前,技能验证:

  1. 1. 表单需求 - 系统生成的实体跳过 Fields
  2. 关系模式 - 多对多使用连接表,外键使用 @Parent
  3. 命名清晰度 - 关系具有自文档化名称
  4. 字段分离 - 用户字段在协议中,系统字段仅在 DataModel 中

上下文来源

技能引用的信息来自:

  • - 先前的对话:模型需求、讨论的关系
  • Fields 协议:如果 Claude 已将 Fields 协议读入上下文或刚刚创建
  • 数据库模式:通过代码库分析现有模型
  • 迁移模式:通过项目中的现有迁移



文件模板

请参见 reference.md 获取包含所有模式的完整文件模板。



关键模式

Fluent DataModel

swift
import FluentKit
import FOSFoundation
import FOSMVVM
import FOSMVVMVapor
import Foundation

final class {Model}: DataModel, {Model}Fields, Hashable, @unchecked Sendable {
static let schema = {models} // 蛇形命名复数

@ID(key: .id) var id: ModelIdType?

// 来自协议的字段
@Field(key: field_name) var fieldName: FieldType

// 验证消息
let {model}ValidationMessages: {Model}FieldsMessages

// 时间戳
@Timestamp(key: created_at, on: .create) var createdAt: Date?
@Timestamp(key: updated_at, on: .update) var updatedAt: Date?

// 关键:首先初始化 validationMessages
init() {
self.{model}ValidationMessages = .init()
}

init(id: ModelIdType? = nil, fieldName: Field

标签

skill ai

通过对话安装

该技能支持在以下平台通过对话安装:

OpenClaw WorkBuddy QClaw Kimi Claude

方式一:安装 SkillHub 和技能

帮我安装 SkillHub 和 fosmvvm-fluent-datamodel-generator-1776420040 技能

方式二:设置 SkillHub 为优先技能安装源

设置 SkillHub 为我的优先技能安装源,然后帮我安装 fosmvvm-fluent-datamodel-generator-1776420040 技能

通过命令行安装

skillhub install fosmvvm-fluent-datamodel-generator-1776420040

下载

⬇ 下载 fosmvvm-fluent-datamodel-generator v2.0.6(免费)

文件大小: 9.32 KB | 发布时间: 2026-4-17 19:39

v2.0.6 最新 2026-4-17 19:39
Initial ClawHub release

Archiver·手机版·闲社网·闲社论坛·羊毛社区· 多链控股集团有限公司 · 苏ICP备2025199260号-1

Powered by Discuz! X5.0   © 2024-2025 闲社网·线报更新论坛·羊毛分享社区·http://xianshe.com

p2p_official_large
返回顶部