191 lines
4.1 KiB
Go
191 lines
4.1 KiB
Go
|
// Copyright 2022 Listware
|
||
|
|
||
|
package system
|
||
|
|
||
|
import (
|
||
|
"encoding/json"
|
||
|
|
||
|
"git.fg-tech.ru/listware/go-core/pkg/client/system/errors"
|
||
|
"git.fg-tech.ru/listware/proto/sdk/pbcmdb"
|
||
|
"git.fg-tech.ru/listware/proto/sdk/pbtypes"
|
||
|
"google.golang.org/protobuf/proto"
|
||
|
)
|
||
|
|
||
|
func prepareLink(id string) (fc *pbtypes.FunctionContext) {
|
||
|
ft := &pbtypes.FunctionType{
|
||
|
Namespace: namespace,
|
||
|
Type: linksType,
|
||
|
}
|
||
|
|
||
|
fc = &pbtypes.FunctionContext{
|
||
|
Id: id,
|
||
|
FunctionType: ft,
|
||
|
}
|
||
|
return
|
||
|
}
|
||
|
|
||
|
func CreateLinkMessage(to, name, linktype string, payload any) (linkMessage *pbcmdb.LinkMessage, err error) {
|
||
|
if payload == nil {
|
||
|
return nil, errors.ErrPayloadNil
|
||
|
}
|
||
|
|
||
|
payloadRaw, err := json.Marshal(payload)
|
||
|
if err != nil {
|
||
|
return
|
||
|
}
|
||
|
|
||
|
linkMessage = &pbcmdb.LinkMessage{
|
||
|
Method: pbcmdb.Method_CREATE,
|
||
|
Name: name,
|
||
|
To: to,
|
||
|
Type: linktype,
|
||
|
Payload: payloadRaw,
|
||
|
}
|
||
|
return
|
||
|
}
|
||
|
|
||
|
// CreateLink create link 'from' -> 'to' with 'name'
|
||
|
// from will be 'root', 'node', '17136214'
|
||
|
// to will be 'root', 'node', '17136214'
|
||
|
func CreateLink(from, to, name, linktype string, payload any) (functionContext *pbtypes.FunctionContext, err error) {
|
||
|
linkMessage, err := CreateLinkMessage(to, name, linktype, payload)
|
||
|
if err != nil {
|
||
|
return
|
||
|
}
|
||
|
|
||
|
functionContext = prepareLink(from)
|
||
|
|
||
|
if functionContext.Value, err = proto.Marshal(linkMessage); err != nil {
|
||
|
return
|
||
|
}
|
||
|
return
|
||
|
}
|
||
|
|
||
|
func UpdateLink(from, name string, payload any) (fc *pbtypes.FunctionContext, err error) {
|
||
|
if payload == nil {
|
||
|
return nil, errors.ErrPayloadNil
|
||
|
}
|
||
|
|
||
|
payloadRaw, ok := payload.([]byte)
|
||
|
if !ok {
|
||
|
if payloadRaw, err = json.Marshal(payload); err != nil {
|
||
|
return
|
||
|
}
|
||
|
}
|
||
|
|
||
|
fc = prepareLink(from)
|
||
|
|
||
|
om := &pbcmdb.LinkMessage{
|
||
|
Method: pbcmdb.Method_UPDATE,
|
||
|
Name: name,
|
||
|
Payload: payloadRaw,
|
||
|
}
|
||
|
|
||
|
if fc.Value, err = proto.Marshal(om); err != nil {
|
||
|
return
|
||
|
}
|
||
|
return
|
||
|
}
|
||
|
func DeleteLink(from, name string) (fc *pbtypes.FunctionContext, err error) {
|
||
|
fc = prepareLink(from)
|
||
|
|
||
|
om := &pbcmdb.LinkMessage{
|
||
|
Method: pbcmdb.Method_DELETE,
|
||
|
Name: name,
|
||
|
}
|
||
|
|
||
|
if fc.Value, err = proto.Marshal(om); err != nil {
|
||
|
return
|
||
|
}
|
||
|
return
|
||
|
}
|
||
|
|
||
|
func AddLinkTriggerMessage(to string, trigger *pbcmdb.Trigger) (linkMessage *pbcmdb.LinkMessage, err error) {
|
||
|
if trigger == nil {
|
||
|
return nil, errors.ErrPayloadNil
|
||
|
}
|
||
|
|
||
|
linkMessage = &pbcmdb.LinkMessage{
|
||
|
Method: pbcmdb.Method_CREATE_TRIGGER,
|
||
|
To: to,
|
||
|
}
|
||
|
|
||
|
if linkMessage.Payload, err = proto.Marshal(trigger); err != nil {
|
||
|
return
|
||
|
}
|
||
|
return
|
||
|
}
|
||
|
|
||
|
func AddLinkTrigger(from, to string, trigger *pbcmdb.Trigger) (functionContext *pbtypes.FunctionContext, err error) {
|
||
|
linkMessage, err := AddLinkTriggerMessage(to, trigger)
|
||
|
if err != nil {
|
||
|
return
|
||
|
}
|
||
|
|
||
|
functionContext = prepareLink(from)
|
||
|
|
||
|
if functionContext.Value, err = proto.Marshal(linkMessage); err != nil {
|
||
|
return
|
||
|
}
|
||
|
return
|
||
|
}
|
||
|
|
||
|
func DeleteLinkTriggerMessage(to string, trigger *pbcmdb.Trigger) (linkMessage *pbcmdb.LinkMessage, err error) {
|
||
|
if trigger == nil {
|
||
|
return nil, errors.ErrPayloadNil
|
||
|
}
|
||
|
|
||
|
linkMessage = &pbcmdb.LinkMessage{
|
||
|
Method: pbcmdb.Method_DELETE_TRIGGER,
|
||
|
To: to,
|
||
|
}
|
||
|
|
||
|
if linkMessage.Payload, err = proto.Marshal(trigger); err != nil {
|
||
|
return
|
||
|
}
|
||
|
return
|
||
|
}
|
||
|
|
||
|
func DeleteLinkTrigger(from, to string, trigger *pbcmdb.Trigger) (functionContext *pbtypes.FunctionContext, err error) {
|
||
|
linkMessage, err := DeleteLinkTriggerMessage(to, trigger)
|
||
|
if err != nil {
|
||
|
return
|
||
|
}
|
||
|
|
||
|
functionContext = prepareLink(from)
|
||
|
|
||
|
if functionContext.Value, err = proto.Marshal(linkMessage); err != nil {
|
||
|
return
|
||
|
}
|
||
|
|
||
|
return
|
||
|
}
|
||
|
|
||
|
func RegisterLink(from, to, name, linktype string, payload any, async bool) (registerLinkMessage *pbcmdb.RegisterLinkMessage, err error) {
|
||
|
linkMessage, err := CreateLinkMessage(to, name, linktype, payload)
|
||
|
if err != nil {
|
||
|
return
|
||
|
}
|
||
|
|
||
|
registerLinkMessage = &pbcmdb.RegisterLinkMessage{
|
||
|
Id: from,
|
||
|
LinkMessage: linkMessage,
|
||
|
Async: async,
|
||
|
}
|
||
|
return
|
||
|
}
|
||
|
|
||
|
func RegisterLinkTrigger(from, to string, trigger *pbcmdb.Trigger, async bool) (registerLinkMessage *pbcmdb.RegisterLinkMessage, err error) {
|
||
|
linkMessage, err := AddLinkTriggerMessage(to, trigger)
|
||
|
if err != nil {
|
||
|
return
|
||
|
}
|
||
|
|
||
|
registerLinkMessage = &pbcmdb.RegisterLinkMessage{
|
||
|
Id: from,
|
||
|
LinkMessage: linkMessage,
|
||
|
Async: async,
|
||
|
}
|
||
|
return
|
||
|
}
|