Files
tide/api/services/database.go
T
2023-09-17 16:27:40 +02:00

69 lines
1.3 KiB
Go

package services
import (
"database/sql"
"fmt"
"os"
"tide/api/models"
"github.com/golang-migrate/migrate/v4"
"github.com/golang-migrate/migrate/v4/database/postgres"
_ "github.com/golang-migrate/migrate/v4/source/file"
_ "github.com/lib/pq"
)
type Database struct {
Connection *sql.DB
}
func NewDatabase() (*Database, error) {
d := new(Database)
con := fmt.Sprintf(
"postgresql://%v:%v@%v:%v/%v?sslmode=disable",
os.Getenv("POSTGRES_USER"),
os.Getenv("POSTGRES_PASSWORD"),
os.Getenv("POSTGRES_SERVER"),
os.Getenv("POSTGRES_PORT"),
os.Getenv("POSTGRES_DB"),
)
db, err := sql.Open("postgres", con)
if err != nil {
return nil, err
}
d.Connection = db
return d, nil
}
func (db *Database) Migrate() error {
driver, err := postgres.WithInstance(db.Connection, &postgres.Config{})
if err != nil {
return err
}
m, err := migrate.NewWithDatabaseInstance(
"file:///app/migrations",
"postgres",
driver,
)
if err != nil {
return err
}
m.Up()
return nil
}
func (d *Database) AddItem(item *models.Item) (*models.Item, error) {
_, err := d.Connection.Exec(
"INSERT INTO items (id, name, path, size, files) VALUES (?, ?, ?, ?, ?)",
item.Id,
item.Name,
item.Path,
item.Size,
item.Files,
)
if err != nil {
return nil, err
}
return item, nil
}