Pages #5
115
providers/db/pages.go
Normal file
115
providers/db/pages.go
Normal 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(),
|
||||
}
|
||||
}
|
||||
Loading…
Reference in a new issue