loggalicious/backend/internal/database/migration_database.go

56 lines
1.1 KiB
Go
Raw Permalink Normal View History

2018-02-05 16:18:33 +00:00
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
}