Files
gochat/internal/repository/captain_scenario_repo.go
T
2026-06-04 15:44:48 +08:00

59 lines
1.9 KiB
Go

package repository
import (
"context"
"github.com/gochat/gochat/internal/model"
"gorm.io/gorm"
)
// CaptainScenarioRepo provides data access for CaptainScenario.
type CaptainScenarioRepo struct {
db *gorm.DB
}
func NewCaptainScenarioRepo(db *gorm.DB) *CaptainScenarioRepo {
return &CaptainScenarioRepo{db: db}
}
func (r *CaptainScenarioRepo) Create(ctx context.Context, scenario *model.CaptainScenario) error {
return r.db.WithContext(ctx).Create(scenario).Error
}
func (r *CaptainScenarioRepo) GetByID(ctx context.Context, id uint) (*model.CaptainScenario, error) {
var scenario model.CaptainScenario
if err := r.db.WithContext(ctx).First(&scenario, id).Error; err != nil {
return nil, err
}
return &scenario, nil
}
func (r *CaptainScenarioRepo) Update(ctx context.Context, scenario *model.CaptainScenario) error {
return r.db.WithContext(ctx).Save(scenario).Error
}
func (r *CaptainScenarioRepo) Delete(ctx context.Context, id uint) error {
return r.db.WithContext(ctx).Delete(&model.CaptainScenario{}, id).Error
}
func (r *CaptainScenarioRepo) ListByAssistant(ctx context.Context, assistantID uint, offset, limit int) ([]model.CaptainScenario, int64, error) {
var scenarios []model.CaptainScenario
var count int64
db := r.db.WithContext(ctx).Model(&model.CaptainScenario{}).Where("assistant_id = ?", assistantID)
db.Count(&count)
if err := db.Offset(offset).Limit(limit).Find(&scenarios).Error; err != nil {
return nil, 0, err
}
return scenarios, count, nil
}
// FindEnabled retrieves all enabled scenarios for a given assistant.
func (r *CaptainScenarioRepo) FindEnabled(ctx context.Context, assistantID uint) ([]model.CaptainScenario, error) {
var scenarios []model.CaptainScenario
if err := r.db.WithContext(ctx).
Where("assistant_id = ? AND enabled = ?", assistantID, true).
Find(&scenarios).Error; err != nil {
return nil, err
}
return scenarios, nil
}