Files
orm-cj/src/seeds/Seed.cj
T

46 lines
1.5 KiB
Plaintext

/*
* Copyright (c) 2025 SimcuTeam. All rights reserved.
* 数据填充(Seed)抽象基类(内部接口,用户不直接继承)。
*
* 用户侧用法:@Seed 类级宏(见 simcu::orm.macros),标注一个普通类,
* seedId 取类名,属性参数仅作描述:
* @Seed["初始化游戏服务器配置"]
* public class InitGames {
* public func run(ctx: DataContext): Unit {
* if (ctx.games.find("game-1").isNone()) {
* let g = Game()
* g.id = "game-1"
* g.apiKey = "key-1"
* g.name = "测试服"
* ctx.games.add(g)
* ctx.saveChanges()
* }
* }
* }
*
* 宏展开自动生成包装类(继承本基类)+ 顶层 let 注册到全局注册表,
* 用户无需手写注册文件。CLI `orm seed` 运行时把应用自己的
* DataContext 实例作为 ctx 传入 run 方法。
*
* 语义:不记录运行历史,可随时/多次运行,幂等由用户代码自行保证
* (如按 id find 后不存在再插入)。
*/
package simcu::orm.seeds
/// 数据填充统一接口(CLI 内部使用)。
public abstract class Seed {
/// 唯一 id(取 @Seed 标注的类名)
public let seedId: String
/// 填充内容说明(CLI 列表展示)
public let description: String
public init(seedId: String, description: String) {
this.seedId = seedId
this.description = description
}
/// 执行填充。ctx 为应用自己的 DbContext 实例(宏生成的包装类负责转型)。
public func run(ctx: Any): Unit
}