weiro/providers/db/provider.go
Leon Mika 15bc6b7f73 feat: add DB provider methods for categories
Implements SaveCategory, SelectCategory, SelectCategoriesOfSite,
SelectCategoryBySlugAndSite, DeleteCategory, SelectCategoriesOfPost,
SelectPostsOfCategory, CountPostsOfCategory, and SetPostCategories on
the DB Provider, along with BeginTx/QueriesWithTx for transaction
support. Also fixes pre-existing compilation errors in provider_test.go
(missing PagingParams args) so new tests can compile and run.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-18 21:37:01 +11:00

68 lines
1.4 KiB
Go

package db
import (
"context"
"database/sql"
"time"
"github.com/Southclaws/fault"
"lmika.dev/lmika/weiro/providers/db/gen/sqlgen"
"lmika.dev/lmika/weiro/sql/schema"
migration "lmika.dev/pkg/litemigrate"
)
type Provider struct {
drvr *sql.DB
queries *sqlgen.Queries
}
func New(dbFile string) (*Provider, error) {
drvr, err := sql.Open("sqlite", dbFile)
if err != nil {
return nil, fault.Wrap(err)
}
if err := migration.New(schema.FS, drvr).MigrateUp(context.Background()); err != nil {
return nil, fault.Wrap(err)
}
if _, err := drvr.Exec(`PRAGMA foreign_keys = 1;`); err != nil {
return nil, fault.Wrap(err)
}
return &Provider{
drvr: drvr,
queries: sqlgen.New(drvr),
}, nil
}
func (db *Provider) Close() error {
return db.drvr.Close()
}
func (db *Provider) BeginTx(ctx context.Context) (*sql.Tx, error) {
return db.drvr.BeginTx(ctx, nil)
}
func (db *Provider) QueriesWithTx(tx *sql.Tx) *Provider {
return &Provider{
drvr: db.drvr,
queries: db.queries.WithTx(tx),
}
}
func (db *Provider) SoftDeletePost(ctx context.Context, postID int64) error {
return db.queries.SoftDeletePost(ctx, sqlgen.SoftDeletePostParams{
DeletedAt: time.Now().Unix(),
ID: postID,
})
}
func (db *Provider) HardDeletePost(ctx context.Context, postID int64) error {
return db.queries.HardDeletePost(ctx, postID)
}
func (db *Provider) RestorePost(ctx context.Context, postID int64) error {
return db.queries.RestorePost(ctx, postID)
}