feat(oo): catalog scan/match/apply for CRM clients and contacts
Add filesystem inventory (VCF, contact folders, project trees) into a reviewable YAML catalog, match against live OnlyOffice, and upsert only rows with approve:true. Includes FindPersonByEmail for email-keyed persons.
This commit is contained in:
@@ -96,6 +96,53 @@ func (c *Client) FindPerson(ctx context.Context, first, last string) (map[string
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
// FindPersonByEmail finds a person whose primary or contact-info email matches
|
||||
// (case-insensitive). Companies are skipped. Returns nil when not found.
|
||||
func (c *Client) FindPersonByEmail(ctx context.Context, email string) (map[string]any, error) {
|
||||
needle := strings.ToLower(strings.TrimSpace(email))
|
||||
if needle == "" {
|
||||
return nil, nil
|
||||
}
|
||||
all, err := c.ListAllContacts(ctx)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
for _, p := range all {
|
||||
if isCompany(p) {
|
||||
continue
|
||||
}
|
||||
for _, em := range contactEmailValues(p) {
|
||||
if strings.ToLower(strings.TrimSpace(em)) == needle {
|
||||
return p, nil
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
func contactEmailValues(p map[string]any) []string {
|
||||
var out []string
|
||||
for _, key := range []string{"email", "primaryEmail"} {
|
||||
if v := strings.TrimSpace(fmt.Sprint(p[key])); v != "" && v != "<nil>" {
|
||||
out = append(out, v)
|
||||
}
|
||||
}
|
||||
for _, row := range ContactInfoRows(p) {
|
||||
t := strings.ToLower(fmt.Sprint(row["infoType"]))
|
||||
if t != "email" {
|
||||
continue
|
||||
}
|
||||
data := strings.TrimSpace(fmt.Sprint(row["data"]))
|
||||
if data == "" || data == "<nil>" {
|
||||
data = strings.TrimSpace(fmt.Sprint(row["value"]))
|
||||
}
|
||||
if data != "" {
|
||||
out = append(out, data)
|
||||
}
|
||||
}
|
||||
return out
|
||||
}
|
||||
|
||||
func isCompany(m map[string]any) bool {
|
||||
v, ok := m["isCompany"].(bool)
|
||||
return ok && v
|
||||
|
||||
Reference in New Issue
Block a user