repository.go 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. package repository
  2. import (
  3. "context"
  4. "fmt"
  5. "github.com/go-nunu/nunu-layout-advanced/pkg/log"
  6. "github.com/redis/go-redis/v9"
  7. "github.com/spf13/viper"
  8. "gorm.io/driver/mysql"
  9. "gorm.io/gorm"
  10. "time"
  11. )
  12. type Repository struct {
  13. db *gorm.DB
  14. rdb *redis.Client
  15. logger *log.Logger
  16. }
  17. func NewRepository(db *gorm.DB, rdb *redis.Client, logger *log.Logger) *Repository {
  18. return &Repository{
  19. db: db,
  20. rdb: rdb,
  21. logger: logger,
  22. }
  23. }
  24. func NewDB(conf *viper.Viper) *gorm.DB {
  25. db, err := gorm.Open(mysql.Open(conf.GetString("data.mysql.user")), &gorm.Config{})
  26. if err != nil {
  27. panic(fmt.Sprintf("mysql error: %s", err.Error()))
  28. }
  29. return db
  30. }
  31. func NewRedis(conf *viper.Viper) *redis.Client {
  32. rdb := redis.NewClient(&redis.Options{
  33. Addr: conf.GetString("data.redis.addr"),
  34. Password: conf.GetString("data.redis.password"),
  35. DB: conf.GetInt("data.redis.db"),
  36. })
  37. ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
  38. defer cancel()
  39. _, err := rdb.Ping(ctx).Result()
  40. if err != nil {
  41. panic(fmt.Sprintf("redis error: %s", err.Error()))
  42. }
  43. return rdb
  44. }