feat(core): 新增基础仓库接口及相关模型仓库定义

- 新增 BaseRepository 泛型接口,定义通用增删改查方法
- 实现 BaseRepo 结构体及其 Insert 方法
- 定义 ProviderRepository、ModelRepository、ChannelRepository、APIKeyRepository 接口,继承基础接口
- 将模型结构 JanusModel 和 JanusProvider 重命名为 Model 和 Provider
- 创建 ProviderRepo 结构体,组合基础仓库实现 Provider 仓库功能
This commit is contained in:
yangzhaohan
2026-07-15 00:06:54 +08:00
parent 0794474c04
commit a18e4847c2
5 changed files with 66 additions and 4 deletions
+29
View File
@@ -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
}
+2 -2
View File
@@ -8,8 +8,8 @@ import (
// Type 模型类型 // Type 模型类型
type Type string type Type string
// JanusModel 供应商下可用的AI模型 // Model 供应商下可用的AI模型
type JanusModel struct { type Model struct {
core.BaseModel core.BaseModel
// ProviderID 供应商ID // ProviderID 供应商ID
ProviderID int64 `gorm:"not null" json:"provider_id"` ProviderID int64 `gorm:"not null" json:"provider_id"`
+2 -2
View File
@@ -5,8 +5,8 @@ import (
"synoth.com/janus/internal/enum" "synoth.com/janus/internal/enum"
) )
// JanusProvider 服务提供商 // Provider 服务提供商
type JanusProvider struct { type Provider struct {
core.BaseModel core.BaseModel
// Name 服务供应商名称 // Name 服务供应商名称
Name string `gorm:"uniqueIndex;size:100;not null" json:"name"` Name string `gorm:"uniqueIndex;size:100;not null" json:"name"`
+23
View File
@@ -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]
}
+10
View File
@@ -0,0 +1,10 @@
package repository
import (
"synoth.com/janus/internal/core"
"synoth.com/janus/internal/model"
)
type ProviderRepo struct {
core.BaseRepo[model.Provider]
}