@@ -13,6 +13,14 @@ interface Node {
|
|||||||
id: ID!
|
id: ID!
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enum ControlState {
|
||||||
|
NotStarted
|
||||||
|
InProgress
|
||||||
|
NotApplicable
|
||||||
|
Implemented
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
type PageInfo {
|
type PageInfo {
|
||||||
hasNextPage: Boolean!
|
hasNextPage: Boolean!
|
||||||
hasPreviousPage: Boolean!
|
hasPreviousPage: Boolean!
|
||||||
@@ -75,7 +83,7 @@ type Control implements Node {
|
|||||||
id: ID!
|
id: ID!
|
||||||
name: String!
|
name: String!
|
||||||
description: String!
|
description: String!
|
||||||
state: String!
|
state: ControlState!
|
||||||
|
|
||||||
tasks(
|
tasks(
|
||||||
first: Int
|
first: Int
|
||||||
|
|||||||
@@ -556,6 +556,14 @@ interface Node {
|
|||||||
id: ID!
|
id: ID!
|
||||||
}
|
}
|
||||||
|
|
||||||
|
enum ControlState {
|
||||||
|
NotStarted
|
||||||
|
InProgress
|
||||||
|
NotApplicable
|
||||||
|
Implemented
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
type PageInfo {
|
type PageInfo {
|
||||||
hasNextPage: Boolean!
|
hasNextPage: Boolean!
|
||||||
hasPreviousPage: Boolean!
|
hasPreviousPage: Boolean!
|
||||||
@@ -618,7 +626,7 @@ type Control implements Node {
|
|||||||
id: ID!
|
id: ID!
|
||||||
name: String!
|
name: String!
|
||||||
description: String!
|
description: String!
|
||||||
state: String!
|
state: ControlState!
|
||||||
|
|
||||||
tasks(
|
tasks(
|
||||||
first: Int
|
first: Int
|
||||||
@@ -1124,9 +1132,9 @@ func (ec *executionContext) _Control_state(ctx context.Context, field graphql.Co
|
|||||||
}
|
}
|
||||||
return graphql.Null
|
return graphql.Null
|
||||||
}
|
}
|
||||||
res := resTmp.(string)
|
res := resTmp.(types.ControlState)
|
||||||
fc.Result = res
|
fc.Result = res
|
||||||
return ec.marshalNString2string(ctx, field.Selections, res)
|
return ec.marshalNControlState2githubᚗcomᚋgetproboᚋproboᚋpkgᚋapiᚋconsoleᚋv1ᚋtypesᚐControlState(ctx, field.Selections, res)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (ec *executionContext) fieldContext_Control_state(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) {
|
func (ec *executionContext) fieldContext_Control_state(_ context.Context, field graphql.CollectedField) (fc *graphql.FieldContext, err error) {
|
||||||
@@ -1136,7 +1144,7 @@ func (ec *executionContext) fieldContext_Control_state(_ context.Context, field
|
|||||||
IsMethod: false,
|
IsMethod: false,
|
||||||
IsResolver: false,
|
IsResolver: false,
|
||||||
Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) {
|
Child: func(ctx context.Context, field graphql.CollectedField) (*graphql.FieldContext, error) {
|
||||||
return nil, errors.New("field of type String does not have child fields")
|
return nil, errors.New("field of type ControlState does not have child fields")
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
return fc, nil
|
return fc, nil
|
||||||
@@ -5415,6 +5423,16 @@ func (ec *executionContext) marshalNControlEdge2ᚖgithubᚗcomᚋgetproboᚋpro
|
|||||||
return ec._ControlEdge(ctx, sel, v)
|
return ec._ControlEdge(ctx, sel, v)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (ec *executionContext) unmarshalNControlState2githubᚗcomᚋgetproboᚋproboᚋpkgᚋapiᚋconsoleᚋv1ᚋtypesᚐControlState(ctx context.Context, v any) (types.ControlState, error) {
|
||||||
|
var res types.ControlState
|
||||||
|
err := res.UnmarshalGQL(v)
|
||||||
|
return res, graphql.ErrorOnPath(ctx, err)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (ec *executionContext) marshalNControlState2githubᚗcomᚋgetproboᚋproboᚋpkgᚋapiᚋconsoleᚋv1ᚋtypesᚐControlState(ctx context.Context, sel ast.SelectionSet, v types.ControlState) graphql.Marshaler {
|
||||||
|
return v
|
||||||
|
}
|
||||||
|
|
||||||
func (ec *executionContext) unmarshalNCursorKey2githubᚗcomᚋgetproboᚋproboᚋpkgᚋproboᚋcoredataᚋpageᚐCursorKey(ctx context.Context, v any) (page.CursorKey, error) {
|
func (ec *executionContext) unmarshalNCursorKey2githubᚗcomᚋgetproboᚋproboᚋpkgᚋproboᚋcoredataᚋpageᚐCursorKey(ctx context.Context, v any) (page.CursorKey, error) {
|
||||||
res, err := types.UnmarshalCursorKeyScalar(v)
|
res, err := types.UnmarshalCursorKeyScalar(v)
|
||||||
return res, graphql.ErrorOnPath(ctx, err)
|
return res, graphql.ErrorOnPath(ctx, err)
|
||||||
|
|||||||
@@ -44,7 +44,7 @@ func NewControl(c *coredata.Control) *Control {
|
|||||||
ID: c.ID,
|
ID: c.ID,
|
||||||
Name: c.Name,
|
Name: c.Name,
|
||||||
Description: c.Description,
|
Description: c.Description,
|
||||||
State: string(c.State),
|
State: ControlState(c.State.String()),
|
||||||
CreatedAt: c.CreatedAt,
|
CreatedAt: c.CreatedAt,
|
||||||
UpdatedAt: c.UpdatedAt,
|
UpdatedAt: c.UpdatedAt,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -3,6 +3,9 @@
|
|||||||
package types
|
package types
|
||||||
|
|
||||||
import (
|
import (
|
||||||
|
"fmt"
|
||||||
|
"io"
|
||||||
|
"strconv"
|
||||||
"time"
|
"time"
|
||||||
|
|
||||||
"github.com/getprobo/probo/pkg/probo/coredata/gid"
|
"github.com/getprobo/probo/pkg/probo/coredata/gid"
|
||||||
@@ -18,7 +21,7 @@ type Control struct {
|
|||||||
ID gid.GID `json:"id"`
|
ID gid.GID `json:"id"`
|
||||||
Name string `json:"name"`
|
Name string `json:"name"`
|
||||||
Description string `json:"description"`
|
Description string `json:"description"`
|
||||||
State string `json:"state"`
|
State ControlState `json:"state"`
|
||||||
Tasks *TaskConnection `json:"tasks"`
|
Tasks *TaskConnection `json:"tasks"`
|
||||||
CreatedAt time.Time `json:"createdAt"`
|
CreatedAt time.Time `json:"createdAt"`
|
||||||
UpdatedAt time.Time `json:"updatedAt"`
|
UpdatedAt time.Time `json:"updatedAt"`
|
||||||
@@ -99,3 +102,48 @@ type TaskEdge struct {
|
|||||||
Cursor page.CursorKey `json:"cursor"`
|
Cursor page.CursorKey `json:"cursor"`
|
||||||
Node *Task `json:"node"`
|
Node *Task `json:"node"`
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type ControlState string
|
||||||
|
|
||||||
|
const (
|
||||||
|
ControlStateNotStarted ControlState = "NotStarted"
|
||||||
|
ControlStateInProgress ControlState = "InProgress"
|
||||||
|
ControlStateNotApplicable ControlState = "NotApplicable"
|
||||||
|
ControlStateImplemented ControlState = "Implemented"
|
||||||
|
)
|
||||||
|
|
||||||
|
var AllControlState = []ControlState{
|
||||||
|
ControlStateNotStarted,
|
||||||
|
ControlStateInProgress,
|
||||||
|
ControlStateNotApplicable,
|
||||||
|
ControlStateImplemented,
|
||||||
|
}
|
||||||
|
|
||||||
|
func (e ControlState) IsValid() bool {
|
||||||
|
switch e {
|
||||||
|
case ControlStateNotStarted, ControlStateInProgress, ControlStateNotApplicable, ControlStateImplemented:
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
func (e ControlState) String() string {
|
||||||
|
return string(e)
|
||||||
|
}
|
||||||
|
|
||||||
|
func (e *ControlState) UnmarshalGQL(v any) error {
|
||||||
|
str, ok := v.(string)
|
||||||
|
if !ok {
|
||||||
|
return fmt.Errorf("enums must be strings")
|
||||||
|
}
|
||||||
|
|
||||||
|
*e = ControlState(str)
|
||||||
|
if !e.IsValid() {
|
||||||
|
return fmt.Errorf("%s is not a valid ControlState", str)
|
||||||
|
}
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (e ControlState) MarshalGQL(w io.Writer) {
|
||||||
|
fmt.Fprint(w, strconv.Quote(e.String()))
|
||||||
|
}
|
||||||
|
|||||||
88
pkg/probo/coredata/control_state.go
Normal file
88
pkg/probo/coredata/control_state.go
Normal file
@@ -0,0 +1,88 @@
|
|||||||
|
// Copyright (c) 2025 Probo Inc <hello@getprobo.com>.
|
||||||
|
//
|
||||||
|
// Permission to use, copy, modify, and/or distribute this software for any
|
||||||
|
// purpose with or without fee is hereby granted, provided that the above
|
||||||
|
// copyright notice and this permission notice appear in all copies.
|
||||||
|
//
|
||||||
|
// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
|
||||||
|
// REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
|
||||||
|
// AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
|
||||||
|
// INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
|
||||||
|
// LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
||||||
|
// OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
||||||
|
// PERFORMANCE OF THIS SOFTWARE.
|
||||||
|
|
||||||
|
package coredata
|
||||||
|
|
||||||
|
import (
|
||||||
|
"database/sql/driver"
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
"go.gearno.de/x/panicf"
|
||||||
|
)
|
||||||
|
|
||||||
|
type (
|
||||||
|
ControlState uint8
|
||||||
|
)
|
||||||
|
|
||||||
|
const (
|
||||||
|
ControlStateNotStarted ControlState = iota
|
||||||
|
ControlStateInProgress
|
||||||
|
ControlStateNotApplicable
|
||||||
|
ControlStateImplemented
|
||||||
|
)
|
||||||
|
|
||||||
|
func (cs ControlState) MarshalText() ([]byte, error) {
|
||||||
|
return []byte(cs.String()), nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (cs *ControlState) UnmarshalText(data []byte) error {
|
||||||
|
val := string(data)
|
||||||
|
|
||||||
|
switch val {
|
||||||
|
case ControlStateNotStarted.String():
|
||||||
|
*cs = ControlStateNotStarted
|
||||||
|
case ControlStateInProgress.String():
|
||||||
|
*cs = ControlStateInProgress
|
||||||
|
case ControlStateNotApplicable.String():
|
||||||
|
*cs = ControlStateNotApplicable
|
||||||
|
case ControlStateImplemented.String():
|
||||||
|
*cs = ControlStateImplemented
|
||||||
|
default:
|
||||||
|
return fmt.Errorf("invalid ControlState value: %q", val)
|
||||||
|
}
|
||||||
|
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (cs ControlState) String() string {
|
||||||
|
var val string
|
||||||
|
|
||||||
|
switch cs {
|
||||||
|
case ControlStateNotStarted:
|
||||||
|
val = "NOT_STARTED"
|
||||||
|
case ControlStateInProgress:
|
||||||
|
val = "IN_PROGRESS"
|
||||||
|
case ControlStateNotApplicable:
|
||||||
|
val = "NOT_APPLICABLE"
|
||||||
|
case ControlStateImplemented:
|
||||||
|
val = "IMPLEMENTED"
|
||||||
|
default:
|
||||||
|
panicf.Panic("invalid control state value: %v", cs)
|
||||||
|
}
|
||||||
|
|
||||||
|
return val
|
||||||
|
}
|
||||||
|
|
||||||
|
func (cs ControlState) Scan(value any) error {
|
||||||
|
val, ok := value.(string)
|
||||||
|
if !ok {
|
||||||
|
return fmt.Errorf("invalid scan source for ControlState, expected string got %T", value)
|
||||||
|
}
|
||||||
|
|
||||||
|
return cs.UnmarshalText([]byte(val))
|
||||||
|
}
|
||||||
|
|
||||||
|
func (cs ControlState) Value() (driver.Value, error) {
|
||||||
|
return cs.String(), nil
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user