UploadExternalData handles the process of uploading external data by detecting file type, parsing, and storing it. Parameters: - ctx: The context for controlling execution. - source: The source of the external data. - reader: An io.Reader for reading the data. - filename: The name of the file being
(ctx context.Context, source string, reader io.Reader, filename string, store StoreFunc)
| 62 | // - int: The total number of records processed. |
| 63 | // - error: If any step of the process fails. |
| 64 | func UploadExternalData(ctx context.Context, source string, reader io.Reader, filename string, store StoreFunc) (string, int, error) { |
| 65 | uploadID := model.GenerateUUIDWithSuffix("upload") |
| 66 | |
| 67 | // Use buffered reader for better I/O performance |
| 68 | bufferedReader := bufio.NewReaderSize(reader, DefaultBufferSize) |
| 69 | |
| 70 | tempFile, err := createAndPopulateTempFile(filename, bufferedReader) |
| 71 | if err != nil { |
| 72 | return "", 0, err |
| 73 | } |
| 74 | defer cleanupTempFile(tempFile) |
| 75 | |
| 76 | fileType, err := detectFileTypeFromTempFile(tempFile, filename) |
| 77 | if err != nil { |
| 78 | return "", 0, err |
| 79 | } |
| 80 | |
| 81 | total, err := parseAndStoreData(ctx, uploadID, source, tempFile, fileType, store) |
| 82 | if err != nil { |
| 83 | return "", 0, err |
| 84 | } |
| 85 | |
| 86 | return uploadID, total, nil |
| 87 | } |
| 88 | |
| 89 | func createAndPopulateTempFile(filename string, reader io.Reader) (*os.File, error) { |
| 90 | tempFile, err := createTempFile(filename) |
no test coverage detected