package pubsub import ( "context" "encoding/json" "errors" "oc-discovery/daemons/node/stream" "oc-discovery/models" "cloud.o-forge.io/core/oc-lib/dbs" "cloud.o-forge.io/core/oc-lib/models/peer" "cloud.o-forge.io/core/oc-lib/tools" ) func (ps *PubSubService) SearchPublishEvent( ctx context.Context, dt *tools.DataType, typ string, user string, search string) error { b, err := json.Marshal(map[string]string{"search": search}) if err != nil { return err } switch typ { case "known": // define Search Strategy return ps.StreamService.PublishesCommon(dt, user, &dbs.Filters{ // filter by like name, short_description, description, owner, url if no filters are provided And: map[string][]dbs.Filter{ "": {{Operator: dbs.NOT.String(), Value: dbs.Filters{ // filter by like name, short_description, description, owner, url if no filters are provided And: map[string][]dbs.Filter{ "relation": {{Operator: dbs.EQUAL.String(), Value: peer.BLACKLIST}}, }, }}}, }, }, b, stream.ProtocolSearchResource) //if partners focus only them*/ case "partner": // define Search Strategy return ps.StreamService.PublishesCommon(dt, user, &dbs.Filters{ // filter by like name, short_description, description, owner, url if no filters are provided And: map[string][]dbs.Filter{ "relation": {{Operator: dbs.EQUAL.String(), Value: peer.PARTNER}}, }, }, b, stream.ProtocolSearchResource) case "all": // Gossip PubSub b, err := json.Marshal(map[string]string{"search": search}) if err != nil { return err } return ps.publishEvent(ctx, dt, tools.PB_SEARCH, user, b) default: return errors.New("no type of research found") } } func (ps *PubSubService) publishEvent( ctx context.Context, dt *tools.DataType, action tools.PubSubAction, user string, payload []byte, ) error { priv, err := tools.LoadKeyFromFilePrivate() if err != nil { return err } msg, _ := json.Marshal(models.NewEvent(action.String(), ps.Host.ID().String(), dt, user, payload, priv)) topic, err := ps.PS.Join(action.String()) if err != nil { return err } return topic.Publish(ctx, msg) } // TODO REVIEW PUBLISHING + ADD SEARCH ON PUBLIC : YES // TODO : Search should verify DataType