/
my_user.go
84 lines (75 loc) · 2.2 KB
/
my_user.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
package models
import (
"gorm.io/gorm"
"gorm.io/gorm/clause"
"gorm.io/plugin/optimisticlock"
"time"
)
const (
MyUserTableName = "my_user"
)
type MyUser struct {
UserId string `json:"userId" gorm:"type:varchar(200);primaryKey" form:"userId"`
Name string `json:"name" gorm:"type:varchar(200);not null" form:"name"`
NumOfTried optimisticlock.Version `json:"version" gorm:"index"`
Created time.Time `json:"created" gorm:"autoCreateTime"`
Updated time.Time `json:"updated" gorm:"autoUpdateTime"`
Deleted gorm.DeletedAt `json:"deleted" gorm:"index"`
}
func (*MyUser) TableName() string {
return MyUserTableName
}
func GetMyUserList(tx *gorm.DB) ([]*MyUser, error) {
allData := make([]*MyUser, 0)
find := tx.Table(MyUserTableName).Order("user_id").Find(&allData)
if find.Error != nil {
return nil, find.Error
}
return allData, nil
}
func GetMyUserInTxn(tx *gorm.DB, userId string) (*MyUser, bool, error) {
var has = false
myUser := new(MyUser)
first := tx.Table(MyUserTableName).First(myUser, userId)
if first.Error != nil {
if first.Error.Error() == "record not found" {
return nil, false, nil
} else {
return nil, false, first.Error
}
}
if first.RowsAffected == 1 {
has = true
}
return myUser, has, nil
}
func GetMyUserForUpdateInTxn(tx *gorm.DB, userId string) (*MyUser, bool, error) {
var has = false
myUser := new(MyUser)
first := tx.Clauses(clause.Locking{Strength: "UPDATE"}).Table(MyUserTableName).First(myUser, userId)
if first.Error != nil {
if first.Error.Error() == "record not found" {
return nil, false, nil
} else {
return nil, false, first.Error
}
}
if first.RowsAffected == 1 {
has = true
}
return myUser, has, nil
}
func (myUser *MyUser) InsertMyUserInTxn(tx *gorm.DB) (int64, error) {
create := tx.Table(MyUserTableName).Create(myUser)
if create.Error != nil {
return 0, create.Error
}
return create.RowsAffected, nil
}
func (myUser *MyUser) UpdateMyUserInTxn(tx *gorm.DB) (int64, error) {
updates := tx.Table(MyUserTableName).Where("user_id = ?", myUser.UserId).Updates(myUser)
if updates.Error != nil {
return 0, updates.Error
}
return updates.RowsAffected, nil
}