aboutsummaryrefslogtreecommitdiff
path: root/pkg/adapters/json/model.go
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/adapters/json/model.go')
-rw-r--r--pkg/adapters/json/model.go77
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
+}