package repository import ( "context" "gorm.io/gorm" "github.com/gochat/gochat/internal/model" ) // WidgetThemeConfigRepo implements GORM repository for WidgetThemeConfig. type WidgetThemeConfigRepo struct { db *gorm.DB } // NewWidgetThemeConfigRepo creates a new WidgetThemeConfig repository. func NewWidgetThemeConfigRepo(db *gorm.DB) *WidgetThemeConfigRepo { return &WidgetThemeConfigRepo{db: db} } // FindByInboxID retrieves the theme config for a specific inbox. // Each inbox should have at most one theme config record. func (r *WidgetThemeConfigRepo) FindByInboxID(ctx context.Context, inboxID uint) (*model.WidgetThemeConfig, error) { var config model.WidgetThemeConfig err := r.db.WithContext(ctx).Where("inbox_id = ?", inboxID).First(&config).Error if err != nil { return nil, err } return &config, nil } // FindByID retrieves a theme config by primary key. func (r *WidgetThemeConfigRepo) FindByID(ctx context.Context, id uint) (*model.WidgetThemeConfig, error) { var config model.WidgetThemeConfig err := r.db.WithContext(ctx).First(&config, id).Error if err != nil { return nil, err } return &config, nil } // Create inserts a new theme config. func (r *WidgetThemeConfigRepo) Create(ctx context.Context, config *model.WidgetThemeConfig) error { return r.db.WithContext(ctx).Create(config).Error } // Update modifies an existing theme config. func (r *WidgetThemeConfigRepo) Update(ctx context.Context, config *model.WidgetThemeConfig) error { return r.db.WithContext(ctx).Save(config).Error } // Delete soft-deletes a theme config. func (r *WidgetThemeConfigRepo) Delete(ctx context.Context, id uint) error { return r.db.WithContext(ctx).Delete(&model.WidgetThemeConfig{}, id).Error } // DeleteByInboxID soft-deletes the theme config for a specific inbox. func (r *WidgetThemeConfigRepo) DeleteByInboxID(ctx context.Context, inboxID uint) error { return r.db.WithContext(ctx).Where("inbox_id = ?", inboxID).Delete(&model.WidgetThemeConfig{}).Error }