Docker/Voltaserve/api/search/workspace_search.go
2024-04-17 20:22:30 +02:00

82 lines
1.6 KiB
Go

package search
import (
"encoding/json"
"voltaserve/infra"
"voltaserve/model"
"voltaserve/repo"
)
type WorkspaceSearch struct {
index string
search *infra.SearchManager
workspaceRepo repo.WorkspaceRepo
}
func NewWorkspaceSearch() *WorkspaceSearch {
return &WorkspaceSearch{
index: infra.WorkspaceSearchIndex,
search: infra.NewSearchManager(),
workspaceRepo: repo.NewWorkspaceRepo(),
}
}
func (s *WorkspaceSearch) Index(workspaces []model.Workspace) error {
if len(workspaces) == 0 {
return nil
}
var res []infra.SearchModel
for _, w := range workspaces {
res = append(res, w)
}
if err := s.search.Index(s.index, res); err != nil {
return err
}
return nil
}
func (s *WorkspaceSearch) Update(workspaces []model.Workspace) error {
if len(workspaces) == 0 {
return nil
}
var res []infra.SearchModel
for _, w := range workspaces {
res = append(res, w)
}
if err := s.search.Update(s.index, res); err != nil {
return err
}
return nil
}
func (s *WorkspaceSearch) Delete(ids []string) error {
if len(ids) == 0 {
return nil
}
if err := s.search.Delete(s.index, ids); err != nil {
return err
}
return nil
}
func (s *WorkspaceSearch) Query(query string) ([]model.Workspace, error) {
hits, err := s.search.Query(s.index, query)
if err != nil {
return nil, err
}
var res []model.Workspace
for _, v := range hits {
var b []byte
b, err = json.Marshal(v)
if err != nil {
return nil, err
}
workspace := repo.NewWorkspace()
if err = json.Unmarshal(b, &workspace); err != nil {
return nil, err
}
res = append(res, workspace)
}
return res, nil
}