Have got publishing to Netlify
This commit is contained in:
parent
8e0ffb6c24
commit
7ef6725bdb
23 changed files with 667 additions and 109 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
}
|
||||
|
|
|
|||
73
gen/sqlc/dbq/targets.sql.go
Normal file
73
gen/sqlc/dbq/targets.sql.go
Normal 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
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue