40 lines
1.1 KiB
Go
40 lines
1.1 KiB
Go
|
|
package tenant
|
||
|
|
|
||
|
|
import (
|
||
|
|
"context"
|
||
|
|
"database/sql"
|
||
|
|
"time"
|
||
|
|
)
|
||
|
|
|
||
|
|
func (q *Queries) GetPage(ctx context.Context, path string) ([]byte, string, error) {
|
||
|
|
var html []byte
|
||
|
|
var etag sql.NullString
|
||
|
|
err := q.db.QueryRowContext(ctx, `SELECT html, etag FROM pages WHERE path = ?`, path).Scan(&html, &etag)
|
||
|
|
if err == sql.ErrNoRows {
|
||
|
|
return nil, "", nil
|
||
|
|
}
|
||
|
|
if err != nil {
|
||
|
|
return nil, "", err
|
||
|
|
}
|
||
|
|
return html, etag.String, nil
|
||
|
|
}
|
||
|
|
|
||
|
|
func (q *Queries) SetPage(ctx context.Context, path string, html []byte, etag string) error {
|
||
|
|
now := time.Now().UTC().Format(time.RFC3339)
|
||
|
|
_, err := q.db.ExecContext(ctx, `INSERT INTO pages (path, html, etag, built_at)
|
||
|
|
VALUES (?, ?, ?, ?)
|
||
|
|
ON CONFLICT(path) DO UPDATE SET html = excluded.html, etag = excluded.etag, built_at = excluded.built_at`,
|
||
|
|
path, html, nullStr(etag), now)
|
||
|
|
return err
|
||
|
|
}
|
||
|
|
|
||
|
|
func (q *Queries) DeleteAllPages(ctx context.Context) error {
|
||
|
|
_, err := q.db.ExecContext(ctx, `DELETE FROM pages`)
|
||
|
|
return err
|
||
|
|
}
|
||
|
|
|
||
|
|
func (q *Queries) DeletePage(ctx context.Context, path string) error {
|
||
|
|
_, err := q.db.ExecContext(ctx, `DELETE FROM pages WHERE path = ?`, path)
|
||
|
|
return err
|
||
|
|
}
|