Add database context

master
grumbulon 1 year ago
parent 3bbddf4328
commit e355f9862e

5
.gitignore vendored

@ -20,4 +20,7 @@
*.db
#logs
*.log
*.log
#env
*.env

@ -4,6 +4,7 @@ go 1.18
require (
github.com/gorilla/mux v1.8.0
github.com/joho/godotenv v1.4.0
github.com/mattn/go-sqlite3 v1.14.14
gorm.io/driver/sqlite v1.3.6
gorm.io/gorm v1.23.4

@ -5,6 +5,8 @@ github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkr
github.com/jinzhu/now v1.1.4/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ=
github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
github.com/joho/godotenv v1.4.0 h1:3l4+N6zfMWnkbPEXKng2o2/MR5mSwTrBih4ZEkkz1lg=
github.com/joho/godotenv v1.4.0/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4=
github.com/mattn/go-sqlite3 v1.14.12/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU=
github.com/mattn/go-sqlite3 v1.14.14 h1:qZgc/Rwetq+MtyE18WhzjokPD93dNqLGNT3QJuLvBGw=
github.com/mattn/go-sqlite3 v1.14.14/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU=

@ -12,10 +12,11 @@ import (
)
func Ingest(w http.ResponseWriter, r *http.Request) {
dbCtx := db.InitDB()
ir := utils.IncomingReq{}
w.Header().Set("Content-Type", "application/json")
url := r.URL.Query().Get("req")
cached, err := db.Lookup(url)
cached, err := dbCtx.Lookup(url)
if err == nil {
if cached != "" {
short := cached
@ -35,9 +36,10 @@ func Ingest(w http.ResponseWriter, r *http.Request) {
}
func Redirect(w http.ResponseWriter, r *http.Request) {
dbCtx := db.InitDB()
vars := mux.Vars(r)
varCode := vars["code"]
url, err := db.GetUrl(varCode)
url, err := dbCtx.GetUrl(varCode)
if err == nil {
http.Redirect(w, r, url, http.StatusPermanentRedirect)
}

@ -6,6 +6,7 @@ import (
"strings"
"time"
"github.com/joho/godotenv"
_ "github.com/mattn/go-sqlite3"
"gorm.io/driver/sqlite"
"gorm.io/gorm"
@ -19,13 +20,24 @@ type UrlCache struct {
Code string
}
func Logging() (newLogger logger.Interface) {
file, err := os.Create("GoShortLog.log")
type CacheDB struct {
Gormlog logger.Interface
DbName string
}
func InitDB() (ctx *CacheDB) {
var db CacheDB
err := godotenv.Load(".env")
if err != nil {
// Handle error
panic(err)
log.Fatalf("Unable to parse env file: %v", err)
}
newLogger = logger.New(
file, err := os.Create(os.Getenv("LOGFILE"))
if err != nil {
log.Fatalf("Unable to create logfile: %v", err)
}
db.DbName = os.Getenv("DBNAME")
db.Gormlog = logger.New(
log.New(file, "\r\n", log.LstdFlags), // io writer
logger.Config{
SlowThreshold: time.Second, // Slow SQL threshold
@ -34,12 +46,25 @@ func Logging() (newLogger logger.Interface) {
Colorful: false, // Disable color
},
)
return &db
}
func Logging() (newLogger logger.Interface) {
file, err := os.Create("GoShortLog.log")
if err != nil {
// Handle error
panic(err)
}
newLogger = logger.New(
log.New(file, "\r\n", log.LstdFlags), // io writer
logger.Config{},
)
return newLogger
}
func Cache(url string, short string, code string) (bool, error) {
logger := Logging()
db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{
func (c *CacheDB) Cache(url string, short string, code string) (bool, error) {
logger := c.Gormlog
db, err := gorm.Open(sqlite.Open(c.DbName), &gorm.Config{
Logger: logger,
})
if err != nil {
@ -54,10 +79,10 @@ func Cache(url string, short string, code string) (bool, error) {
return true, nil
}
func Lookup(url string) (string, error) {
func (c *CacheDB) Lookup(url string) (string, error) {
var obj UrlCache
logger := Logging()
db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{
logger := c.Gormlog
db, err := gorm.Open(sqlite.Open(c.DbName), &gorm.Config{
Logger: logger,
})
if !strings.HasPrefix(url, "http") {
@ -72,10 +97,10 @@ func Lookup(url string) (string, error) {
return obj.Code, nil
}
func GetUrl(code string) (string, error) {
func (c *CacheDB) GetUrl(code string) (string, error) {
var obj UrlCache
logger := Logging()
db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{
logger := c.Gormlog
db, err := gorm.Open(sqlite.Open(c.DbName), &gorm.Config{
Logger: logger,
})
db.AutoMigrate(&UrlCache{})

@ -21,6 +21,7 @@ type OutgoingRes struct {
}
func (ir *IncomingReq) Encode() (OutgoingRes, error) {
dbCtx := db.InitDB()
if ir.ShortCode != "" { //Handle cache hits
url := fmt.Sprintf("http://localhost:3000/%s", ir.ShortCode)
return OutgoingRes{ShortUrl: url, Status: http.StatusOK}, nil
@ -33,7 +34,7 @@ func (ir *IncomingReq) Encode() (OutgoingRes, error) {
short := Encode62(r)
url := `http://` + ir.AppUrl + `/` + short
fmt.Println(url)
db.Cache(ir.Url, url, short) //cache results for later
dbCtx.Cache(ir.Url, url, short) //cache results for later
return OutgoingRes{ShortUrl: url, Status: http.StatusOK}, nil
}

Loading…
Cancel
Save