diff --git a/database_migrations.go b/database_migrations.go index 3b70ec2..8e8ba57 100644 --- a/database_migrations.go +++ b/database_migrations.go @@ -24,6 +24,13 @@ func migrateDb() error { return err }, }, + &migrator.Migration{ + Name: "00003", + Func: func(tx *sql.Tx) error { + _, err := tx.Exec("create table post_parameters (path text not null, parameter text not null, value text, primary key (path, parameter));") + return err + }, + }, ), ) if err != nil { diff --git a/posts.go b/posts.go index 022f07a..fcc48ec 100644 --- a/posts.go +++ b/posts.go @@ -10,10 +10,11 @@ import ( var postNotFound = errors.New("post not found") type post struct { - path string - content string - published string - updated string + path string + content string + published string + updated string + parameters map[string]string } func servePost(w http.ResponseWriter, r *http.Request) { @@ -43,9 +44,28 @@ func getPost(path string, context context.Context) (*post, error) { } else if err != nil { return nil, err } + err = queriedPost.fetchParameters(context) + if err != nil { + return nil, err + } return queriedPost, nil } +func (p *post) fetchParameters(context context.Context) error { + rows, err := appDb.QueryContext(context, "select parameter, COALESCE(value, '') from post_parameters where path=?", p.path) + if err != nil { + return err + } + p.parameters = make(map[string]string) + for rows.Next() { + var parameter string + var value string + _ = rows.Scan(¶meter, &value) + p.parameters[parameter] = value + } + return nil +} + func allPostPaths() ([]string, error) { var postPaths []string rows, err := appDb.Query("select path from posts")