aboutsummaryrefslogtreecommitdiff
path: root/pkg/adapters/json
diff options
context:
space:
mode:
Diffstat (limited to 'pkg/adapters/json')
-rw-r--r--pkg/adapters/json/json.go35
-rw-r--r--pkg/adapters/json/model.go40
2 files changed, 55 insertions, 20 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)
}
diff --git a/pkg/adapters/json/model.go b/pkg/adapters/json/model.go
index 2cc5d8e..86d7321 100644
--- a/pkg/adapters/json/model.go
+++ b/pkg/adapters/json/model.go
@@ -2,10 +2,13 @@ package json
import (
"strconv"
+ "strings"
"time"
"unicode"
"airlines/pkg/model"
+
+ "airlines/pkg/airports"
)
func sOrEmpty(p *string) string {
@@ -34,9 +37,9 @@ func onlyDigits(s string) string {
func (jp JsonProfile) ToUser() (*model.User, error) {
return &model.User{
- Name: sOrEmpty(jp.RealName.FirstName),
- Surname: sOrEmpty(jp.RealName.LastName),
- Nick: sOrEmpty(&jp.NickName),
+ Name: strings.ToUpper(sOrEmpty(jp.RealName.FirstName)),
+ Surname: strings.ToUpper(sOrEmpty(jp.RealName.LastName)),
+ Nick: strings.ToUpper(sOrEmpty(&jp.NickName)),
Fathersname: "",
Sex: jp.Sex,
Birthday: model.SentinelBirthday(),
@@ -44,16 +47,27 @@ func (jp JsonProfile) ToUser() (*model.User, error) {
}
func (jf JsonFlight) ToFlight() (*model.Flight, error) {
- return &model.Flight{
- Number: jf.Flight,
- From: jf.Departure.Airport,
- FromCity: jf.Departure.City,
- FromCountry: jf.Departure.Country,
- To: jf.Arrival.Airport,
- ToCity: jf.Arrival.City,
- ToCountry: jf.Arrival.Country,
- Date: jf.Date.ToDateUTC(),
- }, nil
+ // lookup IATA codes for lat lon
+ f := &model.Flight{
+ Number: jf.Flight,
+ From: strings.ToUpper(jf.Departure.Airport),
+ To: strings.ToUpper(jf.Arrival.Airport),
+ Date: jf.Date.ToDateUTC(),
+ }
+
+ ap, _ := airports.LookupIATA(f.From)
+ f.FromCoords.Lat = ap.Latitude
+ f.FromCoords.Long = ap.Longitude
+
+ loc := model.TzFromAirportRecord(ap)
+ departLocal := time.Date(f.Date.Year(), f.Date.Month(), f.Date.Day(), 0, 0, 0, 0, loc)
+ f.Date = departLocal.UTC()
+
+ ap, _ = airports.LookupIATA(jf.Arrival.Airport)
+ f.ToCoords.Lat = ap.Latitude
+ f.ToCoords.Long = ap.Longitude
+
+ return f, nil
}
func (jc JsonCard) ToCard() (*model.Card, error) {