diff options
Diffstat (limited to 'pkg/adapters/xml/xml.go')
| -rw-r--r-- | pkg/adapters/xml/xml.go | 113 |
1 files changed, 113 insertions, 0 deletions
diff --git a/pkg/adapters/xml/xml.go b/pkg/adapters/xml/xml.go new file mode 100644 index 0000000..3350c01 --- /dev/null +++ b/pkg/adapters/xml/xml.go @@ -0,0 +1,113 @@ +package xml + +import ( + "airlines/pkg/model" + "encoding/xml" + "fmt" + "os" + + "github.com/schollz/progressbar/v3" +) + +type PointzAggregatorUsers struct { + XMLName xml.Name `xml:"PointzAggregatorUsers"` + Users []XMLUser `xml:"user"` +} + +type XMLUser struct { + UID string `xml:"uid,attr"` + Name Name `xml:"name"` + Cards Cards `xml:"cards"` +} + +type Name struct { + First string `xml:"first,attr"` + Last string `xml:"last,attr"` +} + +type Cards struct { + Type string `xml:"type,attr"` + Card []XMLCard `xml:"card"` +} + +type XMLCard struct { + Number string `xml:"number,attr"` + Program string `xml:"bonusprogramm"` + Activities Activities `xml:"activities"` +} + +type Activities struct { + Type string `xml:"type,attr"` + Activitys []XMLActivity `xml:"activity"` +} + +type XMLActivity struct { + Type string `xml:"type,attr"` + Code string `xml:"Code"` + Date string `xml:"Date"` + Departure string `xml:"Departure"` + Arrival string `xml:"Arrival"` + Fare string `xml:"Fare"` +} + +func UnmarshalXml(path string) (*PointzAggregatorUsers, error) { + + data, err := os.ReadFile(path) + if err != nil { + return nil, err + } + + var p PointzAggregatorUsers + if err := xml.Unmarshal(data, &p); err != nil { + return nil, err + } + return &p, nil +} + +func (u *PointzAggregatorUsers) DumpToDb(store model.Store) error { + // var err error + bar := progressbar.Default(int64(len(u.Users)), "dumping xml") + + for _, u := range u.Users { + dbUser, err := u.ToUser() + if err != nil { + panic(err) + } + dbUser, err = store.SaveUser(dbUser) + if err != nil { + panic(err) + } + // fmt.Println(dbUser) + + + for _, card := range u.Cards.Card { + dbCard, err := card.ToCard() + if err != nil { + fmt.Println(err) + continue + } + dbCard.UserID = dbUser.ID + _, err = store.SaveCard(dbCard) + // данные говно + if err != nil { + fmt.Println(err) + } + + for _, activity := range card.Activities.Activitys { + + dbFlight, err := activity.ToFlight() + if err != nil { + fmt.Println(err) + } + dbFlight.UserID = dbUser.ID + _, err = store.SaveFlight(dbFlight) + if err != nil { + fmt.Println(err) + } + } + } + bar.Add(1) + } + + return nil +} |
