Skip to content

Commit 475fd26

Browse files
authored
feat: add txn interceptor with gorm v2 (#487)
This is a copy paste of https://github.com/infobloxopen/atlas-app-toolkit/blob/master/gorm/transaction.go but using gorm.io library.
1 parent 8b199e1 commit 475fd26

File tree

7 files changed

+1224
-7
lines changed

7 files changed

+1224
-7
lines changed

go.mod

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -29,10 +29,12 @@ require (
2929
github.com/davecgh/go-spew v1.1.1 // indirect
3030
github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e // indirect
3131
github.com/grpc-ecosystem/grpc-gateway v1.14.6 // indirect
32+
github.com/jinzhu/now v1.1.5 // indirect
33+
github.com/mattn/go-sqlite3 v1.14.22 // indirect
3234
github.com/pmezard/go-difflib v1.0.0 // indirect
33-
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c // indirect
35+
golang.org/x/sync v0.9.0 // indirect
3436
golang.org/x/sys v0.16.0 // indirect
35-
golang.org/x/text v0.14.0 // indirect
37+
golang.org/x/text v0.20.0 // indirect
3638
google.golang.org/api v0.30.0 // indirect
3739
gopkg.in/yaml.v3 v3.0.1 // indirect
3840
)

go.sum

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -150,8 +150,9 @@ github.com/jinzhu/gorm v1.9.16 h1:+IyIjPEABKRpsu/F8OvDPy9fyQlgsg2luMV2ZIH5i5o=
150150
github.com/jinzhu/gorm v1.9.16/go.mod h1:G3LB3wezTOWM2ITLzPxEXgSkOXAntiLHS7UdBefADcs=
151151
github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
152152
github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
153-
github.com/jinzhu/now v1.0.1 h1:HjfetcXq097iXP0uoPCdnM4Efp5/9MsM0/M+XOTeR3M=
154153
github.com/jinzhu/now v1.0.1/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
154+
github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ=
155+
github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
155156
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
156157
github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk=
157158
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
@@ -166,8 +167,9 @@ github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
166167
github.com/lib/pq v1.1.1/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
167168
github.com/lib/pq v1.3.1-0.20200116171513-9eb3fc897d6f h1:GeKe/1r/0LW8inPmRZi6zVInaZcFXiMzTnPyxITwQ8A=
168169
github.com/lib/pq v1.3.1-0.20200116171513-9eb3fc897d6f/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
169-
github.com/mattn/go-sqlite3 v1.14.0 h1:mLyGNKR8+Vv9CAU7PphKa2hkEqxxhn8i32J6FPj1/QA=
170170
github.com/mattn/go-sqlite3 v1.14.0/go.mod h1:JIl7NbARA7phWnGvh0LKTyg7S9BA+6gx71ShQilpsus=
171+
github.com/mattn/go-sqlite3 v1.14.22 h1:2gZY6PC6kBnID23Tichd1K+Z0oS6nE/XwU+Vz/5o4kU=
172+
github.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y=
171173
github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
172174
github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
173175
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
@@ -292,8 +294,9 @@ golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJ
292294
golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
293295
golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
294296
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
295-
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c h1:5KslGYwFpkhGh+Q16bwMP3cOontH8FOep7tGV86Y7SQ=
296297
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
298+
golang.org/x/sync v0.9.0 h1:fEo0HyrW1GIgZdpbhCRO0PkJajUS5H9IFUztCgEo2jQ=
299+
golang.org/x/sync v0.9.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
297300
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
298301
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
299302
golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -335,8 +338,8 @@ golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3
335338
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
336339
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
337340
golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
338-
golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ=
339-
golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
341+
golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug=
342+
golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4=
340343
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
341344
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
342345
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=

gorm/v2/README.md

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
# GORM v2 Transaction Package
2+
3+
This package provides GORM v2 compatible transaction management utilities for gRPC services.
4+
5+
6+
```go
7+
import (
8+
gormv2 "github.com/infobloxopen/atlas-app-toolkit/gorm/v2"
9+
"gorm.io/gorm"
10+
)
11+
12+
// Create a transaction interceptor
13+
db, err := gorm.Open(...)
14+
interceptor := gormv2.UnaryServerInterceptor(db)
15+
16+
// Use in your handler
17+
func (s *Server) MyHandler(ctx context.Context, req *Request) (*Response, error) {
18+
// Begin transaction
19+
tx, err := gormv2.BeginFromContext(ctx)
20+
if err != nil {
21+
return nil, err
22+
}
23+
24+
// Use transaction...
25+
26+
return response, nil
27+
}
28+
```
29+
30+
### API Compatibility
31+
32+
The API is designed to be compatible with the GORM v1 version while using GORM v2 under the hood.

gorm/v2/go.mod

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
module github.com/infobloxopen/atlas-app-toolkit/gorm/v2
2+
3+
go 1.19
4+
5+
require (
6+
github.com/DATA-DOG/go-sqlmock v1.5.2
7+
github.com/grpc-ecosystem/go-grpc-middleware v1.4.0
8+
github.com/infobloxopen/atlas-app-toolkit/v2 v2.0.0
9+
google.golang.org/grpc v1.38.0
10+
gorm.io/driver/postgres v1.6.0
11+
gorm.io/gorm v1.31.0
12+
)
13+
14+
require (
15+
github.com/golang/protobuf v1.5.4 // indirect
16+
github.com/jackc/pgpassfile v1.0.0 // indirect
17+
github.com/jackc/pgservicefile v0.0.0-20240606120523-5a60cdf6a761 // indirect
18+
github.com/jackc/pgx/v5 v5.6.0 // indirect
19+
github.com/jackc/puddle/v2 v2.2.2 // indirect
20+
github.com/jinzhu/inflection v1.0.0 // indirect
21+
github.com/jinzhu/now v1.1.5 // indirect
22+
golang.org/x/crypto v0.31.0 // indirect
23+
golang.org/x/net v0.21.0 // indirect
24+
golang.org/x/sync v0.10.0 // indirect
25+
golang.org/x/sys v0.28.0 // indirect
26+
golang.org/x/text v0.21.0 // indirect
27+
google.golang.org/genproto v0.0.0-20210617175327-b9e0b3197ced // indirect
28+
google.golang.org/protobuf v1.33.0 // indirect
29+
)
30+
31+
replace github.com/infobloxopen/atlas-app-toolkit/v2 => ../..

0 commit comments

Comments
 (0)