90 lines
2.4 KiB
Go
90 lines
2.4 KiB
Go
package validator_controller
|
|
|
|
import (
|
|
"context"
|
|
|
|
"git.itzana.me/strafesnet/go-grpc/validator"
|
|
"git.itzana.me/strafesnet/maps-service/pkg/model"
|
|
"git.itzana.me/strafesnet/maps-service/pkg/service"
|
|
)
|
|
|
|
type ScriptPolicy struct {
|
|
*validator.UnimplementedValidatorScriptPolicyServiceServer
|
|
inner *service.Service
|
|
}
|
|
func NewScriptPolicyController(
|
|
inner *service.Service,
|
|
) ScriptPolicy {
|
|
return ScriptPolicy{
|
|
inner: inner,
|
|
}
|
|
}
|
|
|
|
// CreateScriptPolicy implements createScriptPolicy operation.
|
|
//
|
|
// Create a new script policy.
|
|
//
|
|
// POST /script-policy
|
|
func (svc *ScriptPolicy) Create(ctx context.Context, req *validator.ScriptPolicyCreate) (*validator.ScriptPolicyID, error) {
|
|
from_script, err := svc.inner.GetScript(ctx, int64(req.FromScriptID))
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
// the existence of ToScriptID does not need to be validated because it's checked by a foreign key constraint.
|
|
|
|
script, err := svc.inner.CreateScriptPolicy(ctx, model.ScriptPolicy{
|
|
ID: 0,
|
|
FromScriptHash: from_script.Hash,
|
|
ToScriptID: int64(req.ToScriptID),
|
|
Policy: model.Policy(req.Policy),
|
|
})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return &validator.ScriptPolicyID{
|
|
ID: uint64(script.ID),
|
|
}, nil
|
|
}
|
|
|
|
// ListScriptPolicy implements listScriptPolicy operation.
|
|
//
|
|
// Get list of script policies.
|
|
//
|
|
// GET /script-policy
|
|
func (svc *ScriptPolicy) List(ctx context.Context, params *validator.ScriptPolicyListRequest) (*validator.ScriptPolicyListResponse, error) {
|
|
filter := service.NewScriptPolicyFilter()
|
|
|
|
if params.Filter.FromScriptHash != nil {
|
|
filter.SetFromScriptHash(int64(*params.Filter.FromScriptHash))
|
|
}
|
|
if params.Filter.ToScriptID != nil {
|
|
filter.SetToScriptID(int64(*params.Filter.ToScriptID))
|
|
}
|
|
if params.Filter.Policy != nil {
|
|
filter.SetPolicy(int32(*params.Filter.Policy))
|
|
}
|
|
|
|
items, err := svc.inner.ListScriptPolicies(ctx, filter, model.Page{
|
|
Number: int32(params.Page.Number),
|
|
Size: int32(params.Page.Size),
|
|
})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
resp := validator.ScriptPolicyListResponse{}
|
|
resp.ScriptPolicies = make([]*validator.ScriptPolicy, len(items))
|
|
for i, item := range items {
|
|
resp.ScriptPolicies[i] = &validator.ScriptPolicy{
|
|
ID: uint64(item.ID),
|
|
FromScriptHash: uint64(item.FromScriptHash),
|
|
ToScriptID: uint64(item.ToScriptID),
|
|
Policy: validator.Policy(int32(item.Policy)),
|
|
}
|
|
}
|
|
|
|
return &resp, nil
|
|
}
|