Started working on pages
This commit is contained in:
parent
e2f159e980
commit
ba12398d2f
30 changed files with 1391 additions and 145 deletions
50
providers/db/bundles.go
Normal file
50
providers/db/bundles.go
Normal file
|
|
@ -0,0 +1,50 @@
|
|||
package db
|
||||
|
||||
import (
|
||||
"context"
|
||||
"github.com/jackc/pgx/v5/pgtype"
|
||||
"lmika.dev/lmika/hugo-cms/gen/sqlc/dbq"
|
||||
"lmika.dev/lmika/hugo-cms/models"
|
||||
"lmika.dev/pkg/modash/moslice"
|
||||
)
|
||||
|
||||
func (db *DB) InsertBundle(ctx context.Context, bundle *models.Bundle) error {
|
||||
id, err := db.q.InsertBundle(ctx, dbq.InsertBundleParams{
|
||||
SiteID: bundle.SiteID,
|
||||
Name: bundle.Name,
|
||||
CreatedAt: pgtype.Timestamp{Time: bundle.CreatedAt, Valid: true},
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
bundle.ID = id
|
||||
return nil
|
||||
}
|
||||
|
||||
func (db *DB) ListBundles(ctx context.Context, siteID int64) ([]models.Bundle, error) {
|
||||
res, err := db.q.ListBundles(ctx, siteID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return moslice.Map(res, dbBundleToBundle), nil
|
||||
}
|
||||
|
||||
func (db *DB) GetBundleWithID(ctx context.Context, id int64) (models.Bundle, error) {
|
||||
res, err := db.q.GetBundleWithID(ctx, id)
|
||||
if err != nil {
|
||||
return models.Bundle{}, err
|
||||
}
|
||||
|
||||
return dbBundleToBundle(res), nil
|
||||
}
|
||||
|
||||
func dbBundleToBundle(b dbq.Bundle) models.Bundle {
|
||||
return models.Bundle{
|
||||
ID: b.ID,
|
||||
SiteID: b.SiteID,
|
||||
Name: b.Name,
|
||||
CreatedAt: b.CreatedAt.Time,
|
||||
UpdatedAt: b.UpdatedAt.Time,
|
||||
}
|
||||
}
|
||||
105
providers/db/page.go
Normal file
105
providers/db/page.go
Normal file
|
|
@ -0,0 +1,105 @@
|
|||
package db
|
||||
|
||||
import (
|
||||
"context"
|
||||
"github.com/jackc/pgx/v5/pgtype"
|
||||
"lmika.dev/lmika/hugo-cms/gen/sqlc/dbq"
|
||||
"lmika.dev/lmika/hugo-cms/models"
|
||||
"lmika.dev/pkg/modash/momap"
|
||||
"lmika.dev/pkg/modash/moslice"
|
||||
)
|
||||
|
||||
var nameProvenanceToDBNameProvenance = map[models.NameProvenance]dbq.PageNameProvenance{
|
||||
models.UserNameProvenance: dbq.PageNameProvenanceUser,
|
||||
models.TitleNameProvenance: dbq.PageNameProvenanceTitle,
|
||||
models.DateNameProvenance: dbq.PageNameProvenanceDate,
|
||||
}
|
||||
var dbNameProvenanceToNameProvenance = momap.ReverseMap(nameProvenanceToDBNameProvenance)
|
||||
|
||||
func (db *DB) InsertPage(ctx context.Context, page *models.Page) error {
|
||||
|
||||
id, err := db.q.InsertPage(ctx, dbq.InsertPageParams{
|
||||
SiteID: page.SiteID,
|
||||
BundleID: page.BundleID,
|
||||
Name: page.Name,
|
||||
NameProvenance: nameProvenanceToDBNameProvenance[page.NameProvenance],
|
||||
Title: pgtype.Text{String: page.Title, Valid: page.Title != ""},
|
||||
Body: page.Body,
|
||||
State: dbq.PostState(page.State),
|
||||
Props: []byte(`{}`),
|
||||
PublishDate: pgtype.Timestamptz{Time: page.PublishDate, Valid: !page.PublishDate.IsZero()},
|
||||
CreatedAt: pgtype.Timestamp{Time: page.CreatedAt, Valid: true},
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
page.ID = id
|
||||
return nil
|
||||
}
|
||||
|
||||
func (db *DB) UpdatePage(ctx context.Context, page *models.Page) error {
|
||||
return db.q.UpdatePage(ctx, dbq.UpdatePageParams{
|
||||
ID: page.ID,
|
||||
SiteID: page.SiteID,
|
||||
BundleID: page.BundleID,
|
||||
Name: page.Name,
|
||||
NameProvenance: nameProvenanceToDBNameProvenance[page.NameProvenance],
|
||||
Title: pgtype.Text{String: page.Title, Valid: page.Title != ""},
|
||||
Body: page.Body,
|
||||
State: dbq.PostState(page.State),
|
||||
Props: []byte(`{}`),
|
||||
PublishDate: pgtype.Timestamptz{Time: page.PublishDate, Valid: true},
|
||||
CreatedAt: pgtype.Timestamp{Time: page.CreatedAt, Valid: true},
|
||||
UpdatedAt: pgtype.Timestamp{Time: page.UpdatedAt, Valid: true},
|
||||
})
|
||||
}
|
||||
|
||||
func (db *DB) ListPagesOfSite(ctx context.Context, siteID int64) ([]models.Page, error) {
|
||||
res, err := db.q.ListPages(ctx, siteID)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return moslice.Map(res, dbPageToPage), nil
|
||||
}
|
||||
|
||||
func (db *DB) ListPublishablePages(ctx context.Context, fromID, siteID int64) ([]models.Page, error) {
|
||||
res, err := db.q.ListPublishablePages(ctx, dbq.ListPublishablePagesParams{
|
||||
ID: fromID,
|
||||
SiteID: siteID,
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
return moslice.Map(res, dbPageToPage), nil
|
||||
}
|
||||
|
||||
func (db *DB) GetPage(ctx context.Context, postID int64) (models.Page, error) {
|
||||
res, err := db.q.GetPageWithID(ctx, postID)
|
||||
if err != nil {
|
||||
return models.Page{}, err
|
||||
}
|
||||
|
||||
return dbPageToPage(res), nil
|
||||
}
|
||||
|
||||
func (db *DB) DeletePage(ctx context.Context, pageID int64) error {
|
||||
|
||||
return db.q.DeletePageWithID(ctx, pageID)
|
||||
}
|
||||
|
||||
func dbPageToPage(p dbq.Page) models.Page {
|
||||
return models.Page{
|
||||
ID: p.ID,
|
||||
SiteID: p.SiteID,
|
||||
BundleID: p.BundleID,
|
||||
Name: p.Name,
|
||||
NameProvenance: dbNameProvenanceToNameProvenance[p.NameProvenance],
|
||||
Title: p.Title.String,
|
||||
Body: p.Body,
|
||||
State: models.PostState(p.State),
|
||||
PublishDate: p.PublishDate.Time,
|
||||
CreatedAt: p.CreatedAt.Time,
|
||||
}
|
||||
}
|
||||
|
|
@ -33,9 +33,9 @@ func (db *DB) DeletePost(ctx context.Context, postID int64) error {
|
|||
|
||||
func (db *DB) ListPublishablePosts(ctx context.Context, fromID, siteID int64, now time.Time) ([]models.Post, error) {
|
||||
res, err := db.q.ListPublishablePosts(ctx, dbq.ListPublishablePostsParams{
|
||||
ID: fromID,
|
||||
SiteID: siteID,
|
||||
PostDate: pgtype.Timestamptz{Time: now, Valid: true},
|
||||
ID: fromID,
|
||||
SiteID: siteID,
|
||||
PublishDate: pgtype.Timestamptz{Time: now, Valid: true},
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
|
|
@ -46,13 +46,14 @@ func (db *DB) ListPublishablePosts(ctx context.Context, fromID, siteID int64, no
|
|||
|
||||
func (db *DB) InsertPost(ctx context.Context, p *models.Post) error {
|
||||
res, err := db.q.InsertPost(ctx, dbq.InsertPostParams{
|
||||
SiteID: p.SiteID,
|
||||
Title: pgtype.Text{String: p.Title, Valid: p.Title != ""},
|
||||
Body: p.Body,
|
||||
State: dbq.PostState(p.State),
|
||||
Props: []byte(`{}`),
|
||||
PostDate: pgtype.Timestamptz{Time: p.PostDate, Valid: !p.PostDate.IsZero()},
|
||||
CreatedAt: pgtype.Timestamp{Time: p.CreatedAt, Valid: !p.CreatedAt.IsZero()},
|
||||
SiteID: p.SiteID,
|
||||
Title: pgtype.Text{String: p.Title, Valid: p.Title != ""},
|
||||
Body: p.Body,
|
||||
State: dbq.PostState(p.State),
|
||||
Props: []byte(`{}`),
|
||||
PublishDate: pgtype.Timestamptz{Time: p.PublishDate, Valid: !p.PublishDate.IsZero()},
|
||||
CreatedAt: pgtype.Timestamp{Time: p.CreatedAt, Valid: !p.CreatedAt.IsZero()},
|
||||
UpdatedAt: pgtype.Timestamp{Time: p.UpdatedAt, Valid: !p.UpdatedAt.IsZero()},
|
||||
})
|
||||
if err != nil {
|
||||
return err
|
||||
|
|
@ -64,25 +65,25 @@ func (db *DB) InsertPost(ctx context.Context, p *models.Post) error {
|
|||
|
||||
func (db *DB) UpdatePost(ctx context.Context, p *models.Post) error {
|
||||
return db.q.UpdatePost(ctx, dbq.UpdatePostParams{
|
||||
ID: p.ID,
|
||||
SiteID: p.SiteID,
|
||||
Title: pgtype.Text{String: p.Title, Valid: p.Title != ""},
|
||||
Body: p.Body,
|
||||
State: dbq.PostState(p.State),
|
||||
Props: []byte(`{}`),
|
||||
PostDate: pgtype.Timestamptz{Time: p.PostDate, Valid: !p.PostDate.IsZero()},
|
||||
//CreatedAt: pgtype.Timestamp{Time: p.CreatedAt, Valid: !p.CreatedAt.IsZero()},
|
||||
ID: p.ID,
|
||||
SiteID: p.SiteID,
|
||||
Title: pgtype.Text{String: p.Title, Valid: p.Title != ""},
|
||||
Body: p.Body,
|
||||
State: dbq.PostState(p.State),
|
||||
Props: []byte(`{}`),
|
||||
PublishDate: pgtype.Timestamptz{Time: p.PublishDate, Valid: !p.PublishDate.IsZero()},
|
||||
UpdatedAt: pgtype.Timestamp{Time: p.UpdatedAt, Valid: !p.UpdatedAt.IsZero()},
|
||||
})
|
||||
}
|
||||
|
||||
func dbPostToPost(p dbq.Post) models.Post {
|
||||
return models.Post{
|
||||
ID: p.ID,
|
||||
SiteID: p.SiteID,
|
||||
Title: p.Title.String,
|
||||
Body: p.Body,
|
||||
State: models.PostState(p.State),
|
||||
PostDate: p.PostDate.Time,
|
||||
CreatedAt: p.CreatedAt.Time,
|
||||
ID: p.ID,
|
||||
SiteID: p.SiteID,
|
||||
Title: p.Title.String,
|
||||
Body: p.Body,
|
||||
State: models.PostState(p.State),
|
||||
PublishDate: p.PublishDate.Time,
|
||||
CreatedAt: p.CreatedAt.Time,
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue