File tree Expand file tree Collapse file tree 3 files changed +72
-0
lines changed Expand file tree Collapse file tree 3 files changed +72
-0
lines changed Original file line number Diff line number Diff line change @@ -3,6 +3,8 @@ package go_databases
33import "errors"
44
55var (
6+ ErrNilDatabase = errors .New ("database cannot be nil" )
7+ ErrNilForeignKey = errors .New ("foreign key cannot be nil" )
68 ErrAlreadyConnected = errors .New ("connection to database already established" )
79 ErrConnectionFailed = errors .New ("failed to connect to database" )
810 ErrPingFailed = errors .New ("failed to ping database" )
Original file line number Diff line number Diff line change @@ -7,12 +7,15 @@ require (
77 github.com/ralvarezdev/go-logger v0.2.2
88 go.mongodb.org/mongo-driver v1.17.1
99 golang.org/x/net v0.33.0
10+ gorm.io/gorm v1.25.12
1011)
1112
1213require (
1314 github.com/cespare/xxhash/v2 v2.3.0 // indirect
1415 github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f // indirect
1516 github.com/golang/snappy v0.0.4 // indirect
17+ github.com/jinzhu/inflection v1.0.0 // indirect
18+ github.com/jinzhu/now v1.1.5 // indirect
1619 github.com/klauspost/compress v1.13.6 // indirect
1720 github.com/montanaflynn/stats v0.7.1 // indirect
1821 github.com/xdg-go/pbkdf2 v1.0.0 // indirect
Original file line number Diff line number Diff line change 1+ package gorm
2+
3+ import (
4+ godatabases "github.com/ralvarezdev/go-databases"
5+ "gorm.io/gorm"
6+ )
7+
8+ type (
9+ // ForeignKey struct
10+ ForeignKey struct {
11+ model interface {}
12+ field string
13+ joinTable interface {}
14+ }
15+ )
16+
17+ // NewForeignKey creates a new foreign key
18+ func NewForeignKey (
19+ model interface {},
20+ field string ,
21+ joinTable interface {},
22+ ) * ForeignKey {
23+ return & ForeignKey {
24+ model : model ,
25+ field : field ,
26+ joinTable : joinTable ,
27+ }
28+ }
29+
30+ // SetupJoinTable create foreign key
31+ func SetupJoinTable (
32+ database * gorm.DB ,
33+ foreignKey * ForeignKey ,
34+ ) error {
35+ // Check if the database or the foreign key is nil
36+ if database == nil {
37+ return godatabases .ErrNilDatabase
38+ }
39+ if foreignKey == nil {
40+ return godatabases .ErrNilForeignKey
41+ }
42+
43+ return database .SetupJoinTable (
44+ foreignKey .model ,
45+ foreignKey .field ,
46+ foreignKey .joinTable ,
47+ )
48+ }
49+
50+ // SetupJoinTables create foreign keys
51+ func SetupJoinTables (
52+ database * gorm.DB ,
53+ foreignKeys []* ForeignKey ,
54+ ) error {
55+ for _ , foreignKey := range foreignKeys {
56+ err := database .SetupJoinTable (
57+ foreignKey .model ,
58+ foreignKey .field ,
59+ foreignKey .joinTable ,
60+ )
61+ if err != nil {
62+ return err
63+ }
64+ }
65+
66+ return nil
67+ }
You can’t perform that action at this time.
0 commit comments