From a18e4847c2c5205da2886a4bf99565bcdb24c14a Mon Sep 17 00:00:00 2001 From: yangzhaohan Date: Wed, 15 Jul 2026 00:06:54 +0800 Subject: [PATCH] =?UTF-8?q?feat(core):=20=E6=96=B0=E5=A2=9E=E5=9F=BA?= =?UTF-8?q?=E7=A1=80=E4=BB=93=E5=BA=93=E6=8E=A5=E5=8F=A3=E5=8F=8A=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E6=A8=A1=E5=9E=8B=E4=BB=93=E5=BA=93=E5=AE=9A=E4=B9=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增 BaseRepository 泛型接口,定义通用增删改查方法 - 实现 BaseRepo 结构体及其 Insert 方法 - 定义 ProviderRepository、ModelRepository、ChannelRepository、APIKeyRepository 接口,继承基础接口 - 将模型结构 JanusModel 和 JanusProvider 重命名为 Model 和 Provider - 创建 ProviderRepo 结构体,组合基础仓库实现 Provider 仓库功能 --- internal/core/base_repository.go | 29 ++++++++++++++++++++++++++++ internal/model/model.go | 4 ++-- internal/model/provider.go | 4 ++-- internal/repository/interfaces.go | 23 ++++++++++++++++++++++ internal/repository/provider_repo.go | 10 ++++++++++ 5 files changed, 66 insertions(+), 4 deletions(-) create mode 100644 internal/core/base_repository.go create mode 100644 internal/repository/interfaces.go create mode 100644 internal/repository/provider_repo.go diff --git a/internal/core/base_repository.go b/internal/core/base_repository.go new file mode 100644 index 0000000..395a3bf --- /dev/null +++ b/internal/core/base_repository.go @@ -0,0 +1,29 @@ +package core + +import ( + "context" + + "gorm.io/gorm" +) + +// BaseRepository 是一个泛型接口,定义了基本的增删改查操作 +type BaseRepository[T any] interface { + // Insert 插入一条记录 + Insert(ctx context.Context, record *T) error + // SelectById 根据id查询一条记录 + SelectById(ctx context.Context, id int64) (*T, error) + // List 查询所有记录 + List(ctx context.Context) ([]*T, error) + // Update 更新一条记录 + Update(ctx context.Context, record *T) error + // Delete 根据id删除一条记录 + Delete(ctx context.Context, id int64) error +} + +type BaseRepo[T any] struct { + db *gorm.DB +} + +func (repo *BaseRepo[T]) Insert(ctx context.Context, record *T) error { + return repo.db.WithContext(ctx).Create(record).Error +} diff --git a/internal/model/model.go b/internal/model/model.go index 9d7dec0..89d77d5 100644 --- a/internal/model/model.go +++ b/internal/model/model.go @@ -8,8 +8,8 @@ import ( // Type 模型类型 type Type string -// JanusModel 供应商下可用的AI模型 -type JanusModel struct { +// Model 供应商下可用的AI模型 +type Model struct { core.BaseModel // ProviderID 供应商ID ProviderID int64 `gorm:"not null" json:"provider_id"` diff --git a/internal/model/provider.go b/internal/model/provider.go index 59c2af0..c32210f 100644 --- a/internal/model/provider.go +++ b/internal/model/provider.go @@ -5,8 +5,8 @@ import ( "synoth.com/janus/internal/enum" ) -// JanusProvider 服务提供商 -type JanusProvider struct { +// Provider 服务提供商 +type Provider struct { core.BaseModel // Name 服务供应商名称 Name string `gorm:"uniqueIndex;size:100;not null" json:"name"` diff --git a/internal/repository/interfaces.go b/internal/repository/interfaces.go new file mode 100644 index 0000000..fc64243 --- /dev/null +++ b/internal/repository/interfaces.go @@ -0,0 +1,23 @@ +package repository + +import ( + "synoth.com/janus/internal/core" + "synoth.com/janus/internal/model" +) + +// ProviderRepository 模型服务商的接口定义 +type ProviderRepository interface { + core.BaseRepository[model.Provider] +} + +type ModelRepository interface { + core.BaseRepository[model.Model] +} + +type ChannelRepository interface { + core.BaseRepository[model.Channel] +} + +type APIKeyRepository interface { + core.BaseRepository[model.APIKey] +} diff --git a/internal/repository/provider_repo.go b/internal/repository/provider_repo.go new file mode 100644 index 0000000..7182ae3 --- /dev/null +++ b/internal/repository/provider_repo.go @@ -0,0 +1,10 @@ +package repository + +import ( + "synoth.com/janus/internal/core" + "synoth.com/janus/internal/model" +) + +type ProviderRepo struct { + core.BaseRepo[model.Provider] +}