115 lines
4.6 KiB
C#
115 lines
4.6 KiB
C#
using OnlyOneAccessTemplate.Services.OnlyOneAccessTemplate.Services;
|
|
|
|
namespace OnlyOneAccessTemplate.Services
|
|
{
|
|
public class CsvToJsonConverterService : BaseConverterService
|
|
{
|
|
public override string ConverterType => "csv-json";
|
|
public override string ConverterName => "CSV to JSON Converter";
|
|
|
|
public CsvToJsonConverterService(ILogger<CsvToJsonConverterService> logger, IConfiguration configuration)
|
|
: base(logger, configuration) { }
|
|
|
|
public override async Task<ConversionResult> ConvertAsync(ConversionRequest request)
|
|
{
|
|
try
|
|
{
|
|
string csvContent;
|
|
|
|
if (request.InputType == "file" && request.FileInput != null)
|
|
{
|
|
using var reader = new StreamReader(request.FileInput.OpenReadStream());
|
|
csvContent = await reader.ReadToEndAsync();
|
|
}
|
|
else if (request.InputType == "text" && !string.IsNullOrEmpty(request.TextInput))
|
|
{
|
|
csvContent = request.TextInput;
|
|
}
|
|
else
|
|
{
|
|
return new ConversionResult(false, ErrorMessage: "Nenhum conteúdo CSV fornecido");
|
|
}
|
|
|
|
var lines = csvContent.Split('\n', StringSplitOptions.RemoveEmptyEntries);
|
|
if (lines.Length < 2)
|
|
{
|
|
return new ConversionResult(false, ErrorMessage: "CSV deve ter pelo menos cabeçalho e uma linha de dados");
|
|
}
|
|
|
|
var headers = lines[0].Split(',').Select(h => h.Trim().Trim('"')).ToArray();
|
|
var jsonObjects = new List<Dictionary<string, string>>();
|
|
|
|
for (int i = 1; i < lines.Length; i++)
|
|
{
|
|
var values = lines[i].Split(',').Select(v => v.Trim().Trim('"')).ToArray();
|
|
var obj = new Dictionary<string, string>();
|
|
|
|
for (int j = 0; j < Math.Min(headers.Length, values.Length); j++)
|
|
{
|
|
obj[headers[j]] = values[j];
|
|
}
|
|
|
|
jsonObjects.Add(obj);
|
|
}
|
|
|
|
var jsonResult = System.Text.Json.JsonSerializer.Serialize(jsonObjects, new System.Text.Json.JsonSerializerOptions
|
|
{
|
|
WriteIndented = true,
|
|
Encoder = System.Text.Encodings.Web.JavaScriptEncoder.UnsafeRelaxedJsonEscaping
|
|
});
|
|
|
|
return new ConversionResult(true, OutputText: jsonResult);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
_logger.LogError(ex, "Erro na conversão CSV para JSON");
|
|
return new ConversionResult(false, ErrorMessage: "Erro ao converter CSV para JSON");
|
|
}
|
|
}
|
|
|
|
public override ConverterConfiguration GetConfiguration(string language)
|
|
{
|
|
var texts = GetLocalizedTexts(language);
|
|
texts["ConverterTitle"] = language switch
|
|
{
|
|
"en" => "CSV TO JSON CONVERTER",
|
|
"es" => "CONVERTIDOR CSV A JSON",
|
|
_ => "CONVERSOR CSV PARA JSON"
|
|
};
|
|
|
|
texts["ConverterDescription"] = language switch
|
|
{
|
|
"en" => "Convert CSV files to JSON format quickly and easily",
|
|
"es" => "Convierte archivos CSV a formato JSON de forma rápida y fácil",
|
|
_ => "Converta arquivos CSV para formato JSON de forma rápida e fácil"
|
|
};
|
|
|
|
texts["InputPlaceholder"] = language switch
|
|
{
|
|
"en" => "Paste your CSV content here or upload a file...",
|
|
"es" => "Pega tu contenido CSV aquí o sube un archivo...",
|
|
_ => "Cole seu conteúdo CSV aqui ou faça upload de um arquivo..."
|
|
};
|
|
|
|
texts["FileHelpText"] = language switch
|
|
{
|
|
"en" => "Max file size: 10MB. Supported formats: .csv, .txt",
|
|
"es" => "Tamaño máximo: 10MB. Formatos soportados: .csv, .txt",
|
|
_ => "Tamanho máximo: 10MB. Formatos suportados: .csv, .txt"
|
|
};
|
|
|
|
return new ConverterConfiguration
|
|
{
|
|
ConverterType = "text", // Aceita tanto texto quanto arquivo
|
|
OutputType = "text",
|
|
AcceptedFileTypes = new[] { ".csv", ".txt" },
|
|
MaxFileSize = 10 * 1024 * 1024,
|
|
HasAdvancedOptions = false,
|
|
AllowShare = true,
|
|
LocalizedTexts = texts
|
|
};
|
|
}
|
|
}
|
|
|
|
}
|