Upstream sync

This commit is contained in:
Senad Uka
2018-05-30 08:45:32 +02:00
parent 756d84359d
commit f1ac874276
15 changed files with 306 additions and 200 deletions

View File

@@ -1,35 +1,44 @@
package validation
import (
"time"
"bitbucket.org/nemt/nemt-portal-api/application/viewmodel"
"bitbucket.org/nemt/nemt-portal-api/infra/errors"
)
func ValidateVisit(visit *viewmodel.Visit, user *viewmodel.User) []errors.ValidationError {
var result []errors.ValidationError
if len(visit.User.First) == 0 {
result = append(result, errors.ValidationError{Field: "first", Message: "Step #1 - First Name is mandatory"})
// Step #1
if len(visit.Provider.ProviderUUID) == 0 {
result = append(result, errors.ValidationError{Field: "provider.id", Message: "Step #1 - Provider is required"})
}
if len(visit.User.Last) == 0 {
result = append(result, errors.ValidationError{Field: "last", Message: "Step #1 - Last Name is mandatory"})
// Step #2
eligibilityResult := ValidateEligibility(&visit.User)
if len(eligibilityResult) > 0 {
result = append(result, eligibilityResult...)
}
if visit.User.Gender == nil || (*visit.User.Gender != "M" && *visit.User.Gender != "F" && *visit.User.Gender != "U") {
result = append(result, errors.ValidationError{Field: "gender", Message: "Step #1 - Gender is mandatory"})
}
//Step #3
if visit.VisitDatetime.IsZero() {
result = append(result, errors.ValidationError{Field: "visit_datetime", Message: "Step #3 - Choose a Date for the Visit"})
} else {
isVisitDayToday := visit.VisitDatetime.Day() == time.Now().Day() && visit.VisitDatetime.Month() == time.Now().Month() && visit.VisitDatetime.Year() == time.Now().Year()
before8Hours := time.Now().Add(-time.Hour * time8Hours)
dayBeforeToday := time.Now().Add(-time.Hour * hoursInDay)
if visit.VisitDatetime.Before(dayBeforeToday) {
result = append(result, errors.ValidationError{Field: "visit_datetime", Message: "Step #3 - Visit cannot occur more than one day before today"})
}
if visit.User.Type == nil || (*visit.User.Type != "S" && *visit.User.Gender != "D" && *visit.User.Gender != "U") {
result = append(result, errors.ValidationError{Field: "type", Message: "Step #1 - Member Type is mandatory"})
}
dayAfter180Days := time.Now().Add(time.Hour * hoursIn180Days)
if visit.VisitDatetime.After(dayAfter180Days) {
result = append(result, errors.ValidationError{Field: "visit_datetime", Message: "Step #3 - Visit cannot occur more than 180 days after today"})
}
if visit.User.Member == nil || len(*visit.User.Member) == 0 {
result = append(result, errors.ValidationError{Field: "member", Message: "Step #1 - Member # is mandatory"})
}
if visit.User.BirthDate == nil || visit.User.BirthDate.IsZero() {
result = append(result, errors.ValidationError{Field: "birthdate", Message: "Step #1 - Birth Date is mandatory"})
if isVisitDayToday && visit.VisitDatetime.Before(before8Hours) {
result = append(result, errors.ValidationError{Field: "visit_datetime", Message: "Step #3 - Visit is more than 8 hours in the past"})
}
}
return result