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 }