diff options
Diffstat (limited to 'pkg/adapters/json/model.go')
| -rw-r--r-- | pkg/adapters/json/model.go | 77 |
1 files changed, 77 insertions, 0 deletions
diff --git a/pkg/adapters/json/model.go b/pkg/adapters/json/model.go new file mode 100644 index 0000000..a010367 --- /dev/null +++ b/pkg/adapters/json/model.go @@ -0,0 +1,77 @@ +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 +} |
