2025-01-27 03:23:54 +00:00
|
|
|
package db
|
|
|
|
|
|
|
|
import (
|
|
|
|
"context"
|
|
|
|
"github.com/jackc/pgx/v5/pgtype"
|
|
|
|
"lmika.dev/lmika/hugo-crm/gen/sqlc/dbq"
|
|
|
|
"lmika.dev/lmika/hugo-crm/models"
|
|
|
|
"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) 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 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,
|
|
|
|
}
|
|
|
|
}
|