Fix MS365 attributes handling

Signed-off-by: Bryan Frimin <bryan@getprobo.com>
This commit is contained in:
Bryan Frimin
2026-03-09 23:15:43 +01:00
parent 1d8ce190c3
commit dd3885ac54
9 changed files with 1280 additions and 172 deletions

View File

@@ -46,6 +46,23 @@ type (
OrganizationName string `db:"organization_name"`
UserName *string `db:"user_name"`
ExternalID *string `db:"external_id"`
NickName *string `db:"nick_name"`
Locale *string `db:"locale"`
Timezone *string `db:"timezone"`
ProfileUrl *string `db:"profile_url"`
PreferredLanguage *string `db:"preferred_language"`
GivenName *string `db:"given_name"`
FamilyName *string `db:"family_name"`
FormattedName *string `db:"formatted_name"`
MiddleName *string `db:"middle_name"`
HonorificPrefix *string `db:"honorific_prefix"`
HonorificSuffix *string `db:"honorific_suffix"`
EmployeeNumber *string `db:"employee_number"`
Department *string `db:"department"`
CostCenter *string `db:"cost_center"`
EnterpriseOrganization *string `db:"enterprise_organization"`
Division *string `db:"division"`
ManagerValue *string `db:"manager_value"`
CreatedAt time.Time `db:"created_at"`
UpdatedAt time.Time `db:"updated_at"`
}
@@ -111,6 +128,23 @@ SELECT
'' AS organization_name,
p.user_name,
p.external_id,
p.nick_name,
p.locale,
p.timezone,
p.profile_url,
p.preferred_language,
p.given_name,
p.family_name,
p.formatted_name,
p.middle_name,
p.honorific_prefix,
p.honorific_suffix,
p.employee_number,
p.department,
p.cost_center,
p.enterprise_organization,
p.division,
p.manager_value,
p.created_at,
p.updated_at
FROM
@@ -171,6 +205,23 @@ SELECT
'' AS organization_name,
p.user_name,
p.external_id,
p.nick_name,
p.locale,
p.timezone,
p.profile_url,
p.preferred_language,
p.given_name,
p.family_name,
p.formatted_name,
p.middle_name,
p.honorific_prefix,
p.honorific_suffix,
p.employee_number,
p.department,
p.cost_center,
p.enterprise_organization,
p.division,
p.manager_value,
p.created_at,
p.updated_at
FROM
@@ -234,6 +285,23 @@ SELECT
'' AS organization_name,
p.user_name,
p.external_id,
p.nick_name,
p.locale,
p.timezone,
p.profile_url,
p.preferred_language,
p.given_name,
p.family_name,
p.formatted_name,
p.middle_name,
p.honorific_prefix,
p.honorific_suffix,
p.employee_number,
p.department,
p.cost_center,
p.enterprise_organization,
p.division,
p.manager_value,
p.created_at,
p.updated_at
FROM
@@ -290,6 +358,23 @@ WITH profiles AS (
p.contract_end_date,
p.user_name,
p.external_id,
p.nick_name,
p.locale,
p.timezone,
p.profile_url,
p.preferred_language,
p.given_name,
p.family_name,
p.formatted_name,
p.middle_name,
p.honorific_prefix,
p.honorific_suffix,
p.employee_number,
p.department,
p.cost_center,
p.enterprise_organization,
p.division,
p.manager_value,
p.created_at,
p.updated_at
FROM
@@ -316,6 +401,23 @@ SELECT
'' AS organization_name,
user_name,
external_id,
nick_name,
locale,
timezone,
profile_url,
preferred_language,
given_name,
family_name,
formatted_name,
middle_name,
honorific_prefix,
honorific_suffix,
employee_number,
department,
cost_center,
enterprise_organization,
division,
manager_value,
created_at,
updated_at
FROM profiles
@@ -369,6 +471,23 @@ WITH profiles AS (
p.contract_end_date,
p.user_name,
p.external_id,
p.nick_name,
p.locale,
p.timezone,
p.profile_url,
p.preferred_language,
p.given_name,
p.family_name,
p.formatted_name,
p.middle_name,
p.honorific_prefix,
p.honorific_suffix,
p.employee_number,
p.department,
p.cost_center,
p.enterprise_organization,
p.division,
p.manager_value,
p.created_at,
p.updated_at
FROM
@@ -394,6 +513,23 @@ SELECT
o.name AS organization_name,
p.user_name,
p.external_id,
p.nick_name,
p.locale,
p.timezone,
p.profile_url,
p.preferred_language,
p.given_name,
p.family_name,
p.formatted_name,
p.middle_name,
p.honorific_prefix,
p.honorific_suffix,
p.employee_number,
p.department,
p.cost_center,
p.enterprise_organization,
p.division,
p.manager_value,
p.created_at,
p.updated_at
FROM profiles p
@@ -446,6 +582,23 @@ WITH profiles AS (
mp.contract_end_date,
mp.user_name,
mp.external_id,
mp.nick_name,
mp.locale,
mp.timezone,
mp.profile_url,
mp.preferred_language,
mp.given_name,
mp.family_name,
mp.formatted_name,
mp.middle_name,
mp.honorific_prefix,
mp.honorific_suffix,
mp.employee_number,
mp.department,
mp.cost_center,
mp.enterprise_organization,
mp.division,
mp.manager_value,
mp.created_at,
mp.updated_at
FROM
@@ -475,6 +628,23 @@ SELECT
'' AS organization_name,
p.user_name,
p.external_id,
p.nick_name,
p.locale,
p.timezone,
p.profile_url,
p.preferred_language,
p.given_name,
p.family_name,
p.formatted_name,
p.middle_name,
p.honorific_prefix,
p.honorific_suffix,
p.employee_number,
p.department,
p.cost_center,
p.enterprise_organization,
p.division,
p.manager_value,
p.created_at,
p.updated_at
FROM profiles p
@@ -556,6 +726,23 @@ WITH profiles AS (
mp.contract_end_date,
mp.user_name,
mp.external_id,
mp.nick_name,
mp.locale,
mp.timezone,
mp.profile_url,
mp.preferred_language,
mp.given_name,
mp.family_name,
mp.formatted_name,
mp.middle_name,
mp.honorific_prefix,
mp.honorific_suffix,
mp.employee_number,
mp.department,
mp.cost_center,
mp.enterprise_organization,
mp.division,
mp.manager_value,
mp.created_at,
mp.updated_at
FROM
@@ -585,6 +772,23 @@ SELECT
'' AS organization_name,
p.user_name,
p.external_id,
p.nick_name,
p.locale,
p.timezone,
p.profile_url,
p.preferred_language,
p.given_name,
p.family_name,
p.formatted_name,
p.middle_name,
p.honorific_prefix,
p.honorific_suffix,
p.employee_number,
p.department,
p.cost_center,
p.enterprise_organization,
p.division,
p.manager_value,
p.created_at,
p.updated_at
FROM profiles p
@@ -667,6 +871,23 @@ WITH attendees AS (
p.contract_end_date,
p.user_name,
p.external_id,
p.nick_name,
p.locale,
p.timezone,
p.profile_url,
p.preferred_language,
p.given_name,
p.family_name,
p.formatted_name,
p.middle_name,
p.honorific_prefix,
p.honorific_suffix,
p.employee_number,
p.department,
p.cost_center,
p.enterprise_organization,
p.division,
p.manager_value,
p.created_at,
p.updated_at,
ma.created_at AS attendee_created_at
@@ -695,6 +916,23 @@ SELECT
'' AS organization_name,
user_name,
external_id,
nick_name,
locale,
timezone,
profile_url,
preferred_language,
given_name,
family_name,
formatted_name,
middle_name,
honorific_prefix,
honorific_suffix,
employee_number,
department,
cost_center,
enterprise_organization,
division,
manager_value,
created_at,
updated_at
FROM
@@ -758,6 +996,23 @@ SELECT
'' AS organization_name,
p.user_name,
p.external_id,
p.nick_name,
p.locale,
p.timezone,
p.profile_url,
p.preferred_language,
p.given_name,
p.family_name,
p.formatted_name,
p.middle_name,
p.honorific_prefix,
p.honorific_suffix,
p.employee_number,
p.department,
p.cost_center,
p.enterprise_organization,
p.division,
p.manager_value,
p.created_at,
p.updated_at
FROM
@@ -913,6 +1168,23 @@ INSERT INTO
contract_end_date,
user_name,
external_id,
nick_name,
locale,
timezone,
profile_url,
preferred_language,
given_name,
family_name,
formatted_name,
middle_name,
honorific_prefix,
honorific_suffix,
employee_number,
department,
cost_center,
enterprise_organization,
division,
manager_value,
created_at,
updated_at
)
@@ -931,6 +1203,23 @@ VALUES (
@contract_end_date,
@user_name,
@external_id,
@nick_name,
@locale,
@timezone,
@profile_url,
@preferred_language,
@given_name,
@family_name,
@formatted_name,
@middle_name,
@honorific_prefix,
@honorific_suffix,
@employee_number,
@department,
@cost_center,
@enterprise_organization,
@division,
@manager_value,
@created_at,
@updated_at
)
@@ -950,7 +1239,24 @@ VALUES (
"contract_start_date": p.ContractStartDate,
"contract_end_date": p.ContractEndDate,
"user_name": p.UserName,
"external_id": p.ExternalID,
"external_id": p.ExternalID,
"nick_name": p.NickName,
"locale": p.Locale,
"timezone": p.Timezone,
"profile_url": p.ProfileUrl,
"preferred_language": p.PreferredLanguage,
"given_name": p.GivenName,
"family_name": p.FamilyName,
"formatted_name": p.FormattedName,
"middle_name": p.MiddleName,
"honorific_prefix": p.HonorificPrefix,
"honorific_suffix": p.HonorificSuffix,
"employee_number": p.EmployeeNumber,
"department": p.Department,
"cost_center": p.CostCenter,
"enterprise_organization": p.EnterpriseOrganization,
"division": p.Division,
"manager_value": p.ManagerValue,
"created_at": p.CreatedAt,
"updated_at": p.UpdatedAt,
}
@@ -987,6 +1293,23 @@ SET
contract_end_date = @contract_end_date,
user_name = @user_name,
external_id = @external_id,
nick_name = @nick_name,
locale = @locale,
timezone = @timezone,
profile_url = @profile_url,
preferred_language = @preferred_language,
given_name = @given_name,
family_name = @family_name,
formatted_name = @formatted_name,
middle_name = @middle_name,
honorific_prefix = @honorific_prefix,
honorific_suffix = @honorific_suffix,
employee_number = @employee_number,
department = @department,
cost_center = @cost_center,
enterprise_organization = @enterprise_organization,
division = @division,
manager_value = @manager_value,
updated_at = @updated_at
WHERE
id = @id
@@ -1006,7 +1329,24 @@ WHERE
"contract_start_date": p.ContractStartDate,
"contract_end_date": p.ContractEndDate,
"user_name": p.UserName,
"external_id": p.ExternalID,
"external_id": p.ExternalID,
"nick_name": p.NickName,
"locale": p.Locale,
"timezone": p.Timezone,
"profile_url": p.ProfileUrl,
"preferred_language": p.PreferredLanguage,
"given_name": p.GivenName,
"family_name": p.FamilyName,
"formatted_name": p.FormattedName,
"middle_name": p.MiddleName,
"honorific_prefix": p.HonorificPrefix,
"honorific_suffix": p.HonorificSuffix,
"employee_number": p.EmployeeNumber,
"department": p.Department,
"cost_center": p.CostCenter,
"enterprise_organization": p.EnterpriseOrganization,
"division": p.Division,
"manager_value": p.ManagerValue,
"updated_at": p.UpdatedAt,
}
maps.Copy(args, scope.SQLArguments())

View File

@@ -20,13 +20,13 @@ import (
)
type (
MembershipProfileKind uint8
MembershipProfileKind string
)
const (
MembershipProfileKindEmployee MembershipProfileKind = iota
MembershipProfileKindContractor
MembershipProfileKindServiceAccount
MembershipProfileKindEmployee MembershipProfileKind = "EMPLOYEE"
MembershipProfileKindContractor MembershipProfileKind = "CONTRACTOR"
MembershipProfileKindServiceAccount MembershipProfileKind = "SERVICE_ACCOUNT"
)
func MembershipProfileKinds() []MembershipProfileKind {
@@ -38,55 +38,30 @@ func MembershipProfileKinds() []MembershipProfileKind {
}
func (mpk MembershipProfileKind) MarshalText() ([]byte, error) {
return []byte(mpk.String()), nil
return []byte(mpk), nil
}
func (mpk *MembershipProfileKind) UnmarshalText(data []byte) error {
val := string(data)
switch val {
case MembershipProfileKindEmployee.String():
*mpk = MembershipProfileKindEmployee
case MembershipProfileKindContractor.String():
*mpk = MembershipProfileKindContractor
case MembershipProfileKindServiceAccount.String():
*mpk = MembershipProfileKindServiceAccount
default:
return fmt.Errorf("invalid MembershipProfileKind value: %q", val)
}
*mpk = MembershipProfileKind(data)
return nil
}
func (mpk MembershipProfileKind) String() string {
var val string
switch mpk {
case MembershipProfileKindEmployee:
val = "EMPLOYEE"
case MembershipProfileKindContractor:
val = "CONTRACTOR"
case MembershipProfileKindServiceAccount:
val = "SERVICE_ACCOUNT"
}
return val
return string(mpk)
}
func (mpk *MembershipProfileKind) Scan(value any) error {
var val string
switch v := value.(type) {
case string:
val = v
*mpk = MembershipProfileKind(v)
case []byte:
val = string(v)
*mpk = MembershipProfileKind(v)
default:
return fmt.Errorf("unsupported type for MembershipProfileKind: %T", value)
}
return mpk.UnmarshalText([]byte(val))
return nil
}
func (mpk MembershipProfileKind) Value() (driver.Value, error) {
return mpk.String(), nil
return string(mpk), nil
}

View File

@@ -0,0 +1,6 @@
ALTER TABLE iam_membership_profiles
ALTER COLUMN kind TYPE TEXT USING kind::TEXT,
ADD COLUMN nick_name TEXT,
ADD COLUMN locale TEXT,
ADD COLUMN timezone TEXT,
ADD COLUMN profile_url TEXT;

View File

@@ -0,0 +1,14 @@
ALTER TABLE iam_membership_profiles
ADD COLUMN preferred_language TEXT,
ADD COLUMN given_name TEXT,
ADD COLUMN family_name TEXT,
ADD COLUMN formatted_name TEXT,
ADD COLUMN middle_name TEXT,
ADD COLUMN honorific_prefix TEXT,
ADD COLUMN honorific_suffix TEXT,
ADD COLUMN employee_number TEXT,
ADD COLUMN department TEXT,
ADD COLUMN cost_center TEXT,
ADD COLUMN enterprise_organization TEXT,
ADD COLUMN division TEXT,
ADD COLUMN manager_value TEXT;