50 lines
1.2 KiB
Go
50 lines
1.2 KiB
Go
package sync
|
|
|
|
import (
|
|
"fmt"
|
|
"log/slog"
|
|
"time"
|
|
)
|
|
|
|
// SeenPartnumber represents an unresolved vendor partnumber to report.
|
|
type SeenPartnumber struct {
|
|
Partnumber string
|
|
Description string
|
|
Ignored bool
|
|
}
|
|
|
|
// PushPartnumberSeen inserts unresolved vendor partnumbers into qt_vendor_partnumber_seen on MariaDB.
|
|
// Existing rows are left untouched: no updates to last_seen_at, is_ignored, or description.
|
|
func (s *Service) PushPartnumberSeen(items []SeenPartnumber) error {
|
|
if len(items) == 0 {
|
|
return nil
|
|
}
|
|
|
|
mariaDB, err := s.getDB()
|
|
if err != nil {
|
|
return fmt.Errorf("database not available: %w", err)
|
|
}
|
|
|
|
now := time.Now().UTC()
|
|
for _, item := range items {
|
|
if item.Partnumber == "" {
|
|
continue
|
|
}
|
|
err := mariaDB.Exec(`
|
|
INSERT INTO qt_vendor_partnumber_seen
|
|
(source_type, vendor, partnumber, description, is_ignored, last_seen_at)
|
|
VALUES
|
|
('manual', '', ?, ?, ?, ?)
|
|
ON DUPLICATE KEY UPDATE
|
|
partnumber = partnumber
|
|
`, item.Partnumber, item.Description, item.Ignored, now).Error
|
|
if err != nil {
|
|
slog.Error("failed to insert partnumber_seen", "partnumber", item.Partnumber, "error", err)
|
|
// Continue with remaining items
|
|
}
|
|
}
|
|
|
|
slog.Info("partnumber_seen pushed to server", "count", len(items))
|
|
return nil
|
|
}
|