aboutsummaryrefslogtreecommitdiff
path: root/pkg/adapters/json/json.go
diff options
context:
space:
mode:
authorleshe4ka46 <alex9102naid1@ya.ru>2025-10-11 16:12:19 +0300
committerleshe4ka46 <alex9102naid1@ya.ru>2025-10-11 16:12:19 +0300
commit2d35000b41e5ccb63a42eee24c4de063efd9071e (patch)
tree63f2fd168942bd336113d29c8991e79382038f0a /pkg/adapters/json/json.go
parent31b2dce966be10902dd7f75a9e41dd3fd40e6680 (diff)
json tests
Diffstat (limited to 'pkg/adapters/json/json.go')
-rw-r--r--pkg/adapters/json/json.go129
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)
+ }
+ }
+ }
+}