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 }