Refactor delete handlers

Fixes #18.
This commit is contained in:
Matthew Dillon 2015-10-13 13:42:19 -07:00
parent 62734899e2
commit d46e721063
15 changed files with 71 additions and 14 deletions

View file

@ -193,10 +193,14 @@ func (c CharacteristicService) Create(e *types.Entity, genus string, claims *typ
// Delete deletes a single characteristic
func (c CharacteristicService) Delete(id int64, genus string, claims *types.Claims) *types.AppError {
q := `DELETE FROM characteristics WHERE id=$1;`
// TODO: fix this
if _, err := models.DBH.Exec(q, id); err != nil {
characteristic, err := models.GetCharacteristic(id, genus, claims)
if err != nil {
return newJSONError(err, http.StatusInternalServerError)
}
if err := models.Delete(characteristic); err != nil {
return newJSONError(err, http.StatusInternalServerError)
}
return nil
}

View file

@ -114,12 +114,14 @@ func (m MeasurementService) Update(id int64, e *types.Entity, genus string, clai
// Delete deletes a single measurement.
func (m MeasurementService) Delete(id int64, genus string, claims *types.Claims) *types.AppError {
q := `DELETE FROM measurements WHERE id=$1;`
// TODO: fix this
_, err := models.DBH.Exec(q, id)
measurement, err := models.GetMeasurement(id, genus, claims)
if err != nil {
return newJSONError(err, http.StatusInternalServerError)
}
if err := models.Delete(measurement); err != nil {
return newJSONError(err, http.StatusInternalServerError)
}
return nil
}

View file

@ -153,10 +153,14 @@ func (s SpeciesService) Create(e *types.Entity, genus string, claims *types.Clai
// Delete deletes a single species
func (s SpeciesService) Delete(id int64, genus string, claims *types.Claims) *types.AppError {
q := `DELETE FROM species WHERE id=$1;`
// TODO: fix this
if _, err := models.DBH.Exec(q, id); err != nil {
species, err := models.GetSpecies(id, genus, claims)
if err != nil {
return newJSONError(err, http.StatusInternalServerError)
}
if err := models.Delete(species.SpeciesBase); err != nil {
return newJSONError(err, http.StatusInternalServerError)
}
return nil
}

View file

@ -216,10 +216,14 @@ func (s StrainService) Create(e *types.Entity, genus string, claims *types.Claim
// Delete deletes a single strain
func (s StrainService) Delete(id int64, genus string, claims *types.Claims) *types.AppError {
q := `DELETE FROM strains WHERE id=$1;`
// TODO: fix this
if _, err := models.DBH.Exec(q, id); err != nil {
strain, err := models.GetStrain(id, genus, claims)
if err != nil {
return newJSONError(err, http.StatusInternalServerError)
}
if err := models.Delete(strain); err != nil {
return newJSONError(err, http.StatusInternalServerError)
}
return nil
}

View file

@ -7,4 +7,6 @@ var (
ErrCharacteristicNotFound = errors.New("Characteristic not found")
// ErrCharacteristicNotUpdated when not updated.
ErrCharacteristicNotUpdated = errors.New("Characteristic not updated")
// ErrCharacteristicNotDeleted when not deleted.
ErrCharacteristicNotDeleted = errors.New("Characteristic not deleted")
)

View file

@ -5,6 +5,8 @@ import "errors"
var (
// ErrMeasurementNotFound when not found.
ErrMeasurementNotFound = errors.New("Measurement not found")
// ErrMeasurementNotUpdate when not updated.
// ErrMeasurementNotUpdated when not updated.
ErrMeasurementNotUpdated = errors.New("Measurement not updated")
// ErrMeasurementNotDeleted when not deleted.
ErrMeasurementNotDeleted = errors.New("Measurement not deleted")
)

View file

@ -7,4 +7,6 @@ var (
ErrSpeciesNotFound = errors.New("Species not found")
// ErrSpeciesNotUpdated when not updated.
ErrSpeciesNotUpdated = errors.New("Species not updated")
// ErrSpeciesNotDeleted when not deleted.
ErrSpeciesNotDeleted = errors.New("Species not deleted")
)

View file

@ -7,4 +7,6 @@ var (
ErrStrainNotFound = errors.New("Strain not found")
// ErrStrainNotUpdated when not updated.
ErrStrainNotUpdated = errors.New("Strain not updated")
// ErrStrainNotDeleted when not deleted.
ErrStrainNotDeleted = errors.New("Strain not deleted")
)

View file

@ -6,7 +6,9 @@ var (
// ErrUserNotFound when not found.
ErrUserNotFound = errors.New("No user found")
// ErrUserNotUpdated when not updated.
ErrUserNotUpdated = errors.New("Count 0")
ErrUserNotUpdated = errors.New("User not updated")
// ErrUserNotDeleted when not deleted.
ErrUserNotDeleted = errors.New("User not deleted")
// ErrUserMissingEmail when missing email.
ErrUserMissingEmail = errors.New("Missing email")
// ErrInvalidEmailOrPassword when invalid login credentials.

View file

@ -32,6 +32,10 @@ func (c *CharacteristicBase) UpdateError() error {
return errors.ErrCharacteristicNotUpdated
}
func (c *CharacteristicBase) DeleteError() error {
return errors.ErrCharacteristicNotDeleted
}
// CharacteristicBase is what the DB expects for write operations
type CharacteristicBase struct {
ID int64 `json:"id,omitempty"`

View file

@ -6,6 +6,7 @@ type base interface {
PreInsert(modl.SqlExecutor) error
PreUpdate(modl.SqlExecutor) error
UpdateError() error
DeleteError() error
}
// Create will create a new DB record of a model.
@ -27,3 +28,15 @@ func Update(b base) error {
}
return nil
}
// Delete runs a DB delete on a model.
func Delete(b base) error {
count, err := DBH.Delete(b)
if err != nil {
return err
}
if count != 1 {
return b.DeleteError()
}
return nil
}

View file

@ -33,6 +33,10 @@ func (m *MeasurementBase) UpdateError() error {
return errors.ErrMeasurementNotUpdated
}
func (m *MeasurementBase) DeleteError() error {
return errors.ErrMeasurementNotDeleted
}
// MeasurementBase is what the DB expects for write operations
// There are three types of supported measurements: fixed-text, free-text,
// & numerical. The table has a constraint that will allow at most one

View file

@ -33,6 +33,10 @@ func (s *SpeciesBase) UpdateError() error {
return errors.ErrSpeciesNotUpdated
}
func (s *SpeciesBase) DeleteError() error {
return errors.ErrSpeciesNotDeleted
}
// SpeciesBase is what the DB expects for write operations.
type SpeciesBase struct {
ID int64 `db:"id" json:"id"`

View file

@ -33,6 +33,10 @@ func (s *StrainBase) UpdateError() error {
return errors.ErrStrainNotUpdated
}
func (s *StrainBase) DeleteError() error {
return errors.ErrStrainNotDeleted
}
// StrainBase is what the DB expects for write operations.
type StrainBase struct {
ID int64 `db:"id" json:"id"`

View file

@ -34,6 +34,10 @@ func (u *UserBase) UpdateError() error {
return errors.ErrUserNotUpdated
}
func (u *UserBase) DeleteError() error {
return errors.ErrUserNotDeleted
}
// UserBase is what the DB expects to see for write operations.
type UserBase struct {
ID int64 `json:"id,omitempty"`