Skip to content

Commit

Permalink
refactor: db handling logic 🏗️
Browse files Browse the repository at this point in the history
  • Loading branch information
kareemmahlees committed Apr 8, 2024
1 parent a082e5f commit 08c7475
Show file tree
Hide file tree
Showing 20 changed files with 1,608 additions and 1,411 deletions.
46 changes: 46 additions & 0 deletions .air.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
root = "."
testdata_dir = "testdata"
tmp_dir = "tmp"

[build]
args_bin = ["sqlite3", "-f", ".\\test.db" ]
bin = "tmp\\main.exe"
cmd = "go build -o ./tmp/main.exe ."
delay = 1000
exclude_dir = ["assets", "tmp", "vendor", "testdata"]
exclude_file = []
exclude_regex = ["_test.go"]
exclude_unchanged = false
follow_symlink = false
full_bin = ""
include_dir = []
include_ext = ["go", "tpl", "tmpl", "html"]
include_file = []
kill_delay = "0s"
log = "build-errors.log"
poll = false
poll_interval = 0
post_cmd = []
pre_cmd = []
rerun = false
rerun_delay = 500
send_interrupt = false
stop_on_error = false

[color]
app = ""
build = "yellow"
main = "magenta"
runner = "green"
watcher = "cyan"

[log]
main_only = false
time = false

[misc]
clean_on_exit = false

[screen]
clear_on_rebuild = false
keep_scroll = true
74 changes: 34 additions & 40 deletions cmd/mysql.go
Original file line number Diff line number Diff line change
@@ -1,53 +1,47 @@
package cmd

import (
"fmt"
"github.com/kareemmahlees/meta-x/internal"
"github.com/kareemmahlees/meta-x/lib"

"github.com/go-sql-driver/mysql"
"github.com/gofiber/fiber/v2"
"github.com/spf13/cobra"
)

var mysqlCommand = &cobra.Command{
Use: "mysql",
Short: "use mysql as the database provider",
RunE: func(cmd *cobra.Command, args []string) error {
var cfg string

connUrl, _ := cmd.Flags().GetString("url")
if connUrl != "" {
cfg = connUrl
} else {
dbUsername, _ := cmd.Flags().GetString("username")
dbHost, _ := cmd.Flags().GetString("host")
dbPort, _ := cmd.Flags().GetInt("dbPort")
dbName, _ := cmd.Flags().GetString("db")

dbPassword, _ := cmd.Flags().GetString("password")
if dbPassword == "" {
fmt.Println("Enter password: ")
fmt.Scanln(&dbPassword)
}

conf := mysql.Config{
User: dbUsername,
Passwd: dbPassword,
DBName: dbName,
Net: "tcp",
Addr: fmt.Sprintf("%s:%d", dbHost, dbPort),
}
cfg = conf.FormatDSN()
}

port, _ := cmd.Flags().GetInt("port")

app := fiber.New(fiber.Config{DisableStartupMessage: true})

if err := internal.InitDBAndServer(app, lib.MYSQL, cfg, port, make(chan bool, 1)); err != nil {
return err
}
// var cfg string

// connUrl, _ := cmd.Flags().GetString("url")
// if connUrl != "" {
// cfg = connUrl
// } else {
// dbUsername, _ := cmd.Flags().GetString("username")
// dbHost, _ := cmd.Flags().GetString("host")
// dbPort, _ := cmd.Flags().GetInt("dbPort")
// dbName, _ := cmd.Flags().GetString("db")

// dbPassword, _ := cmd.Flags().GetString("password")
// if dbPassword == "" {
// fmt.Println("Enter password: ")
// fmt.Scanln(&dbPassword)
// }

// conf := mysql.Config{
// User: dbUsername,
// Passwd: dbPassword,
// DBName: dbName,
// Net: "tcp",
// Addr: fmt.Sprintf("%s:%d", dbHost, dbPort),
// }
// cfg = conf.FormatDSN()
// }

// port, _ := cmd.Flags().GetInt("port")

// app := fiber.New(fiber.Config{DisableStartupMessage: true})

// if err := internal.InitDBAndServer(app, lib.MYSQL, cfg, port, make(chan bool, 1)); err != nil {
// return err
// }
return nil
},
}
Expand Down
63 changes: 28 additions & 35 deletions cmd/pg.go
Original file line number Diff line number Diff line change
@@ -1,48 +1,41 @@
package cmd

