2024-05-08 09:00:58 +01:00
|
|
|
package sites
|
|
|
|
|
|
|
|
import (
|
|
|
|
"database/sql"
|
|
|
|
"fmt"
|
|
|
|
)
|
|
|
|
|
|
|
|
const createSitesTable = `CREATE TABLE IF NOT EXISTS sites (
|
2024-05-08 09:26:26 +01:00
|
|
|
url TEXT NOT NULL PRIMARY KEY,
|
2024-05-08 09:00:58 +01:00
|
|
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
2024-05-08 09:26:26 +01:00
|
|
|
name TEXT NOT NULL
|
2024-05-08 09:00:58 +01:00
|
|
|
);`
|
|
|
|
|
|
|
|
func CreateTable(db *sql.DB) {
|
|
|
|
if _, err := db.Exec(createSitesTable); err != nil {
|
|
|
|
fmt.Println(fmt.Errorf(err.Error()))
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
type Site struct {
|
2024-05-13 07:37:11 +01:00
|
|
|
Created_at string
|
2024-05-08 09:00:58 +01:00
|
|
|
Name string
|
|
|
|
Url string
|
|
|
|
}
|
|
|
|
|
2024-05-08 09:26:26 +01:00
|
|
|
const upsertQuery = `INSERT INTO sites (url, name) VALUES (?, ?)
|
|
|
|
ON CONFLICT (url) DO UPDATE
|
|
|
|
SET
|
|
|
|
name = excluded.name
|
|
|
|
`
|
|
|
|
|
2024-05-08 09:00:58 +01:00
|
|
|
func (s *Site) Save(db *sql.DB) {
|
2024-05-08 09:26:26 +01:00
|
|
|
db.Exec(upsertQuery, s.Url, s.Name)
|
2024-05-08 09:00:58 +01:00
|
|
|
}
|
2024-05-13 07:37:11 +01:00
|
|
|
|
|
|
|
func List(db *sql.DB) []Site {
|
|
|
|
rows, err := db.Query(`SELECT url, name, created_at FROM sites ORDER BY created_at DESC`)
|
|
|
|
|
|
|
|
if err != nil {
|
|
|
|
panic(err)
|
|
|
|
}
|
|
|
|
defer rows.Close()
|
|
|
|
|
|
|
|
sites := make([]Site, 0)
|
|
|
|
|
|
|
|
for rows.Next() {
|
|
|
|
s := Site{}
|
|
|
|
rows.Scan(&s.Url, &s.Name, &s.Created_at)
|
|
|
|
sites = append(sites, s)
|
|
|
|
}
|
|
|
|
|
|
|
|
return sites
|
|
|
|
}
|