Added sub commands for doing admin stuff

This commit is contained in:
Leon Mika 2026-02-28 10:39:08 +11:00
parent 329de2f953
commit 4a6b79db17
18 changed files with 531 additions and 185 deletions

View file

@ -21,6 +21,7 @@ type Post struct {
type PublishTarget struct {
ID int64
SiteID int64
Guid string
TargetType string
Enabled int64
BaseUrl string

View file

@ -12,17 +12,19 @@ import (
const insertPublishTarget = `-- name: InsertPublishTarget :one
INSERT INTO publish_targets (
site_id,
guid,
target_type,
enabled,
base_url,
target_ref,
target_key
) VALUES (?, ?, ?, ?, ?, ?)
) VALUES (?, ?, ?, ?, ?, ?, ?)
RETURNING id
`
type InsertPublishTargetParams struct {
SiteID int64
Guid string
TargetType string
Enabled int64
BaseUrl string
@ -33,6 +35,7 @@ type InsertPublishTargetParams struct {
func (q *Queries) InsertPublishTarget(ctx context.Context, arg InsertPublishTargetParams) (int64, error) {
row := q.db.QueryRowContext(ctx, insertPublishTarget,
arg.SiteID,
arg.Guid,
arg.TargetType,
arg.Enabled,
arg.BaseUrl,
@ -45,7 +48,7 @@ func (q *Queries) InsertPublishTarget(ctx context.Context, arg InsertPublishTarg
}
const selectPublishTargetsOfSite = `-- name: SelectPublishTargetsOfSite :many
SELECT id, site_id, target_type, enabled, base_url, target_ref, target_key FROM publish_targets WHERE site_id = ?
SELECT id, site_id, guid, target_type, enabled, base_url, target_ref, target_key FROM publish_targets WHERE site_id = ?
`
func (q *Queries) SelectPublishTargetsOfSite(ctx context.Context, siteID int64) ([]PublishTarget, error) {
@ -60,6 +63,7 @@ func (q *Queries) SelectPublishTargetsOfSite(ctx context.Context, siteID int64)
if err := rows.Scan(
&i.ID,
&i.SiteID,
&i.Guid,
&i.TargetType,
&i.Enabled,
&i.BaseUrl,

View file

@ -53,6 +53,68 @@ func (q *Queries) InsertSite(ctx context.Context, arg InsertSiteParams) (int64,
return id, err
}
const selectAllSitesWithOwners = `-- name: SelectAllSitesWithOwners :many
SELECT s.id, s.guid, s.title, s.owner_id, u.username
FROM sites s
JOIN users u ON s.owner_id = u.id
ORDER BY s.title ASC
`
type SelectAllSitesWithOwnersRow struct {
ID int64
Guid string
Title string
OwnerID int64
Username string
}
func (q *Queries) SelectAllSitesWithOwners(ctx context.Context) ([]SelectAllSitesWithOwnersRow, error) {
rows, err := q.db.QueryContext(ctx, selectAllSitesWithOwners)
if err != nil {
return nil, err
}
defer rows.Close()
var items []SelectAllSitesWithOwnersRow
for rows.Next() {
var i SelectAllSitesWithOwnersRow
if err := rows.Scan(
&i.ID,
&i.Guid,
&i.Title,
&i.OwnerID,
&i.Username,
); err != nil {
return nil, err
}
items = append(items, i)
}
if err := rows.Close(); err != nil {
return nil, err
}
if err := rows.Err(); err != nil {
return nil, err
}
return items, nil
}
const selectSiteByGUID = `-- name: SelectSiteByGUID :one
SELECT id, owner_id, guid, title, tagline, created_at FROM sites WHERE guid = ?
`
func (q *Queries) SelectSiteByGUID(ctx context.Context, guid string) (Site, error) {
row := q.db.QueryRowContext(ctx, selectSiteByGUID, guid)
var i Site
err := row.Scan(
&i.ID,
&i.OwnerID,
&i.Guid,
&i.Title,
&i.Tagline,
&i.CreatedAt,
)
return i, err
}
const selectSiteByID = `-- name: SelectSiteByID :one
SELECT id, owner_id, guid, title, tagline, created_at FROM sites WHERE id = ?
`

View file

@ -158,7 +158,7 @@ func TestProvider_Posts(t *testing.T) {
require.NoError(t, err)
assert.NotZero(t, post.ID)
posts, err := p.SelectPostsOfSite(ctx, site.ID)
posts, err := p.SelectPostsOfSite(ctx, site.ID, false)
require.NoError(t, err)
require.Len(t, posts, 1)
assert.Equal(t, post.ID, posts[0].ID)
@ -205,7 +205,7 @@ func TestProvider_Posts(t *testing.T) {
require.NoError(t, p.SavePost(ctx, post1))
require.NoError(t, p.SavePost(ctx, post2))
posts, err := p.SelectPostsOfSite(ctx, site2.ID)
posts, err := p.SelectPostsOfSite(ctx, site2.ID, false)
require.NoError(t, err)
require.Len(t, posts, 2)
assert.Equal(t, "New Post", posts[0].Title)
@ -220,7 +220,7 @@ func TestProvider_Posts(t *testing.T) {
}
require.NoError(t, p.SaveSite(ctx, emptySite))
posts, err := p.SelectPostsOfSite(ctx, emptySite.ID)
posts, err := p.SelectPostsOfSite(ctx, emptySite.ID, false)
require.NoError(t, err)
assert.Empty(t, posts)
})
@ -248,6 +248,7 @@ func TestProvider_PublishTargets(t *testing.T) {
target := &models.SitePublishTarget{
SiteID: site.ID,
TargetType: "netlify",
GUID: "target-001",
BaseURL: "https://example.netlify.app",
TargetRef: "netlify-site-123",
TargetKey: "secret-key",

View file

@ -18,6 +18,7 @@ func (db *Provider) SelectPublishTargetsOfSite(ctx context.Context, siteID int64
targets[i] = models.SitePublishTarget{
ID: row.ID,
SiteID: row.SiteID,
GUID: row.Guid,
Enabled: row.Enabled != 0,
TargetType: row.TargetType,
BaseURL: row.BaseUrl,
@ -38,6 +39,7 @@ func (db *Provider) SavePublishTarget(ctx context.Context, target *models.SitePu
newID, err := db.queries.InsertPublishTarget(ctx, sqlgen.InsertPublishTargetParams{
SiteID: target.SiteID,
TargetType: target.TargetType,
Guid: target.GUID,
Enabled: enabled,
BaseUrl: target.BaseURL,
TargetRef: target.TargetRef,

View file

@ -17,6 +17,15 @@ func (db *Provider) SelectSiteByID(ctx context.Context, id int64) (models.Site,
return dbSiteToSite(row), nil
}
func (db *Provider) SelectSiteByGUID(ctx context.Context, guid string) (models.Site, error) {
row, err := db.queries.SelectSiteByGUID(ctx, guid)
if err != nil {
return models.Site{}, err
}
return dbSiteToSite(row), nil
}
func (db *Provider) SelectSitesOwnedByUser(ctx context.Context, ownerID int64) ([]models.Site, error) {
rows, err := db.queries.SelectSitesOwnedByUser(ctx, ownerID)
if err != nil {
@ -58,6 +67,33 @@ func (db *Provider) HasUsersAndSites(ctx context.Context) (bool, error) {
return nullBool.Valid && nullBool.Bool, nil
}
type SiteWithOwner struct {
ID int64
GUID string
Title string
OwnerID int64
Username string
}
func (db *Provider) SelectAllSitesWithOwners(ctx context.Context) ([]SiteWithOwner, error) {
rows, err := db.queries.SelectAllSitesWithOwners(ctx)
if err != nil {
return nil, err
}
sites := make([]SiteWithOwner, len(rows))
for i, row := range rows {
sites[i] = SiteWithOwner{
ID: row.ID,
GUID: row.Guid,
Title: row.Title,
OwnerID: row.OwnerID,
Username: row.Username,
}
}
return sites, nil
}
func dbSiteToSite(row sqlgen.Site) models.Site {
return models.Site{
ID: row.ID,