import (
"fmt"
"github.com/kareemmahlees/meta-x/internal"
"github.com/kareemmahlees/meta-x/lib"

"github.com/gofiber/fiber/v2"
"github.com/lib/pq"

"github.com/spf13/cobra"
)

var pgCommand = &cobra.Command{
Use: "pg",
Short: "use postgres as the database provider",
RunE: func(cmd *cobra.Command, args []string) error {
var cfg string

connUrl, _ := cmd.Flags().GetString("url")
if connUrl != "" {
cfg = connUrl
} else {
dbUsername, _ := cmd.Flags().GetString("username")
dbHost, _ := cmd.Flags().GetString("host")
dbPort, _ := cmd.Flags().GetInt("dbPort")
dbName, _ := cmd.Flags().GetString("db")
dbSslMode, _ := cmd.Flags().GetString("sslmode")

dbPassword, _ := cmd.Flags().GetString("password")
if dbPassword == "" {
fmt.Println("Enter password: ")
fmt.Scanln(&dbPassword)
}

cfg, _ = pq.ParseURL(fmt.Sprintf("postgres://%s:%s@%s:%d/%s?sslmode=%s", dbUsername, dbPassword, dbHost, dbPort, dbName, dbSslMode))
}

port, _ := cmd.Flags().GetInt("port")

app := fiber.New(fiber.Config{DisableStartupMessage: true})

if err := internal.InitDBAndServer(app, lib.PSQL, cfg, port, make(chan bool, 1)); err != nil {
return err
}
// var cfg string

// connUrl, _ := cmd.Flags().GetString("url")
// if connUrl != "" {
// cfg = connUrl
// } else {
// dbUsername, _ := cmd.Flags().GetString("username")
// dbHost, _ := cmd.Flags().GetString("host")
// dbPort, _ := cmd.Flags().GetInt("dbPort")
// dbName, _ := cmd.Flags().GetString("db")
// dbSslMode, _ := cmd.Flags().GetString("sslmode")

// dbPassword, _ := cmd.Flags().GetString("password")
// if dbPassword == "" {
// fmt.Println("Enter password: ")
// fmt.Scanln(&dbPassword)
// }

// cfg, _ = pq.ParseURL(fmt.Sprintf("postgres://%s:%s@%s:%d/%s?sslmode=%s", dbUsername, dbPassword, dbHost, dbPort, dbName, dbSslMode))
// }

// port, _ := cmd.Flags().GetInt("port")

// app := fiber.New(fiber.Config{DisableStartupMessage: true})

// if err := internal.InitDBAndServer(app, lib.PSQL, cfg, port, make(chan bool, 1)); err != nil {
// return err
// }
return nil
},
}
Expand Down
15 changes: 12 additions & 3 deletions cmd/sqlite3.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,10 @@ package cmd

import (
"github.com/kareemmahlees/meta-x/internal"
"github.com/kareemmahlees/meta-x/internal/db"
"github.com/kareemmahlees/meta-x/lib"
"github.com/kareemmahlees/meta-x/utils"

"github.com/gofiber/fiber/v2"
"github.com/spf13/cobra"
)

Expand All @@ -20,8 +21,16 @@ var sqlite3Command = &cobra.Command{
if err != nil {
return err
}
app := fiber.New(fiber.Config{DisableStartupMessage: true})
if err = internal.InitDBAndServer(app, lib.SQLITE3, filePath, port, make(chan bool, 1)); err != nil {
sqliteConfig := utils.NewSQLiteConfig(filePath)

conn, err := internal.InitDBConn(lib.SQLITE3, sqliteConfig)
if err != nil {
return err
}
provider := db.NewSQLiteProvider(conn)

server := internal.NewServer(provider, port, make(chan bool))
if err = server.Serve(); err != nil {
return err
}
return nil
Expand Down
5 changes: 3 additions & 2 deletions internal/db.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,15 @@ package internal

import (
_ "github.com/go-sql-driver/mysql"
"github.com/kareemmahlees/meta-x/utils"
_ "github.com/lib/pq"
_ "github.com/mattn/go-sqlite3"

"github.com/jmoiron/sqlx"
)

func InitDBConn(provider, cfg string) (*sqlx.DB, error) {
db, err := sqlx.Connect(provider, cfg)
func InitDBConn(provider string, cfg utils.Config) (*sqlx.DB, error) {
db, err := sqlx.Connect(provider, cfg.DSN())

if err != nil {
return nil, err
Expand Down
Loading

0 comments on commit 08c7475

Please sign in to comment.