75 lines
1.7 KiB
Go
75 lines
1.7 KiB
Go
package idms
|
|
|
|
import (
|
|
"encoding/json"
|
|
"fmt"
|
|
"sort"
|
|
"strings"
|
|
|
|
"clintonambulance.com/calculate_negative_points/internal/config"
|
|
"github.com/samber/lo"
|
|
)
|
|
|
|
// FlexibleString handles JSON values that can be either strings or numbers
|
|
type FlexibleString string
|
|
|
|
func (f *FlexibleString) UnmarshalJSON(data []byte) error {
|
|
var s string
|
|
if err := json.Unmarshal(data, &s); err == nil {
|
|
*f = FlexibleString(s)
|
|
return nil
|
|
}
|
|
|
|
var n json.Number
|
|
if err := json.Unmarshal(data, &n); err == nil {
|
|
*f = FlexibleString(n.String())
|
|
return nil
|
|
}
|
|
|
|
return fmt.Errorf("cannot unmarshal %s into FlexibleString", data)
|
|
}
|
|
|
|
type IdmsUserAttributes struct {
|
|
Cars bool `json:"cars"`
|
|
EmployeeId FlexibleString `json:"employee_id"`
|
|
}
|
|
|
|
type IdmsUser struct {
|
|
Attributes IdmsUserAttributes `json:"attributes"`
|
|
Groups []string `json:"groups"`
|
|
Id string `json:"uid"`
|
|
Name string `json:"name"`
|
|
Username string `json:"username"`
|
|
}
|
|
|
|
func (u IdmsUser) FirstName() string {
|
|
parts := strings.Fields(u.Name)
|
|
if len(parts) == 0 {
|
|
return ""
|
|
}
|
|
return parts[0]
|
|
}
|
|
|
|
func (u IdmsUser) LastName() string {
|
|
parts := strings.Fields(u.Name)
|
|
if len(parts) == 0 {
|
|
return ""
|
|
}
|
|
return parts[len(parts)-1]
|
|
}
|
|
|
|
func GetCarsMembers(config *config.ApplicationConfig) []IdmsUser {
|
|
req := NewRequest[IdmsUser]("/api/v3/core/users/?is_active=true", Get)
|
|
results, _ := req.Perform(config, map[string]string{}, map[string]string{})
|
|
|
|
filtered := lo.Filter(results, func(u IdmsUser, _ int) bool {
|
|
return lo.Contains(u.Groups, config.Idms.CarsGroupId)
|
|
})
|
|
|
|
sort.Slice(filtered, func(i, j int) bool {
|
|
return filtered[i].LastName() < filtered[j].LastName()
|
|
})
|
|
|
|
return filtered
|
|
}
|