json-api error format

Part of #11.
This commit is contained in:
Matthew Dillon 2015-10-14 10:28:09 -07:00
parent 2894efaf46
commit 708eed5817
6 changed files with 62 additions and 14 deletions

View file

@ -42,11 +42,15 @@ func (c *CharacteristicBase) validate() types.ValidationError {
cv := make(types.ValidationError, 0)
if c.CharacteristicName == "" {
cv["Name"] = []string{helpers.MustProvideAValue}
cv = append(cv, types.NewValidationError(
"characteristicName",
helpers.MustProvideAValue))
}
if c.CharacteristicTypeID == 0 {
cv["Characteristic Type"] = []string{helpers.MustProvideAValue}
cv = append(cv, types.NewValidationError(
"characteristicType",
helpers.MustProvideAValue))
}
if len(cv) > 0 {

View file

@ -43,11 +43,21 @@ func (m *MeasurementBase) validate() types.ValidationError {
mv := make(types.ValidationError, 0)
if m.StrainID == 0 {
mv["Strain"] = []string{helpers.MustProvideAValue}
mv = append(mv, types.NewValidationError(
"strain",
helpers.MustProvideAValue))
}
if m.CharacteristicID == 0 {
mv["Characteristic"] = []string{helpers.MustProvideAValue}
mv = append(mv, types.NewValidationError(
"characteristic",
helpers.MustProvideAValue))
}
if m.TextMeasurementTypeID.Valid == false && m.TxtValue.Valid == false && m.NumValue.Valid == false {
mv = append(mv, types.NewValidationError(
"value",
helpers.MustProvideAValue))
}
if len(mv) > 0 {
@ -119,7 +129,9 @@ func (m *Measurement) UnmarshalJSON(b []byte) error {
id, err := GetTextMeasurementTypeID(v)
if err != nil {
if err == sql.ErrNoRows {
measurement.TxtValue = types.NullString{sql.NullString{String: v, Valid: true}}
if v != "" {
measurement.TxtValue = types.NullString{sql.NullString{String: v, Valid: true}}
}
} else {
return err
}

View file

@ -43,11 +43,15 @@ func (s *SpeciesBase) validate() types.ValidationError {
sv := make(types.ValidationError, 0)
if s.GenusID == 0 {
sv["Genus"] = []string{helpers.MustProvideAValue}
sv = append(sv, types.NewValidationError(
"genus",
helpers.MustProvideAValue))
}
if s.SpeciesName == "" {
sv["Species"] = []string{helpers.MustProvideAValue}
sv = append(sv, types.NewValidationError(
"speciesName",
helpers.MustProvideAValue))
}
if len(sv) > 0 {

View file

@ -43,11 +43,15 @@ func (s *StrainBase) validate() types.ValidationError {
sv := make(types.ValidationError, 0)
if s.SpeciesID == 0 {
sv["Species"] = []string{helpers.MustProvideAValue}
sv = append(sv, types.NewValidationError(
"species",
helpers.MustProvideAValue))
}
if s.StrainName == "" {
sv["Name"] = []string{helpers.MustProvideAValue}
sv = append(sv, types.NewValidationError(
"strainName",
helpers.MustProvideAValue))
}
if len(sv) > 0 {

View file

@ -43,20 +43,28 @@ func (u *UserBase) validate() types.ValidationError {
uv := make(types.ValidationError, 0)
if u.Name == "" {
uv["Name"] = []string{helpers.MustProvideAValue}
uv = append(uv, types.NewValidationError(
"name",
helpers.MustProvideAValue))
}
if u.Email == "" {
uv["Email"] = []string{helpers.MustProvideAValue}
uv = append(uv, types.NewValidationError(
"email",
helpers.MustProvideAValue))
}
regex, _ := regexp.Compile(`(\w[-._\w]*\w@\w[-._\w]*\w\.\w{2,3})`)
if u.Email != "" && !regex.MatchString(u.Email) {
uv["Email"] = []string{"Must provide a valid email address"}
uv = append(uv, types.NewValidationError(
"email",
"Must provide a valid email address"))
}
if len(u.Password) < 8 {
uv["Password"] = []string{"Password must be at least 8 characters"}
uv = append(uv, types.NewValidationError(
"password",
"Password must be at least 8 characters"))
}
if len(uv) > 0 {

View file

@ -2,7 +2,23 @@ package types
import "encoding/json"
type ValidationError map[string][]string
type Source struct {
Pointer string `json:"pointer"`
}
type ErrorDetail struct {
Source `json:"source"`
Detail string `json:"detail"`
}
func NewValidationError(attr, message string) ErrorDetail {
return ErrorDetail{
Source: Source{Pointer: "data/attributes/" + attr},
Detail: message,
}
}
type ValidationError []ErrorDetail
func (v ValidationError) Error() string {
errs, err := json.Marshal(struct {