aboutsummaryrefslogtreecommitdiffstats
path: root/internal/store/blogs.go
diff options
context:
space:
mode:
Diffstat (limited to 'internal/store/blogs.go')
-rw-r--r--internal/store/blogs.go36
1 files changed, 30 insertions, 6 deletions
diff --git a/internal/store/blogs.go b/internal/store/blogs.go
index 57a7c10..e6fbc56 100644
--- a/internal/store/blogs.go
+++ b/internal/store/blogs.go
@@ -4,6 +4,8 @@ import (
"context"
"encoding/json"
"time"
+
+ "github.com/jackc/pgx/v5"
)
type Blog struct {
@@ -41,21 +43,43 @@ func (s *Store) CreateBlogger(ctx context.Context, username, passwordHash, subdo
if err != nil {
return nil, nil, err
}
- b, err := scanBlog(tx.QueryRow(ctx, `INSERT INTO blogs (owner_id, subdomain, title) VALUES ($1,$2,$3) RETURNING `+blogCols,
- u.ID, subdomain, title))
+ b, err := createBlog(ctx, tx, u.ID, subdomain, title)
if err != nil {
return nil, nil, err
}
- _, err = tx.Exec(ctx, `INSERT INTO pages (blog_id, slug, title, nav_order, is_home) VALUES ($1,'home','Home',0,true)`, b.ID)
- if err != nil {
- return nil, nil, wrap(err)
- }
if err := tx.Commit(ctx); err != nil {
return nil, nil, err
}
return u, b, nil
}
+// CreateBlog creates a blog with a default home page for an existing user.
+func (s *Store) CreateBlog(ctx context.Context, ownerID int64, subdomain, title string) (*Blog, error) {
+ tx, err := s.db.Begin(ctx)
+ if err != nil {
+ return nil, err
+ }
+ defer tx.Rollback(ctx)
+ b, err := createBlog(ctx, tx, ownerID, subdomain, title)
+ if err != nil {
+ return nil, err
+ }
+ return b, tx.Commit(ctx)
+}
+
+func createBlog(ctx context.Context, tx pgx.Tx, ownerID int64, subdomain, title string) (*Blog, error) {
+ b, err := scanBlog(tx.QueryRow(ctx, `INSERT INTO blogs (owner_id, subdomain, title) VALUES ($1,$2,$3) RETURNING `+blogCols,
+ ownerID, subdomain, title))
+ if err != nil {
+ return nil, err
+ }
+ _, err = tx.Exec(ctx, `INSERT INTO pages (blog_id, slug, title, nav_order, is_home) VALUES ($1,'home','Home',0,true)`, b.ID)
+ if err != nil {
+ return nil, wrap(err)
+ }
+ return b, nil
+}
+
func (s *Store) BlogByID(ctx context.Context, id int64) (*Blog, error) {
return scanBlog(s.db.QueryRow(ctx, `SELECT `+blogCols+` FROM blogs WHERE id=$1`, id))
}