59 lines
1.9 KiB
Go
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
|
|
} |