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 }