75 lines
1.7 KiB
Go
75 lines
1.7 KiB
Go
package database
|
|
|
|
import (
|
|
"database/sql"
|
|
"foobar/model"
|
|
"time"
|
|
|
|
"github.com/google/uuid"
|
|
)
|
|
|
|
func SelectBox(boxURL model.BoxURL) (model.Box, error) {
|
|
row := instance.QueryRow(
|
|
`SELECT id, edit_code, header, private, moderation, created_at, last_updated_at
|
|
FROM box WHERE url = $1;`,
|
|
boxURL,
|
|
)
|
|
if row.Err() != nil {
|
|
return model.Box{}, row.Err()
|
|
}
|
|
var (
|
|
id uuid.UUID
|
|
edit_code string
|
|
header *model.Markdown
|
|
private bool
|
|
moderation bool
|
|
createdAt time.Time
|
|
lastUpdatedAt time.Time
|
|
)
|
|
err := row.Scan(&id, &edit_code, &header, &private, &moderation, &createdAt, &lastUpdatedAt)
|
|
if err != nil {
|
|
return model.Box{}, err
|
|
}
|
|
if header == nil {
|
|
header = new(model.Markdown)
|
|
*header = ""
|
|
}
|
|
return model.NewBox(id, boxURL, edit_code, *header, private, moderation, createdAt, lastUpdatedAt), nil
|
|
}
|
|
|
|
func UpdateHeader(tx *sql.Tx, boxId uuid.UUID, text model.Markdown) error {
|
|
result, err := tx.Exec(`UPDATE box SET header = $1 where id = $2`, text, boxId)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
n, err := result.RowsAffected()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if n != 1 {
|
|
return errNoRowsAffected
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func InsertBox(tx *sql.Tx, box model.Box, editCode string, header model.Markdown) error {
|
|
result, err := tx.Exec(
|
|
`INSERT INTO box (id, url, edit_code, header, private, moderation, created_at, last_updated_at)
|
|
VALUES ($1, $2, $3, $4, $5, $6, $7, $8)`,
|
|
box.ID(), box.Url(), editCode, header, box.Private(), box.Moderation(),
|
|
box.CreatedAt(), box.LastUpdatedAt(),
|
|
)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
n, err := result.RowsAffected()
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if n != 1 {
|
|
return errNoRowsAffected
|
|
}
|
|
return nil
|
|
}
|