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