Have got publishing to Netlify

This commit is contained in:
Leon Mika 2025-01-27 15:45:53 +11:00
parent 8e0ffb6c24
commit 7ef6725bdb
23 changed files with 667 additions and 109 deletions

View file

@ -53,6 +53,88 @@ func (ns NullPostState) Value() (driver.Value, error) {
return string(ns.PostState), nil
}
type TargetRole string
const (
TargetRoleProduction TargetRole = "production"
)
func (e *TargetRole) Scan(src interface{}) error {
switch s := src.(type) {
case []byte:
*e = TargetRole(s)
case string:
*e = TargetRole(s)
default:
return fmt.Errorf("unsupported scan type for TargetRole: %T", src)
}
return nil
}
type NullTargetRole struct {
TargetRole TargetRole
Valid bool // Valid is true if TargetRole is not NULL
}
// Scan implements the Scanner interface.
func (ns *NullTargetRole) Scan(value interface{}) error {
if value == nil {
ns.TargetRole, ns.Valid = "", false
return nil
}
ns.Valid = true
return ns.TargetRole.Scan(value)
}
// Value implements the driver Valuer interface.
func (ns NullTargetRole) Value() (driver.Value, error) {
if !ns.Valid {
return nil, nil
}
return string(ns.TargetRole), nil
}
type TargetType string
const (
TargetTypeNetlify TargetType = "netlify"
)
func (e *TargetType) Scan(src interface{}) error {
switch s := src.(type) {
case []byte:
*e = TargetType(s)
case string:
*e = TargetType(s)
default:
return fmt.Errorf("unsupported scan type for TargetType: %T", src)
}
return nil
}
type NullTargetType struct {
TargetType TargetType
Valid bool // Valid is true if TargetType is not NULL
}
// Scan implements the Scanner interface.
func (ns *NullTargetType) Scan(value interface{}) error {
if value == nil {
ns.TargetType, ns.Valid = "", false
return nil
}
ns.Valid = true
return ns.TargetType.Scan(value)
}
// Value implements the driver Valuer interface.
func (ns NullTargetType) Value() (driver.Value, error) {
if !ns.Valid {
return nil, nil
}
return string(ns.TargetType), nil
}
type Post struct {
ID int64
SiteID int64
@ -64,6 +146,15 @@ type Post struct {
CreatedAt pgtype.Timestamp
}
type PublishTarget struct {
ID int64
SiteID int64
Role TargetRole
TargetType TargetType
Url string
TargetRef string
}
type Site struct {
ID int64
Name string

View file

@ -81,3 +81,45 @@ func (q *Queries) ListPosts(ctx context.Context, siteID int64) ([]Post, error) {
}
return items, nil
}
const listPublishablePosts = `-- name: ListPublishablePosts :many
SELECT id, site_id, title, body, state, props, post_date, created_at
FROM post
WHERE id > $1 AND site_id = $2 AND state = 'published' AND post_date <= $3
ORDER BY id LIMIT 100
`
type ListPublishablePostsParams struct {
ID int64
SiteID int64
PostDate pgtype.Timestamptz
}
func (q *Queries) ListPublishablePosts(ctx context.Context, arg ListPublishablePostsParams) ([]Post, error) {
rows, err := q.db.Query(ctx, listPublishablePosts, arg.ID, arg.SiteID, arg.PostDate)
if err != nil {
return nil, err
}
defer rows.Close()
var items []Post
for rows.Next() {
var i Post
if err := rows.Scan(
&i.ID,
&i.SiteID,
&i.Title,
&i.Body,
&i.State,
&i.Props,
&i.PostDate,
&i.CreatedAt,
); err != nil {
return nil, err
}
items = append(items, i)
}
if err := rows.Err(); err != nil {
return nil, err
}
return items, nil
}

View file

@ -0,0 +1,73 @@
// Code generated by sqlc. DO NOT EDIT.
// versions:
// sqlc v1.28.0
// source: targets.sql
package dbq
import (
"context"
)
const insertPublishTarget = `-- name: InsertPublishTarget :one
INSERT INTO publish_target (
site_id,
role,
target_type,
url,
target_ref
) VALUES ($1, $2, $3, $4, $5)
RETURNING id
`
type InsertPublishTargetParams struct {
SiteID int64
Role TargetRole
TargetType TargetType
Url string
TargetRef string
}
func (q *Queries) InsertPublishTarget(ctx context.Context, arg InsertPublishTargetParams) (int64, error) {
row := q.db.QueryRow(ctx, insertPublishTarget,
arg.SiteID,
arg.Role,
arg.TargetType,
arg.Url,
arg.TargetRef,
)
var id int64
err := row.Scan(&id)
return id, err
}
const listPublishTargetsOfRole = `-- name: ListPublishTargetsOfRole :many
SELECT id, site_id, role, target_type, url, target_ref FROM publish_target WHERE site_id = $1 AND role = 'production'
`
func (q *Queries) ListPublishTargetsOfRole(ctx context.Context, siteID int64) ([]PublishTarget, error) {
rows, err := q.db.Query(ctx, listPublishTargetsOfRole, siteID)
if err != nil {
return nil, err
}
defer rows.Close()
var items []PublishTarget
for rows.Next() {
var i PublishTarget
if err := rows.Scan(
&i.ID,
&i.SiteID,
&i.Role,
&i.TargetType,
&i.Url,
&i.TargetRef,
); err != nil {
return nil, err
}
items = append(items, i)
}
if err := rows.Err(); err != nil {
return nil, err
}
return items, nil
}