package database import ( "net/http" "github.com/blang/semver" "github.com/fjl/go-couchdb" ) const ( VersionDocumentId = "version" ) type MigrationVersionDocument struct { Rev string `json:"_rev,omitempty"` Version semver.Version } type MigrationDatabase struct { *couchdb.DB } /* GetVersion returns the current version as stored in the migration database. If no document was found, defaults to returning "0.0.0" as semver.Version object. */ func (mdb *MigrationDatabase) GetVersion() (version semver.Version, rev string, err error) { v := new(MigrationVersionDocument) err = mdb.DB.Get(VersionDocumentId, v, nil) if err != nil { isActuallyAnError := true if cerr, ok := err.(*couchdb.Error); ok { // CouchDB error if cerr.StatusCode == http.StatusNotFound { isActuallyAnError = false } } if isActuallyAnError { return } err = nil } else { rev = v.Rev version = v.Version } return } func (mdb *MigrationDatabase) PutVersion(version semver.Version, rev string) (newrev string, err error) { newrev, err = mdb.DB.Put(VersionDocumentId, MigrationVersionDocument{ Version: version, }, rev) return }