package pubsub import ( "context" "encoding/json" "errors" "oc-discovery/models" oclib "cloud.o-forge.io/core/oc-lib" "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 { switch typ { case "known": // define Search Strategy return ps.StreamService.SearchKnownPublishEvent(dt, user, search) //if partners focus only them*/ case "partner": // define Search Strategy return ps.StreamService.SearchPartnersPublishEvent(dt, user, search) //if partners focus only them*/ case "all": // Gossip PubSub b, err := json.Marshal(map[string]string{"search": search}) if err != nil { return err } return ps.searchPublishEvent(ctx, dt, user, b) default: return errors.New("no type of research found") } } func (ps *PubSubService) searchPublishEvent( ctx context.Context, dt *tools.DataType, user string, payload []byte) error { return ps.publishEvent(ctx, dt, tools.PB_SEARCH, user, payload) } func (ps *PubSubService) publishEvent( ctx context.Context, dt *tools.DataType, action tools.PubSubAction, user string, payload []byte, ) error { from, err := oclib.GenerateNodeID() if err != nil { return err } priv, err := tools.LoadKeyFromFilePrivate() if err != nil { return err } msg, _ := json.Marshal(models.NewEvent(action.String(), from, 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