package service
|
|
import (
|
"aps_crm/model"
|
"aps_crm/pkg/ecode"
|
"aps_crm/pkg/mysqlx"
|
"gorm.io/gorm"
|
)
|
|
type ContactService struct{}
|
|
func (ContactService) AddContact(contact *model.Contact) int {
|
|
code := checkMemberAndCompany(contact)
|
if code != ecode.OK {
|
return code
|
}
|
|
tx := mysqlx.GetDB().Begin()
|
// check isFirst
|
errCode := setFirstContact(tx, contact)
|
if errCode != ecode.OK {
|
return errCode
|
}
|
|
err := model.NewContactSearch(tx).Create(contact)
|
if err != nil {
|
tx.Rollback()
|
return ecode.ContactExist
|
}
|
|
tx.Commit()
|
return ecode.OK
|
}
|
|
func (ContactService) UpdateContact(contact *model.Contact) int {
|
// check contact exist
|
_, err := model.NewContactSearch(nil).SetId(contact.Id).First()
|
if err != nil {
|
return ecode.ContactNotExist
|
}
|
|
code := checkMemberAndCompany(contact)
|
if code != ecode.OK {
|
return code
|
}
|
|
tx := mysqlx.GetDB().Begin()
|
code = setFirstContact(tx, contact)
|
if code != ecode.OK {
|
return code
|
}
|
|
// update contact
|
err = model.NewContactSearch(tx).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(tx).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(nil).SetId(id).First()
|
if err != nil {
|
return ecode.ContactNotExist
|
}
|
|
if tmp.Id == 0 {
|
return ecode.ContactNotExist
|
}
|
|
return ecode.OK
|
}
|
|
func (ContactService) GetContactList(page, pageSize int, data map[string]interface{}, clientId int) ([]*model.ContactDetail, int64, int) {
|
// get contact list
|
contacts, total, err := model.NewContactSearch(nil).SetPage(page, pageSize).SetSearchMap(data).SetClientId(clientId).FindAll()
|
if err != nil {
|
return nil, 0, ecode.ContactListErr
|
}
|
return contacts, total, ecode.OK
|
}
|
|
func (ContactService) DeleteContact(ids []int) int {
|
// delete client
|
err := model.NewContactSearch(nil).SetIds(ids).Delete()
|
if err != nil {
|
return ecode.ContactDeleteErr
|
}
|
return ecode.OK
|
}
|
|
func (ContactService) Assign(ids []int, memberId int) int {
|
// check contact exist
|
//errCode := CheckContactExist(id)
|
//if errCode != ecode.OK {
|
// return errCode
|
//}
|
|
// assign contact
|
err := model.NewContactSearch(nil).SetIds(ids).UpdateByMap(map[string]interface{}{
|
"member_id": memberId,
|
})
|
if err != nil {
|
return ecode.ContactAssignErr
|
}
|
|
return ecode.OK
|
}
|