2026-01-30 16:57:36 +01:00
package pubsub
import (
"context"
"encoding/json"
"errors"
2026-03-03 16:38:24 +01:00
"oc-discovery/daemons/node/stream"
2026-01-30 16:57:36 +01:00
"oc-discovery/models"
2026-03-03 16:38:24 +01:00
"cloud.o-forge.io/core/oc-lib/dbs"
"cloud.o-forge.io/core/oc-lib/models/peer"
2026-01-30 16:57:36 +01:00
"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 {
2026-03-03 16:38:24 +01:00
b , err := json . Marshal ( map [ string ] string { "search" : search } )
if err != nil {
return err
}
2026-01-30 16:57:36 +01:00
switch typ {
case "known" : // define Search Strategy
2026-03-03 16:38:24 +01:00
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*/
2026-01-30 16:57:36 +01:00
case "partner" : // define Search Strategy
2026-03-03 16:38:24 +01:00
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 )
2026-01-30 16:57:36 +01:00
case "all" : // Gossip PubSub
b , err := json . Marshal ( map [ string ] string { "search" : search } )
if err != nil {
return err
}
2026-03-03 16:38:24 +01:00
return ps . publishEvent ( ctx , dt , tools . PB_SEARCH , user , b )
2026-01-30 16:57:36 +01:00
default :
return errors . New ( "no type of research found" )
}
}
func ( ps * PubSubService ) publishEvent (
2026-02-24 14:31:37 +01:00
ctx context . Context , dt * tools . DataType , action tools . PubSubAction , user string , payload [ ] byte ,
2026-01-30 16:57:36 +01:00
) error {
2026-02-09 13:28:00 +01:00
priv , err := tools . LoadKeyFromFilePrivate ( )
2026-01-30 16:57:36 +01:00
if err != nil {
return err
}
2026-03-03 16:38:24 +01:00
msg , _ := json . Marshal ( models . NewEvent ( action . String ( ) , ps . Host . ID ( ) . String ( ) , dt , user , payload , priv ) )
2026-02-24 14:31:37 +01:00
topic , err := ps . PS . Join ( action . String ( ) )
2026-01-30 16:57:36 +01:00
if err != nil {
return err
}
return topic . Publish ( ctx , msg )
}
// TODO REVIEW PUBLISHING + ADD SEARCH ON PUBLIC : YES
// TODO : Search should verify DataType