First cut of the link fields
This commit is contained in:
parent
c5925e16e0
commit
38ebb21a34
8 changed files with 145 additions and 35 deletions
|
|
@ -2,6 +2,7 @@ package db
|
|||
|
||||
import (
|
||||
"context"
|
||||
"encoding/json"
|
||||
"github.com/jackc/pgx/v5/pgtype"
|
||||
"lmika.dev/lmika/hugo-cms/gen/sqlc/dbq"
|
||||
"lmika.dev/lmika/hugo-cms/models"
|
||||
|
|
@ -15,7 +16,7 @@ func (db *DB) ListPostsOfSite(ctx context.Context, siteID int64) ([]models.Post,
|
|||
return nil, err
|
||||
}
|
||||
|
||||
return moslice.Map(res, dbPostToPost), nil
|
||||
return moslice.MapWithError(res, dbPostToPost)
|
||||
}
|
||||
|
||||
func (db *DB) GetPost(ctx context.Context, postID int64) (models.Post, error) {
|
||||
|
|
@ -24,7 +25,7 @@ func (db *DB) GetPost(ctx context.Context, postID int64) (models.Post, error) {
|
|||
return models.Post{}, err
|
||||
}
|
||||
|
||||
return dbPostToPost(res), nil
|
||||
return dbPostToPost(res)
|
||||
}
|
||||
|
||||
func (db *DB) DeletePost(ctx context.Context, postID int64) error {
|
||||
|
|
@ -41,16 +42,21 @@ func (db *DB) ListPublishablePosts(ctx context.Context, fromID, siteID int64, no
|
|||
return nil, err
|
||||
}
|
||||
|
||||
return moslice.Map(res, dbPostToPost), nil
|
||||
return moslice.MapWithError(res, dbPostToPost)
|
||||
}
|
||||
|
||||
func (db *DB) InsertPost(ctx context.Context, p *models.Post) error {
|
||||
props, err := marshalPostProps(p)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
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(`{}`),
|
||||
Props: props,
|
||||
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()},
|
||||
|
|
@ -64,19 +70,44 @@ func (db *DB) InsertPost(ctx context.Context, p *models.Post) error {
|
|||
}
|
||||
|
||||
func (db *DB) UpdatePost(ctx context.Context, p *models.Post) error {
|
||||
props, err := marshalPostProps(p)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
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(`{}`),
|
||||
Props: props,
|
||||
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 {
|
||||
func marshalPostProps(p *models.Post) ([]byte, error) {
|
||||
var props []byte
|
||||
if len(p.Params) == 0 {
|
||||
props = []byte(`{}`)
|
||||
} else {
|
||||
var err error
|
||||
props, err = json.Marshal(p.Params)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
}
|
||||
return props, nil
|
||||
}
|
||||
func dbPostToPost(p dbq.Post) (models.Post, error) {
|
||||
postProps := map[string]string{}
|
||||
if len(p.Props) != 0 {
|
||||
if err := json.Unmarshal(p.Props, &postProps); err != nil {
|
||||
return models.Post{}, err
|
||||
}
|
||||
}
|
||||
|
||||
return models.Post{
|
||||
ID: p.ID,
|
||||
SiteID: p.SiteID,
|
||||
|
|
@ -85,5 +116,5 @@ func dbPostToPost(p dbq.Post) models.Post {
|
|||
State: models.PostState(p.State),
|
||||
PublishDate: p.PublishDate.Time,
|
||||
CreatedAt: p.CreatedAt.Time,
|
||||
}
|
||||
}, nil
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue