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" }