mirror of
https://github.com/zoriya/tide.git
synced 2026-08-15 18:43:19 +00:00
69 lines
1.3 KiB
Go
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
|
|
}
|