116 lines
2.8 KiB
Go
116 lines
2.8 KiB
Go
|
|
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(),
|
||
|
|
}
|
||
|
|
}
|