github.com/ngocphuongnb/tetua@v0.0.7-alpha/packages/entrepository/repository.go (about) 1 package entrepository 2 3 import ( 4 "context" 5 "fmt" 6 "log" 7 8 "ariga.io/sqlcomment" 9 "entgo.io/ent/dialect" 10 "entgo.io/ent/dialect/sql" 11 _ "github.com/go-sql-driver/mysql" 12 "github.com/ngocphuongnb/tetua/app/config" 13 "github.com/ngocphuongnb/tetua/app/logger" 14 "github.com/ngocphuongnb/tetua/app/repositories" 15 "github.com/ngocphuongnb/tetua/packages/entrepository/ent" 16 ) 17 18 var Client *ent.Client 19 20 type Config struct { 21 DB_DSN string 22 DB_DRIVER string 23 } 24 25 type Repository struct { 26 Client *ent.Client 27 } 28 29 func New(cfg Config) repositories.Repositories { 30 driverName := cfg.DB_DRIVER 31 if driverName == "" { 32 driverName = "mysql" 33 } 34 db, err := sql.Open(driverName, cfg.DB_DSN) 35 36 if err != nil { 37 log.Fatal(err) 38 } 39 40 if config.DB_QUERY_LOGGING { 41 // Create sqlcomment driver which wraps sqlite driver. 42 drv := sqlcomment.NewDriver(db, 43 sqlcomment.WithDriverVerTag(), 44 sqlcomment.WithTags(sqlcomment.Tags{ 45 sqlcomment.KeyApplication: "tetua", 46 sqlcomment.KeyFramework: "net/http", 47 }), 48 ) 49 drv = dialect.DebugWithContext(drv, func(ctx context.Context, i ...interface{}) { 50 requestID := fmt.Sprintf("%v", ctx.Value("request_id")) 51 logger.Get().WithContext(logger.Context{"request_id": requestID}).Debug(i...) 52 }) 53 Client = ent.NewClient(ent.Driver(drv)) 54 } else { 55 Client = ent.NewClient(ent.Driver(db)) 56 } 57 58 if err := Client.Schema.Create(context.Background()); err != nil { 59 log.Fatal(err) 60 } 61 62 return repositories.Repositories{ 63 File: CreateFileRepository(Client), 64 User: CreateUserRepository(Client), 65 Post: CreatePostRepository(Client), 66 Page: CreatePageRepository(Client), 67 Role: CreateRoleRepository(Client), 68 Topic: CreateTopicRepository(Client), 69 Comment: CreateCommentRepository(Client), 70 Setting: &SettingRepository{&Repository{Client: Client}}, 71 Permission: CreatePermissionRepository(Client), 72 } 73 }