47 lines
1.3 KiB
Go
47 lines
1.3 KiB
Go
package page
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
|
|
"github.com/gocql/gocql"
|
|
"go.uber.org/zap"
|
|
|
|
"codeberg.org/mapleopentech/monorepo/cloud/maplepress-backend/pkg/search"
|
|
)
|
|
|
|
// EnsureSearchIndexUseCase ensures search index exists for a site
|
|
type EnsureSearchIndexUseCase struct {
|
|
searchClient *search.Client
|
|
logger *zap.Logger
|
|
}
|
|
|
|
// ProvideEnsureSearchIndexUseCase creates a new EnsureSearchIndexUseCase
|
|
func ProvideEnsureSearchIndexUseCase(
|
|
searchClient *search.Client,
|
|
logger *zap.Logger,
|
|
) *EnsureSearchIndexUseCase {
|
|
return &EnsureSearchIndexUseCase{
|
|
searchClient: searchClient,
|
|
logger: logger,
|
|
}
|
|
}
|
|
|
|
// Execute ensures the search index exists, creating it if necessary
|
|
func (uc *EnsureSearchIndexUseCase) Execute(ctx context.Context, siteID gocql.UUID) error {
|
|
indexExists, err := uc.searchClient.IndexExists(siteID.String())
|
|
if err != nil {
|
|
uc.logger.Error("failed to check index existence", zap.Error(err))
|
|
return fmt.Errorf("failed to check search index: %w", err)
|
|
}
|
|
|
|
if !indexExists {
|
|
uc.logger.Info("creating search index", zap.String("site_id", siteID.String()))
|
|
if err := uc.searchClient.CreateIndex(siteID.String()); err != nil {
|
|
uc.logger.Error("failed to create index", zap.Error(err))
|
|
return fmt.Errorf("failed to create search index: %w", err)
|
|
}
|
|
}
|
|
|
|
return nil
|
|
}
|