hugo-cms/providers/db/posts.go

85 lines
2.2 KiB
Go
Raw Normal View History

2025-01-27 03:23:54 +00:00
package db
import (
"context"
"github.com/jackc/pgx/v5/pgtype"
2025-01-27 10:48:40 +00:00
"lmika.dev/lmika/hugo-cms/gen/sqlc/dbq"
"lmika.dev/lmika/hugo-cms/models"
2025-01-27 03:23:54 +00:00
"lmika.dev/pkg/modash/moslice"
2025-01-27 04:45:53 +00:00
"time"
2025-01-27 03:23:54 +00:00
)
func (db *DB) ListPostsOfSite(ctx context.Context, siteID int64) ([]models.Post, error) {
res, err := db.q.ListPosts(ctx, siteID)
if err != nil {
return nil, err
}
2025-01-27 04:45:53 +00:00
return moslice.Map(res, dbPostToPost), nil
}
func (db *DB) GetPost(ctx context.Context, postID int64) (models.Post, error) {
res, err := db.q.GetPostWithID(ctx, postID)
if err != nil {
return models.Post{}, err
}
return dbPostToPost(res), nil
}
2025-01-27 04:45:53 +00:00
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},
})
if err != nil {
return nil, err
}
return moslice.Map(res, dbPostToPost), nil
2025-01-27 03:23:54 +00:00
}
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()},
})
if err != nil {
return err
}
p.ID = res
return nil
}
2025-01-27 04:45:53 +00:00
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()},
})
}
2025-01-27 04:45:53 +00:00
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,
}
}