meteologica/service_a/internal/domains/meteo/service.go

55 lines
1.1 KiB
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
}
result, err := s.repo.InsertMeteoDataTX(ctx, InsertMeteoDataParams{
FileChecksum: fs.FileChecksum,
Accepted: accepted,
Rejected: rejected,
})
if err != nil {
slog.Error("error inserting meteo data", "err", err)
return err
}
fs.BatchID = result.BatchID
fs.RowsInserted = result.AcceptedCount
fs.RowsRejected = result.RejectedCount
return nil
}
func (s *Service) UpdateElapsedMS(ctx context.Context, batchID, elapsedMS int) error {
if err := s.repo.UpdateBatchElapsedTime(ctx, batchID, elapsedMS); err != nil {
slog.Error("error updating batch elapsed time", "err", err)
}
return nil
}
func (s *Service) GetMeteoData(params GetMeteoData) ([]MeteoData, error) {
return []MeteoData{}, nil
}