diff options
| author | leshe4ka46 <alex9102naid1@ya.ru> | 2025-10-27 20:36:28 +0300 |
|---|---|---|
| committer | leshe4ka46 <alex9102naid1@ya.ru> | 2025-10-28 13:42:21 +0300 |
| commit | bb833561aa74f02970aee13cdc75973b29716491 (patch) | |
| tree | 0914668e11dbf825979f7419ce1bc78294cd3f7f /pkg/adapters/xml/registry.go | |
| parent | e17a425dfb3382310fb5863f516dacdca9f44956 (diff) | |
# This is a combination of 2 commits.
# This is the 1st commit message:
unmarshal all formats, merge them in the single table, users are truly unique
# This is the commit message #2:
i
Diffstat (limited to 'pkg/adapters/xml/registry.go')
| -rw-r--r-- | pkg/adapters/xml/registry.go | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/pkg/adapters/xml/registry.go b/pkg/adapters/xml/registry.go new file mode 100644 index 0000000..f7b0507 --- /dev/null +++ b/pkg/adapters/xml/registry.go @@ -0,0 +1,51 @@ +package xml + +import ( + "errors" + "fmt" + "strings" + "time" + + "airlines/pkg/model" +) + +func (u XMLUser) ToUser() (*model.User, error) { + return &model.User{ + Nick: "", + Name: strings.ToUpper(strings.TrimSpace(u.Name.First)), + Surname: strings.ToUpper(strings.TrimSpace(u.Name.Last)), + Fathersname: "", + Sex: model.SexUnknown, + Birthday: model.SentinelBirthday(), + }, nil +} + +func (c XMLCard) ToCard() (*model.Card, error) { + prefix, number, _ := model.ParseCardLine(c.Number) + if prefix == "" && number == 0 && strings.TrimSpace(c.Program) == "" { + return nil, errors.New("bad card") + } + return &model.Card{ + Prefix: prefix, + Number: number, + Bonusprogramm: strings.TrimSpace(c.Program), + }, nil +} + +func (a XMLActivity) ToFlight() (*model.Flight, error) { + fromIATA := strings.ToUpper(strings.TrimSpace(a.Departure)) + toIATA := strings.ToUpper(strings.TrimSpace(a.Arrival)) + + d, err := time.Parse("2006-01-02", strings.TrimSpace(a.Date)) + if err != nil { + return nil, fmt.Errorf("invalid Date %q for flight %q: %w", a.Date, a.Code, err) + } + departUTC := time.Date(d.Year(), d.Month(), d.Day(), 0, 0, 0, 0, time.UTC) + + return &model.Flight{ + Number: strings.TrimSpace(a.Code), + From: fromIATA, + To: toIATA, + Date: departUTC, + }, nil +} |
