package json import ( "strconv" "strings" "time" "unicode" "airlines/pkg/model" "airlines/pkg/airports" ) func sOrEmpty(p *string) string { if p == nil { return "" } return *p } func (d DateYMD) ToDateUTC() time.Time { if !d.Valid { return time.Time{} } return time.Date(d.Time.Year(), d.Time.Month(), d.Time.Day(), 0, 0, 0, 0, time.UTC) } func onlyDigits(s string) string { out := make([]rune, 0, len(s)) for _, r := range s { if unicode.IsDigit(r) { out = append(out, r) } } return string(out) } func (jp JsonProfile) ToUser() (*model.User, error) { return &model.User{ Name: strings.ToUpper(sOrEmpty(jp.RealName.FirstName)), Surname: strings.ToUpper(sOrEmpty(jp.RealName.LastName)), Nick: strings.ToUpper(sOrEmpty(&jp.NickName)), Fathersname: "", Sex: jp.Sex, Birthday: model.SentinelBirthday(), }, nil } func (jf JsonFlight) ToFlight() (*model.Flight, error) { // lookup IATA codes for lat lon f := &model.Flight{ Number: jf.Flight, From: strings.ToUpper(jf.Departure.Airport), To: strings.ToUpper(jf.Arrival.Airport), Date: jf.Date.ToDateUTC(), } ap, _ := airports.LookupIATA(f.From) f.FromCoords.Lat = ap.Latitude f.FromCoords.Long = ap.Longitude loc := model.TzFromAirportRecord(ap) departLocal := time.Date(f.Date.Year(), f.Date.Month(), f.Date.Day(), 0, 0, 0, 0, loc) f.Date = departLocal.UTC() ap, _ = airports.LookupIATA(jf.Arrival.Airport) f.ToCoords.Lat = ap.Latitude f.ToCoords.Long = ap.Longitude return f, nil } func (jc JsonCard) ToCard() (*model.Card, error) { numStr := onlyDigits(string(jc.Number)) var num uint64 if numStr != "" { v, err := strconv.ParseUint(numStr, 10, 64) if err != nil { return nil, err } num = v } return &model.Card{ Prefix: jc.Program, Number: num, Bonusprogramm: jc.Status, }, nil }