package json import ( "strconv" "time" "unicode" "airlines/pkg/model" ) /* ---------- helpers ---------- */ func sOrEmpty(p *string) string { if p == nil { return "" } return *p } func toDateUTC(d DateYMD) 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 { return &model.User{ Name: sOrEmpty(jp.RealName.FirstName), Surname: sOrEmpty(jp.RealName.LastName), Nick: sOrEmpty(&jp.NickName), Fathersname: "", Sex: jp.Sex, Birthday: model.SentinelBirthday(), } } func (jf JsonFlight) ToFlight() *model.Flight { d := toDateUTC(jf.Date) return &model.Flight{ Number: jf.Flight, From: jf.Departure.Airport, FromCity: jf.Departure.City, FromCountry: jf.Departure.Country, To: jf.Arrival.Airport, ToCity: jf.Arrival.City, ToCountry: jf.Arrival.Country, Date: d, } } 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 }