From d55d43bb4ac0b3114c54a4dd5a1e53c76a3df3a2 Mon Sep 17 00:00:00 2001 From: Vidhu Kant Sharma Date: Fri, 10 Oct 2025 19:27:42 +0530 Subject: properly editing customer details --- customer/validators.go | 44 +++++++++++++++++++++++++++++++++++++++++--- 1 file changed, 41 insertions(+), 3 deletions(-) (limited to 'customer/validators.go') diff --git a/customer/validators.go b/customer/validators.go index 17ca2ae..ea2a9d5 100644 --- a/customer/validators.go +++ b/customer/validators.go @@ -57,6 +57,37 @@ func checkDuplicate(field, value string, userId uint) error { return nil } +func checkDuplicateExisting(field, value string, userId, customerId uint) error { + if value != "" { + var count int64 + err := db.Model(&Customer{}). + Where("user_id = ? and id != ? and" + field + " = ?", userId, customerId, value). + Count(&count). + Error + + if err != nil { + return err + } + + if count > 0 { + switch(field) { + case "phone": + return errors.ErrNonUniquePhone + case "email": + return errors.ErrNonUniqueEmail + case "website": + return errors.ErrNonUniqueWebsite + case "gstin": + return errors.ErrNonUniqueGSTIN + default: + return e.New(field + " is not unique") + } + } + } + + return nil +} + func (c *Customer) validate() error { // trim whitespaces c.FirmName = strings.TrimSpace(c.FirmName) @@ -96,9 +127,16 @@ func (c *Customer) validate() error { var err error for _, i := range [][]string{{"phone", c.Phone}, {"email", c.Email}, {"website", c.Website}, {"gstin", c.Gstin}} { - err = checkDuplicate(i[0], i[1], c.UserID) - if err != nil { - return err + if c.ID != 0 { + err = checkDuplicateExisting(i[0], i[1], c.UserID, c.ID) + if err != nil { + return err + } + } else { + err = checkDuplicate(i[0], i[1], c.UserID) + if err != nil { + return err + } } } -- cgit v1.2.3