feat(pages): add DB provider methods for pages

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Leon Mika 2026-03-22 17:59:43 +11:00
parent 7755bf5043
commit 2cd9ff8721

115
providers/db/pages.go Normal file
View file

@ -0,0 +1,115 @@
package db
import (
"context"
"time"
"lmika.dev/lmika/weiro/models"
"lmika.dev/lmika/weiro/providers/db/gen/sqlgen"
)
func (db *Provider) SelectPagesOfSite(ctx context.Context, siteID int64) ([]*models.Page, error) {
rows, err := db.queries.SelectPagesOfSite(ctx, siteID)
if err != nil {
return nil, err
}
pages := make([]*models.Page, len(rows))
for i, row := range rows {
pages[i] = dbPageToPage(row)
}
return pages, nil
}
func (db *Provider) SelectPage(ctx context.Context, id int64) (*models.Page, error) {
row, err := db.queries.SelectPage(ctx, id)
if err != nil {
return nil, err
}
return dbPageToPage(row), nil
}
func (db *Provider) SelectPageByGUID(ctx context.Context, guid string) (*models.Page, error) {
row, err := db.queries.SelectPageByGUID(ctx, guid)
if err != nil {
return nil, err
}
return dbPageToPage(row), nil
}
func (db *Provider) SelectPageBySlugAndSite(ctx context.Context, siteID int64, slug string) (*models.Page, error) {
row, err := db.queries.SelectPageBySlugAndSite(ctx, sqlgen.SelectPageBySlugAndSiteParams{
SiteID: siteID,
Slug: slug,
})
if err != nil {
return nil, err
}
return dbPageToPage(row), nil
}
func (db *Provider) SavePage(ctx context.Context, page *models.Page) error {
if page.ID == 0 {
showInNav := int64(0)
if page.ShowInNav {
showInNav = 1
}
newID, err := db.queries.InsertPage(ctx, sqlgen.InsertPageParams{
SiteID: page.SiteID,
Guid: page.GUID,
Title: page.Title,
Slug: page.Slug,
Body: page.Body,
PageType: int64(page.PageType),
ShowInNav: showInNav,
SortOrder: int64(page.SortOrder),
CreatedAt: timeToInt(page.CreatedAt),
UpdatedAt: timeToInt(page.UpdatedAt),
})
if err != nil {
return err
}
page.ID = newID
return nil
}
showInNav := int64(0)
if page.ShowInNav {
showInNav = 1
}
return db.queries.UpdatePage(ctx, sqlgen.UpdatePageParams{
Title: page.Title,
Slug: page.Slug,
Body: page.Body,
PageType: int64(page.PageType),
ShowInNav: showInNav,
UpdatedAt: timeToInt(page.UpdatedAt),
ID: page.ID,
})
}
func (db *Provider) UpdatePageSortOrder(ctx context.Context, id int64, sortOrder int) error {
return db.queries.UpdatePageSortOrder(ctx, sqlgen.UpdatePageSortOrderParams{
SortOrder: int64(sortOrder),
ID: id,
})
}
func (db *Provider) DeletePage(ctx context.Context, id int64) error {
return db.queries.DeletePage(ctx, id)
}
func dbPageToPage(row sqlgen.Page) *models.Page {
return &models.Page{
ID: row.ID,
SiteID: row.SiteID,
GUID: row.Guid,
Title: row.Title,
Slug: row.Slug,
Body: row.Body,
PageType: int(row.PageType),
ShowInNav: row.ShowInNav != 0,
SortOrder: int(row.SortOrder),
CreatedAt: time.Unix(row.CreatedAt, 0).UTC(),
UpdatedAt: time.Unix(row.UpdatedAt, 0).UTC(),
}
}