OSDN Git Service

feat: add fed orm (#136)
authorHAOYUatHZ <37070449+HAOYUatHZ@users.noreply.github.com>
Wed, 5 Jun 2019 06:08:54 +0000 (14:08 +0800)
committerPaladz <yzhu101@uottawa.ca>
Wed, 5 Jun 2019 06:08:54 +0000 (14:08 +0800)
* init orm

* feat: add orm

* add status

* fix: fix type mismatch

federation/common/const.go [new file with mode: 0644]
federation/database/orm/chain.go [new file with mode: 0644]
federation/database/orm/cross_transaction.go [new file with mode: 0644]
federation/database/orm/cross_transaction_input.go [new file with mode: 0644]
federation/database/orm/cross_transaction_sign.go [new file with mode: 0644]
federation/database/orm/warder.go [new file with mode: 0644]
federation/types/types.go [new file with mode: 0644]

diff --git a/federation/common/const.go b/federation/common/const.go
new file mode 100644 (file)
index 0000000..663c66a
--- /dev/null
@@ -0,0 +1,13 @@
+package common
+
+const (
+       CrossTxPendingStatus uint8 = iota
+       CrossTxCompletedStatus
+       CrossTxRejectedStatus
+)
+
+const (
+       CrossTxSignPendingStatus uint8 = iota
+       CrossTxSignCompletedStatus
+       CrossTxSignRejectedStatus
+)
diff --git a/federation/database/orm/chain.go b/federation/database/orm/chain.go
new file mode 100644 (file)
index 0000000..8b92987
--- /dev/null
@@ -0,0 +1,14 @@
+package orm
+
+import (
+       "github.com/vapor/federation/types"
+)
+
+type Chain struct {
+       ID          uint64 `gorm:"primary_key"`
+       Name        string
+       BlockHeight uint64
+       BlockHash   string
+       CreatedAt   types.Timestamp
+       UpdatedAt   types.Timestamp
+}
diff --git a/federation/database/orm/cross_transaction.go b/federation/database/orm/cross_transaction.go
new file mode 100644 (file)
index 0000000..5f6ae9e
--- /dev/null
@@ -0,0 +1,21 @@
+package orm
+
+import (
+       "github.com/vapor/federation/types"
+)
+
+type CrossTransaction struct {
+       ID             uint64 `gorm:"primary_key"`
+       ChainID        uint64
+       BlockHeight    uint64
+       BlockHash      string
+       TxIndex        uint64
+       MuxID          string
+       TxHash         string
+       RawTransaction string
+       Status         uint8
+       CreatedAt      types.Timestamp
+       UpdatedAt      types.Timestamp
+
+       Chain *Chain `gorm:"foreignkey:ChainID"`
+}
diff --git a/federation/database/orm/cross_transaction_input.go b/federation/database/orm/cross_transaction_input.go
new file mode 100644 (file)
index 0000000..b3fdd38
--- /dev/null
@@ -0,0 +1,15 @@
+package orm
+
+import (
+       "github.com/vapor/federation/types"
+)
+
+type CrossTransactionInput struct {
+       ID        uint64 `gorm:"primary_key"`
+       TxID      uint64
+       SourcePos uint64
+       CreatedAt types.Timestamp
+       UpdatedAt types.Timestamp
+
+       CrossTransaction *CrossTransaction `gorm:"foreignkey:TxID"`
+}
diff --git a/federation/database/orm/cross_transaction_sign.go b/federation/database/orm/cross_transaction_sign.go
new file mode 100644 (file)
index 0000000..b60e7de
--- /dev/null
@@ -0,0 +1,18 @@
+package orm
+
+import (
+       "github.com/vapor/federation/types"
+)
+
+type CrossTransactionSign struct {
+       ID                 uint64 `gorm:"primary_key"`
+       CrossTransactionID uint64
+       WarderID           uint64
+       Signatures         string
+       Status             uint8
+       CreatedAt          types.Timestamp
+       UpdatedAt          types.Timestamp
+
+       CrossTransaction *CrossTransaction `gorm:"foreignkey:CrossTransactionID"`
+       Warder           *Warder           `gorm:"foreignkey:WarderID"`
+}
diff --git a/federation/database/orm/warder.go b/federation/database/orm/warder.go
new file mode 100644 (file)
index 0000000..39976db
--- /dev/null
@@ -0,0 +1,12 @@
+package orm
+
+import (
+       "github.com/vapor/federation/types"
+)
+
+type Warder struct {
+       ID        uint64
+       Pubkey    string
+       CreatedAt types.Timestamp
+       UpdatedAt types.Timestamp
+}
diff --git a/federation/types/types.go b/federation/types/types.go
new file mode 100644 (file)
index 0000000..e3f8f48
--- /dev/null
@@ -0,0 +1,29 @@
+package types
+
+import (
+       "fmt"
+       "strconv"
+       "time"
+)
+
+type Timestamp time.Time
+
+func (t *Timestamp) Unix() int64 {
+       return time.Time(*t).Unix()
+}
+
+func (t *Timestamp) MarshalJSON() ([]byte, error) {
+       ts := time.Time(*t).Unix()
+       stamp := fmt.Sprint(ts)
+       return []byte(stamp), nil
+}
+
+func (t *Timestamp) UnmarshalJSON(b []byte) error {
+       ts, err := strconv.Atoi(string(b))
+       if err != nil {
+               return err
+       }
+
+       *t = Timestamp(time.Unix(int64(ts), 0))
+       return nil
+}