2018-10-03 10:44:31 +02:00
|
|
|
package sqlstore
|
|
|
|
|
|
|
|
import (
|
|
|
|
"github.com/usefathom/fathom/pkg/models"
|
|
|
|
)
|
|
|
|
|
|
|
|
// GetSites gets all sites in the database
|
|
|
|
func (db *sqlstore) GetSites() ([]*models.Site, error) {
|
2018-10-03 11:54:48 +02:00
|
|
|
results := []*models.Site{}
|
2018-10-03 10:44:31 +02:00
|
|
|
query := db.Rebind(`SELECT * FROM sites`)
|
|
|
|
err := db.Select(&results, query)
|
|
|
|
return results, err
|
|
|
|
}
|
|
|
|
|
|
|
|
// SaveSite saves the website in the database (inserts or updates)
|
|
|
|
func (db *sqlstore) SaveSite(s *models.Site) error {
|
|
|
|
if s.ID > 0 {
|
|
|
|
return db.updateSite(s)
|
|
|
|
}
|
|
|
|
|
|
|
|
return db.insertSite(s)
|
|
|
|
}
|
|
|
|
|
|
|
|
// InsertSite saves a new site in the database
|
|
|
|
func (db *sqlstore) insertSite(s *models.Site) error {
|
2018-10-03 15:27:36 +02:00
|
|
|
|
|
|
|
// Postgres does not support LastInsertID, so use a "... RETURNING" select query
|
2018-10-03 10:44:31 +02:00
|
|
|
query := db.Rebind(`INSERT INTO sites(tracking_id, name) VALUES(?, ?)`)
|
2018-10-03 15:27:36 +02:00
|
|
|
if db.Driver == POSTGRES {
|
|
|
|
err := db.Get(&s.ID, query+" RETURNING id", s.TrackingID, s.Name)
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
// MySQL and SQLite do support LastInsertID, so use that
|
2018-10-03 10:44:31 +02:00
|
|
|
r, err := db.Exec(query, s.TrackingID, s.Name)
|
|
|
|
if err != nil {
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
s.ID, err = r.LastInsertId()
|
|
|
|
return err
|
2018-10-03 15:27:36 +02:00
|
|
|
|
2018-10-03 10:44:31 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
// UpdateSite updates an existing site in the database
|
|
|
|
func (db *sqlstore) updateSite(s *models.Site) error {
|
|
|
|
query := db.Rebind(`UPDATE sites SET name = ? WHERE id = ?`)
|
|
|
|
_, err := db.Exec(query, s.Name, s.ID)
|
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
// DeleteSite deletes the given site in the database
|
|
|
|
func (db *sqlstore) DeleteSite(s *models.Site) error {
|
|
|
|
query := db.Rebind(`DELETE FROM sites WHERE id = ?`)
|
|
|
|
_, err := db.Exec(query, s.ID)
|
|
|
|
return err
|
|
|
|
}
|