用途:按 Go 模块化架构约定生成仓储端口接口与 GORM 实现,适用于实体数据访问层、CRUD、自定义查询、分页、事务、JOIN 查询与带过滤的查找。
主要能力:采用两文件模式,端口接口位于 internal/modules/<module>/ports/<entity>_repository.go,实现位于 internal/modules/<module>/repository/<entity>_repository.go。接口包含 FindAll、FindByID、Create、Update、Delete,可分页变体 FindAll(ctx, page, pageSize) 返回列表与总数,也可添加 FindByName、FindBySKU 等自定义方法。实现嵌入 *database.PingoDB,构造函数必须返回指针并使用命名字段初始化 {PingoDB: db},并添加接口断言 var _ ports.EntityRepository = (*EntityRepository)(nil)。
用法要点:每个方法以 ctx, span := trace.Span(ctx, "Repo.Method") 开始并 defer span.End(),变量名固定为 span。单条查询必须在 .First(ctx) 前加 .Limit(1)。未找到时返回 brickserrs.ErrRecordNotFound;定向删除检查 rowsAffected == 0,批量清理删除忽略行数。零值更新使用 map[string]any 或 Select(fields).Updates(&model)。简单查询用 gorm.GModel,动态多条件 WHERE、JOIN、子查询或含原始 SQL 片段的 Select 回退到 r.DB.WithContext(ctx).Model(...)。事务用 r.DB.Begin() 配合 Rollback/Commit。Fx 装配在模块 fx.go 中用 fx.Provide 与 fx.Annotate 绑定接口。生成后运行 make lint 与 make nilaway。
限制:资料未提供安装命令、收费、平台与效果信息;需遵循其反模式约束,如不得使用位置初始化、不得添加冗余方法注释、接口类型必须有完整文档注释。