Files
crawlab/core/grpc/server/model_delegate_server.go
2024-06-14 15:42:50 +08:00

68 lines
1.5 KiB
Go

package server
import (
"context"
"github.com/crawlab-team/crawlab/core/errors"
"github.com/crawlab-team/crawlab/core/interfaces"
"github.com/crawlab-team/crawlab/core/models/delegate"
grpc "github.com/crawlab-team/crawlab/grpc"
)
type ModelDelegateServer struct {
grpc.UnimplementedModelDelegateServer
}
// Do and perform an RPC action of constants.Delegate
func (svr ModelDelegateServer) Do(ctx context.Context, req *grpc.Request) (res *grpc.Response, err error) {
// bind message
obj, msg, err := NewModelDelegateBinder(req).BindWithDelegateMessage()
if err != nil {
return HandleError(err)
}
// convert to model
doc, ok := obj.(interfaces.Model)
if !ok {
return HandleError(errors.ErrorModelInvalidType)
}
// model delegate
d := delegate.NewModelDelegate(doc)
// apply method
switch msg.GetMethod() {
case interfaces.ModelDelegateMethodAdd:
err = d.Add()
case interfaces.ModelDelegateMethodSave:
err = d.Save()
case interfaces.ModelDelegateMethodDelete:
err = d.Delete()
case interfaces.ModelDelegateMethodGetArtifact, interfaces.ModelDelegateMethodRefresh:
err = d.Refresh()
}
if err != nil {
return HandleError(err)
}
// model
m := d.GetModel()
if msg.GetMethod() == interfaces.ModelDelegateMethodGetArtifact {
m, err = d.GetArtifact()
if err != nil {
return nil, err
}
}
// json bytes
data, err := d.ToBytes(m)
if err != nil {
return nil, err
}
return HandleSuccessWithData(data)
}
func NewModelDelegateServer() (svr *ModelDelegateServer) {
return &ModelDelegateServer{}
}