78 lines
1.3 KiB
Go
78 lines
1.3 KiB
Go
package db
|
|
|
|
import (
|
|
"binaryserver/app/utils"
|
|
|
|
"github.com/google/uuid"
|
|
)
|
|
|
|
type Record struct {
|
|
UUID uuid.UUID `json:"uuid"`
|
|
Handle string `json:"handle"`
|
|
URL string `json:"url"`
|
|
}
|
|
|
|
func NewRecord(handle, url string) Record {
|
|
return Record{
|
|
UUID: utils.GetUUID(),
|
|
Handle: handle,
|
|
URL: url,
|
|
}
|
|
}
|
|
|
|
func SaveRecord(record Record) error {
|
|
conn := HandleConn()
|
|
stmt, err := conn.Prepare(`INSERT INTO records
|
|
VALUES(?, ?, ?)`)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
_, err = stmt.Exec(record.UUID.String(), record.Handle, record.URL)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer stmt.Close()
|
|
return nil
|
|
}
|
|
|
|
func GetRecords(opts QueryOptions) ([]Record, error) {
|
|
conn := HandleConn()
|
|
var records []Record
|
|
stmt, err := opts.Build(conn, "records")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
row, err := stmt.Query()
|
|
stmt.Close()
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
defer row.Close()
|
|
for {
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
if !row.Next() {
|
|
break
|
|
}
|
|
record := Record{}
|
|
row.Scan(&record.UUID, &record.Handle, &record.URL)
|
|
records = append(records, record)
|
|
}
|
|
return records, nil
|
|
}
|
|
|
|
func DeleteRecord(record Record) error {
|
|
stmt, err := conn.Prepare(`DELETE FROM records
|
|
WHERE UUID = ?`)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
defer stmt.Close()
|
|
_, err = stmt.Exec(record.UUID.String())
|
|
if err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
}
|