refactor foundry lib structure; add transport classes for db,http,websocket; add action interface instead of multiple function that accepts action classes; add changing foundry status on websocket responses
This commit is contained in:
69
internal/foundry/actions/model.go
Normal file
69
internal/foundry/actions/model.go
Normal file
@@ -0,0 +1,69 @@
|
||||
package actions
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
|
||||
"gitea.local.lab/Lbenedar/foundry_helper_service/internal/foundry/transport"
|
||||
"gitea.local.lab/Lbenedar/foundry_helper_service/internal/foundry/types"
|
||||
)
|
||||
|
||||
const (
|
||||
WsSessionType = "session"
|
||||
WsProgressType = "progress"
|
||||
WsUserActivityType = "userActivity"
|
||||
WsShutdownType = "shutdown"
|
||||
)
|
||||
|
||||
type WsActions interface {
|
||||
Action(tr *transport.FoundryTransport, status *types.FoundryStatus) error
|
||||
}
|
||||
|
||||
var WsMsgActions = map[string]func() WsActions{
|
||||
"session": func() WsActions { return &WsSessionMsg{} },
|
||||
"progress": func() WsActions { return &WsProgressMsg{} },
|
||||
// "userActivity": WsUserActivityCursor{},
|
||||
"shutdown": func() WsActions { return &WsShutdownMsg{} },
|
||||
}
|
||||
|
||||
func GetWsMsgAction(dataType string) WsActions {
|
||||
if factory, ok := WsMsgActions[dataType]; ok {
|
||||
return factory()
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
func SplitToTypeAndData(dataJson []byte) (WsActions, error) {
|
||||
var rawItems []json.RawMessage
|
||||
err := json.Unmarshal(dataJson, &rawItems)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
var dataType string
|
||||
err = json.Unmarshal(rawItems[0], &dataType)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
if dataType == WsUserActivityType {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
var data map[string]any
|
||||
err = json.Unmarshal(rawItems[1], &data)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
actionDataPtr := GetWsMsgAction(dataType)
|
||||
if actionDataPtr == nil {
|
||||
return nil, ErrActionNotFound
|
||||
}
|
||||
|
||||
err = FillStruct(data, actionDataPtr)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return actionDataPtr, nil
|
||||
}
|
||||
Reference in New Issue
Block a user