58 lines
1.7 KiB
Go
58 lines
1.7 KiB
Go
package datastore
|
|
|
|
import (
|
|
"errors"
|
|
|
|
"github.com/jmoiron/modl"
|
|
"github.com/thermokarst/bactdb/models"
|
|
)
|
|
|
|
// A datastore access point (in PostgreSQL)
|
|
type Datastore struct {
|
|
Users models.UsersService
|
|
Genera models.GeneraService
|
|
Species models.SpeciesService
|
|
Strains models.StrainsService
|
|
ObservationTypes models.ObservationTypesService
|
|
Observations models.ObservationsService
|
|
TextMeasurementTypes models.TextMeasurementTypesService
|
|
UnitTypes models.UnitTypesService
|
|
dbh modl.SqlExecutor
|
|
}
|
|
|
|
var (
|
|
ErrNoRowsUpdated = errors.New(`no rows updated`)
|
|
ErrNoRowsDeleted = errors.New(`no rows deleted`)
|
|
)
|
|
|
|
// NewDatastore creates a new client for accessing the datastore (in PostgreSQL).
|
|
// If dbh is nil, it uses the global DB handle.
|
|
func NewDatastore(dbh modl.SqlExecutor) *Datastore {
|
|
if dbh == nil {
|
|
dbh = DBH
|
|
}
|
|
|
|
d := &Datastore{dbh: dbh}
|
|
d.Users = &usersStore{d}
|
|
d.Genera = &generaStore{d}
|
|
d.Species = &speciesStore{d}
|
|
d.Strains = &strainsStore{d}
|
|
d.ObservationTypes = &observationTypesStore{d}
|
|
d.Observations = &observationsStore{d}
|
|
d.TextMeasurementTypes = &textMeasurementTypesStore{d}
|
|
d.UnitTypes = &unitTypesStore{d}
|
|
return d
|
|
}
|
|
|
|
func NewMockDatastore() *Datastore {
|
|
return &Datastore{
|
|
Users: &models.MockUsersService{},
|
|
Genera: &models.MockGeneraService{},
|
|
Species: &models.MockSpeciesService{},
|
|
Strains: &models.MockStrainsService{},
|
|
ObservationTypes: &models.MockObservationTypesService{},
|
|
Observations: &models.MockObservationsService{},
|
|
TextMeasurementTypes: &models.MockTextMeasurementTypesService{},
|
|
UnitTypes: &models.MockUnitTypesService{},
|
|
}
|
|
}
|