aboutsummaryrefslogtreecommitdiff
path: root/pkg/adapters/xlsx/xlsx.go
diff options
context:
space:
mode:
authorleshe4ka46 <alex9102naid1@ya.ru>2025-10-27 20:36:28 +0300
committerleshe4ka46 <alex9102naid1@ya.ru>2025-10-28 13:42:21 +0300
commitbb833561aa74f02970aee13cdc75973b29716491 (patch)
tree0914668e11dbf825979f7419ce1bc78294cd3f7f /pkg/adapters/xlsx/xlsx.go
parente17a425dfb3382310fb5863f516dacdca9f44956 (diff)
# This is a combination of 2 commits.
# This is the 1st commit message: unmarshal all formats, merge them in the single table, users are truly unique # This is the commit message #2: i
Diffstat (limited to 'pkg/adapters/xlsx/xlsx.go')
-rw-r--r--pkg/adapters/xlsx/xlsx.go84
1 files changed, 84 insertions, 0 deletions
diff --git a/pkg/adapters/xlsx/xlsx.go b/pkg/adapters/xlsx/xlsx.go
index 6ef9baa..5a8427b 100644
--- a/pkg/adapters/xlsx/xlsx.go
+++ b/pkg/adapters/xlsx/xlsx.go
@@ -2,8 +2,14 @@ package xlsx
import (
"fmt"
+ "os"
"strings"
+ "sync"
+ "airlines/pkg/airports"
+ "airlines/pkg/model"
+
+ "github.com/schollz/progressbar/v3"
"github.com/xuri/excelize/v2"
)
@@ -84,7 +90,85 @@ func UnmarshallXlsxFile(fname string) ([]Ticket, error) {
return nil, err
}
+ ap, _ := airports.LookupIATA(t.FromAirport)
+ t.FromCountry = ap.Country
+ t.FromCoords.Lat = ap.Latitude
+ t.FromCoords.Long = ap.Longitude
+
+ ap, _ = airports.LookupIATA(t.ToAirport)
+ t.ToCountry = ap.Country
+ t.ToCoords.Lat = ap.Latitude
+ t.ToCoords.Long = ap.Longitude
+
tickets = append(tickets, t)
}
return tickets, nil
}
+
+func UnmarshallXlsxFiles(baseDir string) ([]Ticket, error) {
+
+ tickets := make([]Ticket, 0)
+ items, err := os.ReadDir(baseDir)
+ if err != nil {
+ panic(err)
+ }
+
+ bar := progressbar.Default(int64(len(items)), "unmarshalling xlsx")
+
+ var mu sync.Mutex
+ var wg sync.WaitGroup
+ sem := make(chan struct{}, 8)
+ for _, item := range items {
+ if !item.IsDir() {
+ wg.Add(1)
+ sem <- struct{}{}
+ go func(name string) {
+ defer func() { <-sem }()
+ defer wg.Done()
+ // fmt.Println("Processing file:", name)
+ parsedTickets, err := UnmarshallXlsxFile(baseDir + name)
+ if err != nil {
+ panic(err)
+ }
+ mu.Lock()
+ defer mu.Unlock()
+ tickets = append(tickets, parsedTickets...)
+ bar.Add(1)
+ }(item.Name())
+ }
+ }
+ wg.Wait()
+
+ return tickets, nil
+}
+
+func DumpToDb(store model.Store, tickets []Ticket) {
+ var err error
+ bar := progressbar.Default(int64(len(tickets)), "dumping xlsx")
+ for _, ticket := range tickets {
+ bar.Add(1)
+ dbUser, _ := ticket.ToUser()
+ dbUser, err = store.SaveUser(dbUser)
+ if err != nil {
+ panic(err)
+ }
+
+ dbCard, err := ticket.ToCard()
+ if err != nil {
+ goto processflight
+ }
+ dbCard.UserID = dbUser.ID
+ _, err = store.SaveCard(dbCard)
+ // данные говно
+ if err != nil {
+ fmt.Println(err)
+ }
+ processflight:
+ dbFlight, _ := ticket.ToFlight()
+ dbFlight.UserID = dbUser.ID
+ _, err = store.SaveFlight(dbFlight)
+ if err != nil {
+ fmt.Println(err)
+ }
+ }
+}