diff options
author | Steve Manuel <nilslice@gmail.com> | 2016-09-22 17:47:14 -0700 |
---|---|---|
committer | Steve Manuel <nilslice@gmail.com> | 2016-09-22 17:47:14 -0700 |
commit | 27c175f6c626175598ee0a3d5c7b750a84d583e2 (patch) | |
tree | 563cd0451d81464afb1269d7f703ddb8e4d9d9f0 /system/db/query.go | |
parent | f31c13d76e5de8ab0420ecaf0f570e52f6218066 (diff) |
adding a generator for custom post content types, slug for url based on title, main file to manage commands
Diffstat (limited to 'system/db/query.go')
-rw-r--r-- | system/db/query.go | 30 |
1 files changed, 28 insertions, 2 deletions
diff --git a/system/db/query.go b/system/db/query.go index fd526f8..80a3412 100644 --- a/system/db/query.go +++ b/system/db/query.go @@ -12,6 +12,8 @@ import ( "github.com/boltdb/bolt" "github.com/gorilla/schema" "github.com/nilslice/cms/content" + "github.com/nilslice/cms/management/editor" + "github.com/nilslice/cms/management/manager" ) var store *bolt.DB @@ -22,6 +24,19 @@ func init() { if err != nil { log.Fatal(err) } + + // initialize db with all content type buckets + store.Update(func(tx *bolt.Tx) error { + for t := range content.Types { + _, err := tx.CreateBucketIfNotExists([]byte(t)) + if err != nil { + return err + } + } + + return nil + }) + } // Set inserts or updates values in the database. @@ -30,8 +45,13 @@ func Set(target string, data url.Values) (int, error) { t := strings.Split(target, ":") ns, id := t[0], t[1] - // check if content has an id, and if not get new one from target bucket - if len(id) == 0 { + // check if content id == -1 (indicating new post). + // if so, run an insert which will assign the next auto incremented int. + // this is done because boltdb begins its bucket auto increment value at 0, + // which is the zero-value of an int in the Item struct field for ID. + // this is a problem when the original first post (with auto ID = 0) gets + // overwritten by any new post, originally having no ID, defauting to 0. + if id == "-1" { return insert(ns, data) } @@ -125,6 +145,12 @@ func toJSON(ns string, data url.Values) ([]byte, error) { return nil, err } + slug, err := manager.Slug(post.(editor.Editable)) + if err != nil { + return nil, err + } + post.(editor.Editable).SetSlug(slug) + // marshall content struct to json for db storage j, err := json.Marshal(post) if err != nil { |