diff options
Diffstat (limited to 'customer')
| -rw-r--r-- | customer/validators.go | 25 | 
1 files changed, 24 insertions, 1 deletions
diff --git a/customer/validators.go b/customer/validators.go index 482d532..086750f 100644 --- a/customer/validators.go +++ b/customer/validators.go @@ -21,10 +21,17 @@ import (  	"regexp"  	"strings"  	"net/mail" +	"net/url"  	"vidhukant.com/openbills/errors"  	e "errors"  ) +var phoneRegex, gstinRegex, urlRegex *regexp.Regexp +func init() { +	phoneRegex = regexp.MustCompile(`^(?:(?:\(?(?:00|\+)([1-4]\d\d|[1-9]\d?)\)?)?[\-\.\ \\\/]?)?((?:\(?\d{1,}\)?[\-\.\ \\\/]?){0,})(?:[\-\.\ \\\/]?(?:#|ext\.?|extension|x)[\-\.\ \\\/]?(\d+))?$`) +	gstinRegex = regexp.MustCompile(`^[0-9]{2}[A-Z]{5}[0-9]{4}[A-Z]{1}[1-9A-Z]{1}Z[0-9A-Z]{1}$`) +} +  // NOTE: very inefficient and really really really dumb but it works  // TODO: find a better (or even a remotely good) way  func checkDuplicate(field, value string, userId uint) error { @@ -69,7 +76,7 @@ func (c *Customer) validate() error {  	// don't validate if GSTIN is empty  	if c.Gstin != "" {  	  // GSTIN regex validation -		match, _ := regexp.MatchString("^[0-9]{2}[A-Z]{5}[0-9]{4}[A-Z]{1}[1-9A-Z]{1}Z[0-9A-Z]{1}$", c.Gstin) +		match := gstinRegex.MatchString(c.Gstin)  		if (!match) {  			return errors.ErrInvalidGSTIN  		} @@ -99,6 +106,22 @@ func (c *Customer) validate() error {  		}  	} +	// don't validate phone if empty +	if c.Phone != "" { +		match := phoneRegex.MatchString(c.Phone) +		if (!match) { +			return errors.ErrInvalidPhone +		} +	} + +	// don't validate website if empty +	if c.Website != "" { +		_, err := url.ParseRequestURI(c.Website) +		if err != nil { +			return errors.ErrInvalidWebsite +		} +	} +  	var err error  	for _, i := range [][]string{{"phone", c.Phone}, {"email", c.Email}, {"website", c.Website}} {  		err = checkDuplicate(i[0], i[1], c.UserID)  |