54 lines
989 B
Go
54 lines
989 B
Go
package meteo
|
|
|
|
import (
|
|
"context"
|
|
"io"
|
|
"log/slog"
|
|
)
|
|
|
|
type Service struct {
|
|
csv CSV
|
|
repo Repository
|
|
}
|
|
|
|
func NewService(repo Repository) *Service {
|
|
return &Service{
|
|
csv: CSV{},
|
|
repo: repo,
|
|
}
|
|
}
|
|
|
|
func (s *Service) IngestCSV(ctx context.Context, r io.Reader, fs *FileStats) error {
|
|
accepted, rejected, err := s.csv.Parse(r)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
// TODO call insertToDB
|
|
s.insertAcceptedToDB(ctx, accepted, fs)
|
|
s.insertRejectedToDB(ctx, rejected, fs)
|
|
|
|
return nil
|
|
}
|
|
|
|
func (s *Service) insertAcceptedToDB(ctx context.Context, data []MeteoData, fs *FileStats) error {
|
|
var err error
|
|
fs.RowsInserted, err = s.repo.InsertAcceptedMeteoData(ctx, data)
|
|
if err != nil {
|
|
slog.Error("error", "err", err)
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func (s *Service) insertRejectedToDB(ctx context.Context, data []RejectedMeteoData, fs *FileStats) error {
|
|
var err error
|
|
fs.RowsRejected, err = s.repo.InsertRejectedMeteoData(ctx, data)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|