aboutsummaryrefslogtreecommitdiff
path: root/pkg/adapters/json/model.go
blob: a010367e9607a4f2d20ed836a642c36d1139aca4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
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
}