CSV parsing interprets delimited text as records and fields. A production importer must handle commas inside quoted fields and escaped double quotes; string.Split(',') cannot do this reliably. section 7.4.1
A reliable implementation follows these decisions:
- Read the input as a stream, process records, and convert each valid line into a customer object. section 7.4.1
- Abstract parsing behind an interface so the importer can use a capable NuGet library such as GenericParser or NReco.Csv. section 7.4.1
- Keep repository operations separate from parsing, allowing parsed customers to be created or updated through an injected repository interface. section 7.4.1
Customer batch importer
CsvImporter receives a Stream, reads lines asynchronously, skips null results, looks up customers by email, and calls CreateAsync or UpdateAsync on the repository. section 7.4.1

