diff options
Diffstat (limited to 'pkg/adapters/json/json.go')
| -rw-r--r-- | pkg/adapters/json/json.go | 35 |
1 files changed, 28 insertions, 7 deletions
diff --git a/pkg/adapters/json/json.go b/pkg/adapters/json/json.go index 47a563e..73d3ae8 100644 --- a/pkg/adapters/json/json.go +++ b/pkg/adapters/json/json.go @@ -2,14 +2,15 @@ package json import ( "bytes" - "context" "encoding/json" "fmt" + "os" "strings" "time" "airlines/pkg/model" - "airlines/pkg/store" + + "github.com/schollz/progressbar/v3" ) type DateYMD struct { @@ -97,11 +98,29 @@ type JsonCard struct { Number Trimmed `json:"Number"` } -func (r *JsonRoot) DumpToDb(ctx context.Context, s *store.Store) { +func UnmarshalJsonRoot(path string) (*JsonRoot, error) { + f, err := os.Open(path) + if err != nil { + panic(err) + } + defer f.Close() + + dec := json.NewDecoder(f) + var root JsonRoot + if err := dec.Decode(&root); err != nil { + return nil, err + } + return &root, nil +} + +func (r *JsonRoot) DumpToDb(store model.Store) { var err error - for _, user := range r.ForumProfiles { + bar := progressbar.Default(int64(len(r.ForumProfiles)), "dumping json") + + for i, user := range r.ForumProfiles { + bar.Set(i) dbUser, _ := user.ToUser() - dbUser, err = s.CreateOrGetUser(ctx, dbUser) + dbUser, err = store.SaveUser(dbUser) if err != nil { panic(err) } @@ -111,7 +130,8 @@ func (r *JsonRoot) DumpToDb(ctx context.Context, s *store.Store) { if err != nil { panic(err) } - _, err = s.AddCardsToUser(ctx, dbUser.ID, dbCard) + dbCard.UserID = dbUser.ID + _, err = store.SaveCard(dbCard) // данные говно if err != nil { fmt.Println(err) @@ -121,7 +141,8 @@ func (r *JsonRoot) DumpToDb(ctx context.Context, s *store.Store) { for _, flight := range user.RegisteredFlights { dbFlight, _ := flight.ToFlight() - _, err = s.AddFlightToUser(ctx, dbUser.ID, dbFlight) + dbFlight.UserID = dbUser.ID + _, err = store.SaveFlight(dbFlight) if err != nil { fmt.Println(err) } |
