Skip to content

Commit acbc1a1

Browse files
committed
feat: added GORM's SetupJoinTables function and ForeignKey struct
1 parent 1becec7 commit acbc1a1

File tree

3 files changed

+72
-0
lines changed

3 files changed

+72
-0
lines changed

errors.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,8 @@ package go_databases
33
import "errors"
44

55
var (
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")

go.mod

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff 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

1213
require (
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

gorm/foreign_key.go

Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
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+
}

0 commit comments

Comments
 (0)