68 lines
1.8 KiB
Go
68 lines
1.8 KiB
Go
package indexer
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/jackc/pgx/v5"
|
|
"github.com/riverqueue/river"
|
|
"github.com/rs/zerolog/log"
|
|
"google.golang.org/grpc"
|
|
|
|
pb "homelab.lan/music-agregator/gen/music_agregator/indexer/v1"
|
|
"homelab.lan/music-agregator/internal/config"
|
|
)
|
|
|
|
type IndexerServer struct {
|
|
service *IndexerService
|
|
pb.UnimplementedIndexerServiceServer
|
|
}
|
|
|
|
func NewIndexerServer(cfg config.Config, riverClient *river.Client[pgx.Tx]) (*IndexerServer, error) {
|
|
service, err := NewIndexerService(cfg, riverClient)
|
|
if err != nil {
|
|
log.Err(err).Msg("failed to initialize IndexerService")
|
|
return nil, err
|
|
}
|
|
|
|
return &IndexerServer{service: service}, nil
|
|
}
|
|
|
|
func (server *IndexerServer) Search(ctx context.Context, req *pb.SearchRequest) (*pb.SearchResponse, error) {
|
|
log.Debug().
|
|
Str("query", req.GetQuery()).
|
|
Int32("limit", req.GetLimit()).
|
|
Str("tracker", req.GetTracker()).
|
|
Msg("search started")
|
|
|
|
log.Trace().Str("query", req.GetQuery()).Msg("fetching results from indexer")
|
|
|
|
resp, err := server.service.Search(req.GetQuery(), req.GetLimit(), req.GetTracker())
|
|
if err != nil {
|
|
log.Error().Err(err).Str("query", req.GetQuery()).Msg("search failed")
|
|
return nil, err
|
|
}
|
|
|
|
log.Debug().
|
|
Str("query", req.GetQuery()).
|
|
Int("results", len(resp.GetResult())).
|
|
Msg("search completed")
|
|
|
|
return resp, nil
|
|
}
|
|
|
|
func (server *IndexerServer) Capabilities(ctx context.Context, req *pb.CapabilitiesRequest) (*pb.CapabilitiesResponse, error) {
|
|
log.Debug().Str("indexer", req.GetIndexer()).Msg("capabilities requested")
|
|
|
|
resp, err := server.service.Capabilities(req)
|
|
if err != nil {
|
|
log.Error().Err(err).Str("indexer", req.GetIndexer()).Msg("capabilities failed")
|
|
return nil, err
|
|
}
|
|
|
|
return resp, nil
|
|
}
|
|
|
|
func (s *IndexerServer) Register(server *grpc.Server) {
|
|
pb.RegisterIndexerServiceServer(server, s)
|
|
}
|