Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -79,4 +79,5 @@ music/
music_dev/
*.db
*.env
database/data
database/data
*.pid
18 changes: 5 additions & 13 deletions MyMusicBoxApi/configuration/util.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,22 +8,14 @@ import (

var Config models.Config

func LoadConfig() {
flag.StringVar(&Config.DevPort, "port", "", "Development port else use default port")
flag.BoolVar(&Config.UseDevUrl, "devurl", false, "Have a dev prefix in the url")
flag.StringVar(&Config.SourceFolder, "sourceFolder", "music", "Output folder for data")
flag.StringVar(&Config.OutputExtension, "outputExtension", "opus", "Extension for ouput file")
func LoadConfiguration() {
flag.StringVar(&Config.DevPort, "port", "", "-port=8081")
flag.BoolVar(&Config.UseDevUrl, "devurl", false, "-devurl")
flag.StringVar(&Config.SourceFolder, "sourceFolder", "music", "-sourceFolder=/path to source folder/")
flag.StringVar(&Config.OutputExtension, "outputExtension", "opus", "-outputExtension=opus,mp3,mp4 etc")
flag.Parse()
}

func GetApiGroupUrlV1() string {
if Config.UseDevUrl {
return "/dev/api/v1"
} else {
return "/api/v1"
}
}

func GetApiGroupUrl(version string) string {
if Config.UseDevUrl {
return fmt.Sprintf("/dev/api/%s", version)
Expand Down
138 changes: 138 additions & 0 deletions MyMusicBoxApi/database/db.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,138 @@
package database

import (
"database/sql"
"errors"
"fmt"
"musicboxapi/configuration"
"musicboxapi/logging"
"os"
"strings"
"time"

_ "github.com/lib/pq"
)

var DbInstance *sql.DB

type BaseTable struct {
DB *sql.DB
}

func NewBaseTableInstance() BaseTable {
return BaseTable{
DB: DbInstance,
}
}

func CreateDatabasConnectionPool() error {

// Will throw an error if its missing a method implementation from interface
// will throw a compile time error
var _ ISongTable = (*SongTable)(nil)
var _ IPlaylistTable = (*PlaylistTable)(nil)
var _ IPlaylistsongTable = (*PlaylistsongTable)(nil)
var _ ITasklogTable = (*TasklogTable)(nil)

baseConnectionString := "user=postgres dbname=postgres password=%s %s sslmode=disable"
password := os.Getenv("POSTGRES_PASSWORD")
host := "host=127.0.0.1 port=5432"

if configuration.Config.UseDevUrl {
host = "host=127.0.0.1 port=5433"
}

connectionString := fmt.Sprintf(baseConnectionString, password, host)

DB, err := sql.Open("postgres", connectionString)

if err != nil {
logging.Error(fmt.Sprintf("Failed to init database connection: %s", err.Error()))
return err
}

DB.SetMaxOpenConns(10)
DB.SetMaxIdleConns(5)
DB.SetConnMaxIdleTime(1 * time.Minute)
DB.SetConnMaxLifetime(5 * time.Minute)

DbInstance = DB

return nil
}

// Base methods
func (base *BaseTable) InsertWithReturningId(query string, params ...any) (lastInsertedId int, err error) {

if !strings.Contains(query, "RETURNING") {
logging.Error("Query does not contain RETURNING keyword")
return -1, errors.New("Query does not contain RETURNING keyword")
}

transaction, err := base.DB.Begin()

statement, err := transaction.Prepare(query)

if err != nil {
transaction.Rollback()
logging.Error(fmt.Sprintf("Prepared statement error: %s", err.Error()))
return -1, err
}
defer statement.Close()

err = statement.QueryRow(params...).Scan(&lastInsertedId)

if err != nil {
logging.Error(fmt.Sprintf("Queryrow error: %s", err.Error()))
transaction.Rollback()
return -1, err
}

err = transaction.Commit()

if err != nil {
logging.Error(fmt.Sprintf("Transaction commit error: %s", err.Error()))
transaction.Rollback()
return -1, err
}

return lastInsertedId, nil
}
func (base *BaseTable) NonScalarQuery(query string, params ...any) (error error) {

transaction, err := base.DB.Begin()

if err != nil {
logging.Error(fmt.Sprintf("Transaction error: %s", err.Error()))
return err
}

statement, err := transaction.Prepare(query)

if err != nil {
logging.Error(fmt.Sprintf("Prepared statement error: %s", err.Error()))
return err
}

defer statement.Close()

_, err = statement.Exec(params...)

if err != nil {
logging.Error(fmt.Sprintf("Exec error: %s", err.Error()))
logging.Error(fmt.Sprintf("Query: %s", query))
for index := range params {
logging.Error(params[index])
}
return err
}

err = transaction.Commit()

if err != nil {
logging.Error(fmt.Sprintf("Transaction commit error: %s", err.Error()))
return err
}

return nil
}
62 changes: 0 additions & 62 deletions MyMusicBoxApi/database/playlist.go

This file was deleted.

80 changes: 0 additions & 80 deletions MyMusicBoxApi/database/playlistsong.go

This file was deleted.

Loading