package service
|
|
import (
|
"aps_crm/model"
|
"aps_crm/pkg/ecode"
|
"gorm.io/gorm"
|
)
|
|
type ContactService struct{}
|
|
func (ContactService) AddContact(contact *model.Contact) int {
|
|
code := checkMemberAndCompany(contact)
|
if code != ecode.OK {
|
return code
|
}
|
|
tx := model.NewContactSearch().Orm.Begin()
|
|
// check isFirst
|
errCode := setFirstContact(tx, contact)
|
if errCode != ecode.OK {
|
return errCode
|
}
|
|
err := model.NewContactSearch().Create(contact)
|
if err != nil {
|
tx.Rollback()
|
return ecode.ContactExist
|
}
|
|
tx.Commit()
|
return ecode.OK
|
}
|
|
func (ContactService) DeleteContact(id int) int {
|
// check contact exist
|
_, err := model.NewContactSearch().SetId(id).First()
|
if err != nil {
|
return ecode.ContactNotExist
|
}
|
|
// delete contact
|
err = model.NewContactSearch().SetId(id).Delete()
|
if err != nil {
|
return ecode.ContactDeleteErr
|
}
|
return ecode.OK
|
}
|
|
func (ContactService) GetContactList() ([]*model.Contact, int) {
|
// get contact list
|
contacts, err := model.NewContactSearch().FindAll()
|
if err != nil {
|
return nil, ecode.ContactListErr
|
}
|
return contacts, ecode.OK
|
}
|
|
func (ContactService) UpdateContact(contact *model.Contact) int {
|
// check contact exist
|
_, err := model.NewContactSearch().SetId(contact.Id).First()
|
if err != nil {
|
return ecode.ContactNotExist
|
}
|
|
code := checkMemberAndCompany(contact)
|
if code != ecode.OK {
|
return code
|
}
|
|
tx := model.NewContactSearch().Orm.Begin()
|
code = setFirstContact(tx, contact)
|
if code != ecode.OK {
|
return code
|
}
|
|
// update contact
|
err = model.NewContactSearch().SetId(contact.Id).Update(contact)
|
if err != nil {
|
tx.Rollback()
|
return ecode.ContactUpdateErr
|
}
|
|
tx.Commit()
|
|
return ecode.OK
|
}
|
|
func checkMemberAndCompany(contact *model.Contact) int {
|
// check client exist
|
code := CheckClientExist(contact.ClientId)
|
if code != ecode.OK {
|
return code
|
}
|
|
// check member exist
|
return ecode.OK
|
}
|
|
func setFirstContact(tx *gorm.DB, contact *model.Contact) int {
|
if contact.IsFirst && contact.ClientId != 0 {
|
err := model.NewContactSearch().SetClientId(contact.ClientId).UpdateByMap(map[string]interface{}{
|
"is_first": false,
|
})
|
if err != nil {
|
tx.Rollback()
|
return ecode.ContactUpdateErr
|
}
|
}
|
|
return ecode.OK
|
}
|
|
// CheckContactExist check contact exist
|
func CheckContactExist(id int) int {
|
tmp, err := model.NewContactSearch().SetId(id).First()
|
if err != nil {
|
return ecode.ContactNotExist
|
}
|
|
if tmp.Id == 0 {
|
return ecode.ContactNotExist
|
}
|
|
return ecode.OK
|
}
|