weiro/providers/db/posts.go

112 lines
2.6 KiB
Go
Raw Permalink Normal View History

2026-02-19 11:29:44 +00:00
package db
import (
"context"
"time"
"lmika.dev/lmika/weiro/models"
"lmika.dev/lmika/weiro/providers/db/gen/sqlgen"
)
2026-03-05 11:04:24 +00:00
type PagingParams struct {
Limit int64
Offset int64
}
func (db *Provider) SelectPostsOfSite(ctx context.Context, siteID int64, showDeleted bool, pp PagingParams) ([]*models.Post, error) {
2026-02-23 10:18:34 +00:00
var filter = ""
if showDeleted {
filter = "deleted"
}
rows, err := db.queries.SelectPostsOfSite(ctx, sqlgen.SelectPostsOfSiteParams{
SiteID: siteID,
PostFilter: filter,
2026-03-05 11:04:24 +00:00
Limit: pp.Limit,
Offset: pp.Offset,
2026-02-23 10:18:34 +00:00
})
2026-02-19 11:29:44 +00:00
if err != nil {
return nil, err
}
posts := make([]*models.Post, len(rows))
for i, row := range rows {
posts[i] = dbPostToPost(row)
2026-02-19 11:29:44 +00:00
}
return posts, nil
}
func (db *Provider) SelectPost(ctx context.Context, postID int64) (*models.Post, error) {
row, err := db.queries.SelectPost(ctx, postID)
if err != nil {
return nil, err
}
return dbPostToPost(row), nil
}
func (db *Provider) SelectPostByGUID(ctx context.Context, guid string) (*models.Post, error) {
row, err := db.queries.SelectPostByGUID(ctx, guid)
if err != nil {
return nil, err
}
return dbPostToPost(row), nil
}
2026-02-19 11:29:44 +00:00
func (db *Provider) SavePost(ctx context.Context, post *models.Post) error {
if post.ID == 0 {
newID, err := db.queries.InsertPost(ctx, sqlgen.InsertPostParams{
SiteID: post.SiteID,
2026-02-23 10:18:34 +00:00
State: int64(post.State),
2026-02-19 11:29:44 +00:00
Guid: post.GUID,
Title: post.Title,
Body: post.Body,
Slug: post.Slug,
2026-02-23 10:18:34 +00:00
CreatedAt: timeToInt(post.CreatedAt),
UpdatedAt: timeToInt(post.UpdatedAt),
PublishedAt: timeToInt(post.PublishedAt),
DeletedAt: timeToInt(post.DeletedAt),
2026-02-19 11:29:44 +00:00
})
if err != nil {
return err
}
post.ID = newID
return nil
}
return db.queries.UpdatePost(ctx, sqlgen.UpdatePostParams{
ID: post.ID,
2026-02-23 10:18:34 +00:00
State: int64(post.State),
Title: post.Title,
Body: post.Body,
Slug: post.Slug,
2026-02-23 10:18:34 +00:00
UpdatedAt: timeToInt(post.UpdatedAt),
PublishedAt: timeToInt(post.PublishedAt),
DeletedAt: timeToInt(post.DeletedAt),
})
}
func dbPostToPost(row sqlgen.Post) *models.Post {
return &models.Post{
ID: row.ID,
SiteID: row.SiteID,
2026-02-23 10:18:34 +00:00
State: int(row.State),
GUID: row.Guid,
Title: row.Title,
Body: row.Body,
Slug: row.Slug,
CreatedAt: time.Unix(row.CreatedAt, 0).UTC(),
2026-02-23 10:18:34 +00:00
UpdatedAt: time.Unix(row.UpdatedAt, 0).UTC(),
PublishedAt: time.Unix(row.PublishedAt, 0).UTC(),
2026-02-23 10:18:34 +00:00
DeletedAt: time.Unix(row.DeletedAt, 0).UTC(),
}
}
func timeToInt(t time.Time) int64 {
if t.IsZero() {
return 0
}
2026-02-23 10:18:34 +00:00
return t.Unix()
2026-02-19 11:29:44 +00:00
}