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

64 lines
2.1 KiB
Go

package repository
import (
"context"
"github.com/gochat/gochat/internal/model"
"gorm.io/gorm"
)
// CaptainCustomToolRepo provides data access for CaptainCustomTool.
type CaptainCustomToolRepo struct {
db *gorm.DB
}
func NewCaptainCustomToolRepo(db *gorm.DB) *CaptainCustomToolRepo {
return &CaptainCustomToolRepo{db: db}
}
func (r *CaptainCustomToolRepo) Create(ctx context.Context, tool *model.CaptainCustomTool) error {
return r.db.WithContext(ctx).Create(tool).Error
}
func (r *CaptainCustomToolRepo) GetByID(ctx context.Context, id uint) (*model.CaptainCustomTool, error) {
var tool model.CaptainCustomTool
if err := r.db.WithContext(ctx).First(&tool, id).Error; err != nil {
return nil, err
}
return &tool, nil
}
func (r *CaptainCustomToolRepo) GetBySlug(ctx context.Context, accountID uint, slug string) (*model.CaptainCustomTool, error) {
var tool model.CaptainCustomTool
if err := r.db.WithContext(ctx).Where("account_id = ? AND slug = ?", accountID, slug).First(&tool).Error; err != nil {
return nil, err
}
return &tool, nil
}
func (r *CaptainCustomToolRepo) Update(ctx context.Context, tool *model.CaptainCustomTool) error {
return r.db.WithContext(ctx).Save(tool).Error
}
func (r *CaptainCustomToolRepo) Delete(ctx context.Context, id uint) error {
return r.db.WithContext(ctx).Delete(&model.CaptainCustomTool{}, id).Error
}
func (r *CaptainCustomToolRepo) ListByAccount(ctx context.Context, accountID uint, offset, limit int) ([]model.CaptainCustomTool, int64, error) {
var tools []model.CaptainCustomTool
var count int64
db := r.db.WithContext(ctx).Model(&model.CaptainCustomTool{}).Where("account_id = ?", accountID)
db.Count(&count)
if err := db.Offset(offset).Limit(limit).Find(&tools).Error; err != nil {
return nil, 0, err
}
return tools, count, nil
}
func (r *CaptainCustomToolRepo) CountByAccount(ctx context.Context, accountID uint) (int64, error) {
var count int64
if err := r.db.WithContext(ctx).Model(&model.CaptainCustomTool{}).Where("account_id = ?", accountID).Count(&count).Error; err != nil {
return 0, err
}
return count, nil
}