diff options
Diffstat (limited to 'pkg/adapters/json/json.go')
| -rw-r--r-- | pkg/adapters/json/json.go | 129 |
1 files changed, 129 insertions, 0 deletions
diff --git a/pkg/adapters/json/json.go b/pkg/adapters/json/json.go index c9ce212..8da149e 100644 --- a/pkg/adapters/json/json.go +++ b/pkg/adapters/json/json.go @@ -1,3 +1,132 @@ package json +import ( + "bytes" + "context" + "encoding/json" + "fmt" + "strings" + "time" + "airlines/pkg/model" + "airlines/pkg/store" +) + +type DateYMD struct { + time.Time + Valid bool +} + +func (d *DateYMD) UnmarshalJSON(b []byte) error { + nb := bytes.TrimSpace(b) + if bytes.Equal(nb, []byte("null")) { + *d = DateYMD{} + return nil + } + var s string + if err := json.Unmarshal(nb, &s); err != nil { + return err + } + if s == "" { + *d = DateYMD{} + return nil + } + t, err := time.Parse("2006-01-02", s) + if err != nil { + return err + } + d.Time = t + d.Valid = true + return nil +} + +/*----- Trimmed string (for loyalty Number: " 889..." ) -----*/ + +type Trimmed string + +func (t *Trimmed) UnmarshalJSON(b []byte) error { + var raw *string + if err := json.Unmarshal(b, &raw); err != nil { + return err + } + if raw == nil { + *t = "" + return nil + } + *t = Trimmed(strings.TrimSpace(*raw)) + return nil +} + +type JsonRoot struct { + ForumProfiles []JsonProfile `json:"Forum Profiles"` +} + +type JsonProfile struct { + NickName string `json:"NickName"` + Sex model.Sex `json:"Sex"` + RegisteredFlights []JsonFlight `json:"Registered Flights"` + TravelDocuments []TravelDoc `json:"Travel Documents"` + LoyaltyProgram []JsonCard `json:"Loyality Programm"` + RealName RealName `json:"Real Name"` +} + +type RealName struct { + LastName *string `json:"Last Name"` + FirstName *string `json:"First Name"` +} + +type TravelDoc struct { + Passports any `json:"Passports"` +} + +type JsonFlight struct { + Date DateYMD `json:"Date"` + Codeshare bool `json:"Codeshare"` + Flight string `json:"Flight"` + Arrival JsonPlace `json:"Arrival"` + Departure JsonPlace `json:"Departure"` +} + +type JsonPlace struct { + City string `json:"City"` + Airport string `json:"Airport"` + Country string `json:"Country"` +} + +type JsonCard struct { + Status string `json:"Status"` + Program string `json:"programm"` + Number Trimmed `json:"Number"` +} + +func (r *JsonRoot) DumpToDb(ctx context.Context, s *store.Store) { + var err error + for _, user := range r.ForumProfiles { + dbUser := user.ToUser() + dbUser, err = s.CreateOrGetUser(ctx, dbUser) + if err != nil { + panic(err) + } + + for _, card := range user.LoyaltyProgram { + dbCard, err := card.ToCard() + if err != nil { + panic(err) + } + _, err = s.AddCardsToUser(ctx, dbUser.ID, dbCard) + // данные говно + if err != nil { + fmt.Println(err) + } + + } + + for _, flight := range user.RegisteredFlights { + dbFlight := flight.ToFlight() + _, err = s.AddFlightToUser(ctx, dbUser.ID, dbFlight) + if err != nil { + fmt.Println(err) + } + } + } +} |
