go.charczuk.com@v0.0.0-20240327042549-bc490516bd1a/projects/nodes/pkg/dbmodel/node.go (about)

     1  /*
     2  
     3  Copyright (c) 2023 - Present. Will Charczuk. All rights reserved.
     4  Use of this source code is governed by a MIT license that can be found in the LICENSE file at the root of the repository.
     5  
     6  */
     7  
     8  package dbmodel
     9  
    10  import (
    11  	"time"
    12  
    13  	"github.com/wcharczuk/go-incr"
    14  	"go.charczuk.com/projects/nodes/pkg/types"
    15  	"go.charczuk.com/sdk/uuid"
    16  )
    17  
    18  // NodeFromTypeNode returns a db model node from a given api type node.
    19  func NodeFromTypeNode(graphID uuid.UUID, userID uuid.UUID, n *types.Node) *Node {
    20  	return &Node{
    21  		ID:                        uuid.UUID(n.ID),
    22  		CreatedUTC:                time.Now().UTC(),
    23  		GraphID:                   graphID,
    24  		UserID:                    userID,
    25  		Label:                     n.Label,
    26  		SetAt:                     n.SetAt,
    27  		ChangedAt:                 n.ChangedAt,
    28  		RecomputedAt:              n.RecomputedAt,
    29  		Always:                    n.Always,
    30  		Observer:                  n.Observer,
    31  		Valid:                     n.Valid,
    32  		Height:                    n.Height,
    33  		HeightInRecomputeHeap:     n.HeightInRecomputeHeap,
    34  		HeightInAdjustHeightsHeap: n.HeightInAdjustHeightsHeap,
    35  		PositionX:                 n.Metadata.PositionX,
    36  		PositionY:                 n.Metadata.PositionY,
    37  		Collapsed:                 n.Metadata.Collapsed,
    38  		NodeType:                  n.Metadata.NodeType,
    39  		InputType:                 n.Metadata.InputType,
    40  		OutputType:                n.Metadata.OutputType,
    41  		Watched:                   n.Metadata.Watched,
    42  		WatchedCollapsed:          n.Metadata.WatchedCollapsed,
    43  		Expression:                n.Metadata.Expression,
    44  	}
    45  }
    46  
    47  // TypeNodeFromNode returns an api type node from a db model type node.
    48  func TypeNodeFromNode(n Node) types.Node {
    49  	return types.Node{
    50  		ID:                        incr.Identifier(n.ID),
    51  		Label:                     n.Label,
    52  		Always:                    n.Always,
    53  		Observer:                  n.Observer,
    54  		Valid:                     n.Valid,
    55  		ChangedAt:                 n.ChangedAt,
    56  		RecomputedAt:              n.RecomputedAt,
    57  		SetAt:                     n.SetAt,
    58  		Height:                    n.Height,
    59  		HeightInRecomputeHeap:     n.HeightInRecomputeHeap,
    60  		HeightInAdjustHeightsHeap: n.HeightInAdjustHeightsHeap,
    61  		Metadata: types.NodeMetadata{
    62  			Collapsed:        n.Collapsed,
    63  			Watched:          n.Watched,
    64  			WatchedCollapsed: n.WatchedCollapsed,
    65  			PositionX:        n.PositionX,
    66  			PositionY:        n.PositionY,
    67  			Height:           n.DisplayHeight,
    68  			Width:            n.DisplayWidth,
    69  			NodeType:         n.NodeType,
    70  			InputType:        n.InputType,
    71  			OutputType:       n.OutputType,
    72  			Expression:       n.Expression,
    73  		},
    74  	}
    75  }
    76  
    77  // Node is the main entity in a computation.
    78  type Node struct {
    79  	ID                        uuid.UUID  `db:"id,pk"`
    80  	CreatedUTC                time.Time  `db:"created_utc"`
    81  	UpdatedUTC                *time.Time `db:"updated_utc"`
    82  	GraphID                   uuid.UUID  `db:"graph_id"`
    83  	UserID                    uuid.UUID  `db:"user_id"`
    84  	Label                     string     `db:"label"`
    85  	SetAt                     uint64     `db:"set_at"`
    86  	ChangedAt                 uint64     `db:"changed_at"`
    87  	RecomputedAt              uint64     `db:"recomputed_at"`
    88  	Valid                     bool       `db:"valid"`
    89  	Always                    bool       `db:"always"`
    90  	Observer                  bool       `db:"observer"`
    91  	Height                    int        `db:"height"`
    92  	HeightInRecomputeHeap     int        `db:"height_in_recompute_heap"`
    93  	HeightInAdjustHeightsHeap int        `db:"height_in_adjust_heights_heap"`
    94  
    95  	PositionX        float64  `db:"position_x"`
    96  	PositionY        float64  `db:"position_y"`
    97  	DisplayHeight    *float64 `db:"display_height"`
    98  	DisplayWidth     *float64 `db:"display_width"`
    99  	Collapsed        bool     `db:"collapsed"`
   100  	NodeType         string   `db:"node_type"`
   101  	InputType        string   `db:"input_type"`
   102  	OutputType       string   `db:"output_type"`
   103  	Watched          bool     `db:"watched"`
   104  	WatchedCollapsed bool     `db:"watched_collapsed"`
   105  
   106  	Expression string `db:"expression"`
   107  }
   108  
   109  func (n Node) TableName() string { return "node" }