85 lines
1.7 KiB
Go
85 lines
1.7 KiB
Go
package main
|
|
|
|
import (
|
|
"strings"
|
|
"unicode"
|
|
)
|
|
|
|
func dataEqual(a, b []Person) bool {
|
|
if len(a) != len(b) {
|
|
return false
|
|
}
|
|
for i := range a {
|
|
if !personEqual(a[i], b[i]) {
|
|
return false
|
|
}
|
|
}
|
|
return true
|
|
}
|
|
|
|
func personEqual(a, b Person) bool {
|
|
return a.FirstName == b.FirstName &&
|
|
a.LastName == b.LastName &&
|
|
a.Email == b.Email &&
|
|
a.InternalPhone == b.InternalPhone &&
|
|
a.Department == b.Department &&
|
|
phonesEqual(a.Phones, b.Phones)
|
|
}
|
|
|
|
func phonesEqual(a, b []Phone) bool {
|
|
if len(a) != len(b) {
|
|
return false
|
|
}
|
|
for i := range a {
|
|
if a[i] != b[i] {
|
|
return false
|
|
}
|
|
}
|
|
return true
|
|
}
|
|
|
|
func formatPhoneNumber(number string) string {
|
|
// Entferne alle Nicht-Ziffern
|
|
digits := strings.Map(func(r rune) rune {
|
|
if unicode.IsDigit(r) {
|
|
return r
|
|
}
|
|
return -1
|
|
}, number)
|
|
|
|
// Entferne führende Nullen
|
|
digits = strings.TrimLeft(digits, "0")
|
|
|
|
// Entferne den Länderprefix, falls vorhanden
|
|
countryPrefix := config.PhoneRules.Country.Prefix
|
|
if strings.HasPrefix(digits, countryPrefix) {
|
|
digits = digits[len(countryPrefix):]
|
|
}
|
|
|
|
// Füge eine führende "0" hinzu, wenn nicht vorhanden
|
|
if !strings.HasPrefix(digits, "0") {
|
|
digits = "0" + digits
|
|
}
|
|
|
|
return digits
|
|
}
|
|
|
|
func extractInternalNumber(phoneNumber string) string {
|
|
digits := formatPhoneNumber(phoneNumber)
|
|
|
|
for _, areaCode := range config.PhoneRules.Country.AreaCodes {
|
|
if strings.HasPrefix(digits[1:], areaCode) { // Ignoriere die führende 0
|
|
remaining := digits[1+len(areaCode):]
|
|
if strings.HasPrefix(remaining, config.PhoneRules.Country.InternalPrefix) {
|
|
return remaining[len(config.PhoneRules.Country.InternalPrefix):]
|
|
}
|
|
}
|
|
}
|
|
|
|
return ""
|
|
}
|
|
|
|
func normalizePhoneNumber(number string) string {
|
|
return formatPhoneNumber(number)
|
|
}
|