|
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687 |
- package db
-
- import (
- _ "github.com/go-sql-driver/mysql"
- "github.com/sirupsen/logrus"
- "gorm.io/driver/mysql"
- "gorm.io/gorm"
- )
-
- type DB struct {
- db *gorm.DB
- }
-
- func NewDB(cfg *Config) (*DB, error) {
- mydb, err := gorm.Open(mysql.Open(cfg.MakeSourceString()), &gorm.Config{})
- if err != nil {
- logrus.Fatalf("failed to connect to database: %v", err)
- }
-
- return &DB{
- db: mydb,
- }, nil
- }
-
- func (db *DB) DoTx(do func(tx SQLContext) error) error {
- return db.db.Transaction(func(tx *gorm.DB) error {
- return do(SQLContext{tx})
- })
- }
-
- func DoTx01[R any](db *DB, do func(tx SQLContext) (R, error)) (R, error) {
- var ret R
- err := db.db.Transaction(func(tx *gorm.DB) error {
- var err error
- ret, err = do(SQLContext{tx})
- return err
- })
- return ret, err
- }
-
- func DoTx02[R any](db *DB, do func(tx SQLContext) (R, error)) (R, error) {
- var ret R
- err := db.db.Transaction(func(tx *gorm.DB) error {
- var err error
- ret, err = do(SQLContext{tx})
- return err
- })
- return ret, err
- }
-
- func DoTx12[T any, R any](db *DB, do func(tx SQLContext, t T) (R, error), t T) (R, error) {
- var ret R
- err := db.db.Transaction(func(tx *gorm.DB) error {
- var err error
- ret, err = do(SQLContext{tx}, t)
- return err
- })
- return ret, err
- }
-
- func DoTx22[T1 any, T2 any, R any](db *DB, do func(tx SQLContext, t1 T1, t2 T2) (R, error), t1 T1, t2 T2) (R, error) {
- var ret R
- err := db.db.Transaction(func(tx *gorm.DB) error {
- var err error
- ret, err = do(SQLContext{tx}, t1, t2)
- return err
- })
- return ret, err
- }
-
- func DoTx32[T1 any, T2 any, T3 any, R any](db *DB, do func(tx SQLContext, t1 T1, t2 T2, t3 T3) (R, error), t1 T1, t2 T2, t3 T3) (R, error) {
- var ret R
- err := db.db.Transaction(func(tx *gorm.DB) error {
- var err error
- ret, err = do(SQLContext{tx}, t1, t2, t3)
- return err
- })
- return ret, err
- }
-
- type SQLContext struct {
- *gorm.DB
- }
-
- func (db *DB) DefCtx() SQLContext {
- return SQLContext{db.db}
- }
|