mirror of
https://github.com/crawlab-team/crawlab.git
synced 2026-01-21 17:21:09 +01:00
68 lines
1.5 KiB
Go
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{}
|
|
}
|