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(), } }