207 lines
9.1 KiB
C#
207 lines
9.1 KiB
C#
using global::OnlyOneAccessTemplate.Controllers;
|
|
using global::OnlyOneAccessTemplate.Services.OnlyOneAccessTemplate.Services;
|
|
using Microsoft.AspNetCore.Mvc;
|
|
using Microsoft.Extensions.Caching.Memory;
|
|
|
|
namespace OnlyOneAccessTemplate.Services
|
|
{
|
|
|
|
namespace OnlyOneAccessTemplate.Services
|
|
{
|
|
// Interface principal para conversores
|
|
public interface IConverterService
|
|
{
|
|
string ConverterType { get; }
|
|
string ConverterName { get; }
|
|
Task<ConversionResult> ConvertAsync(ConversionRequest request);
|
|
Task<bool> ValidateInputAsync(ConversionRequest request);
|
|
ConverterConfiguration GetConfiguration(string language);
|
|
}
|
|
|
|
// Configuração específica do conversor
|
|
public record ConverterConfiguration
|
|
{
|
|
public string ConverterType { get; init; } = "text"; // "text", "file", "url"
|
|
public string OutputType { get; init; } = "text"; // "text", "download", "preview"
|
|
public string[] AcceptedFileTypes { get; init; } = Array.Empty<string>();
|
|
public int MaxFileSize { get; init; } = 10 * 1024 * 1024; // 10MB
|
|
public bool HasAdvancedOptions { get; init; } = false;
|
|
public bool AllowShare { get; init; } = false;
|
|
public Dictionary<string, string> LocalizedTexts { get; init; } = new();
|
|
}
|
|
|
|
// Request de conversão
|
|
public record ConversionRequest(
|
|
string Language,
|
|
string InputType, // "text", "file", "url"
|
|
string? TextInput = null,
|
|
IFormFile? FileInput = null,
|
|
string? UrlInput = null,
|
|
Dictionary<string, object>? Options = null
|
|
);
|
|
|
|
// Resultado da conversão
|
|
public record ConversionResult(
|
|
bool Success,
|
|
string? OutputText = null,
|
|
byte[]? OutputFile = null,
|
|
string? OutputFileName = null,
|
|
string? OutputMimeType = null,
|
|
string? PreviewHtml = null,
|
|
string? ErrorMessage = null,
|
|
Dictionary<string, object>? Metadata = null
|
|
);
|
|
|
|
// Serviço base para conversores
|
|
public abstract class BaseConverterService : IConverterService
|
|
{
|
|
protected readonly ILogger _logger;
|
|
protected readonly IConfiguration _configuration;
|
|
|
|
public abstract string ConverterType { get; }
|
|
public abstract string ConverterName { get; }
|
|
|
|
protected BaseConverterService(ILogger logger, IConfiguration configuration)
|
|
{
|
|
_logger = logger;
|
|
_configuration = configuration;
|
|
}
|
|
|
|
public abstract Task<ConversionResult> ConvertAsync(ConversionRequest request);
|
|
|
|
public virtual async Task<bool> ValidateInputAsync(ConversionRequest request)
|
|
{
|
|
var config = GetConfiguration(request.Language);
|
|
|
|
// Validação básica baseada no tipo
|
|
switch (request.InputType)
|
|
{
|
|
case "text":
|
|
return !string.IsNullOrWhiteSpace(request.TextInput);
|
|
|
|
case "file":
|
|
if (request.FileInput == null || request.FileInput.Length == 0)
|
|
return false;
|
|
|
|
// Verificar tamanho do arquivo
|
|
if (request.FileInput.Length > config.MaxFileSize)
|
|
return false;
|
|
|
|
// Verificar tipo do arquivo se especificado
|
|
if (config.AcceptedFileTypes.Length > 0)
|
|
{
|
|
var extension = Path.GetExtension(request.FileInput.FileName);
|
|
return config.AcceptedFileTypes.Contains(extension, StringComparer.OrdinalIgnoreCase);
|
|
}
|
|
return true;
|
|
|
|
case "url":
|
|
return Uri.TryCreate(request.UrlInput, UriKind.Absolute, out _);
|
|
|
|
default:
|
|
return false;
|
|
}
|
|
}
|
|
|
|
public abstract ConverterConfiguration GetConfiguration(string language);
|
|
|
|
protected virtual Dictionary<string, string> GetLocalizedTexts(string language)
|
|
{
|
|
return language switch
|
|
{
|
|
"en" => GetEnglishTexts(),
|
|
"es" => GetSpanishTexts(),
|
|
_ => GetPortugueseTexts()
|
|
};
|
|
}
|
|
|
|
protected virtual Dictionary<string, string> GetPortugueseTexts()
|
|
{
|
|
return new Dictionary<string, string>
|
|
{
|
|
["ConverterTitle"] = "CONVERSOR ONLINE",
|
|
["ConverterDescription"] = "Converta seus arquivos de forma rápida e segura",
|
|
["Step1Title"] = "Upload",
|
|
["Step1Description"] = "Selecione ou cole seu conteúdo",
|
|
["Step2Title"] = "Configurar",
|
|
["Step2Description"] = "Escolha as opções de conversão",
|
|
["Step3Title"] = "Converter",
|
|
["Step3Description"] = "Baixe o resultado",
|
|
["InputLabel"] = "Entrada",
|
|
["OutputLabel"] = "Resultado",
|
|
["SelectFileText"] = "Selecionar Arquivo",
|
|
["ConvertButtonText"] = "Converter",
|
|
["LoadingText"] = "Processando...",
|
|
["ProcessingText"] = "Convertendo seu arquivo...",
|
|
["CopyButtonText"] = "Copiar",
|
|
["ClearButtonText"] = "Limpar",
|
|
["ShareButtonText"] = "Compartilhar",
|
|
["CopiedText"] = "Copiado!",
|
|
["DownloadButtonText"] = "Baixar",
|
|
["DownloadReadyText"] = "Seu arquivo está pronto!",
|
|
["SecurityText"] = "Seus dados estão seguros conosco",
|
|
["DefaultErrorMessage"] = "Erro ao processar. Tente novamente."
|
|
};
|
|
}
|
|
|
|
protected virtual Dictionary<string, string> GetEnglishTexts()
|
|
{
|
|
return new Dictionary<string, string>
|
|
{
|
|
["ConverterTitle"] = "ONLINE CONVERTER",
|
|
["ConverterDescription"] = "Convert your files quickly and securely",
|
|
["Step1Title"] = "Upload",
|
|
["Step1Description"] = "Select or paste your content",
|
|
["Step2Title"] = "Configure",
|
|
["Step2Description"] = "Choose conversion options",
|
|
["Step3Title"] = "Convert",
|
|
["Step3Description"] = "Download the result",
|
|
["InputLabel"] = "Input",
|
|
["OutputLabel"] = "Output",
|
|
["SelectFileText"] = "Select File",
|
|
["ConvertButtonText"] = "Convert",
|
|
["LoadingText"] = "Processing...",
|
|
["ProcessingText"] = "Converting your file...",
|
|
["CopyButtonText"] = "Copy",
|
|
["ClearButtonText"] = "Clear",
|
|
["ShareButtonText"] = "Share",
|
|
["CopiedText"] = "Copied!",
|
|
["DownloadButtonText"] = "Download",
|
|
["DownloadReadyText"] = "Your file is ready!",
|
|
["SecurityText"] = "Your data is safe with us",
|
|
["DefaultErrorMessage"] = "Processing error. Please try again."
|
|
};
|
|
}
|
|
|
|
protected virtual Dictionary<string, string> GetSpanishTexts()
|
|
{
|
|
return new Dictionary<string, string>
|
|
{
|
|
["ConverterTitle"] = "CONVERTIDOR EN LÍNEA",
|
|
["ConverterDescription"] = "Convierte tus archivos de forma rápida y segura",
|
|
["Step1Title"] = "Subir",
|
|
["Step1Description"] = "Selecciona o pega tu contenido",
|
|
["Step2Title"] = "Configurar",
|
|
["Step2Description"] = "Elige las opciones de conversión",
|
|
["Step3Title"] = "Convertir",
|
|
["Step3Description"] = "Descarga el resultado",
|
|
["InputLabel"] = "Entrada",
|
|
["OutputLabel"] = "Resultado",
|
|
["SelectFileText"] = "Seleccionar Archivo",
|
|
["ConvertButtonText"] = "Convertir",
|
|
["LoadingText"] = "Procesando...",
|
|
["ProcessingText"] = "Convirtiendo tu archivo...",
|
|
["CopyButtonText"] = "Copiar",
|
|
["ClearButtonText"] = "Limpiar",
|
|
["ShareButtonText"] = "Compartir",
|
|
["CopiedText"] = "¡Copiado!",
|
|
["DownloadButtonText"] = "Descargar",
|
|
["DownloadReadyText"] = "¡Tu archivo está listo!",
|
|
["SecurityText"] = "Tus datos están seguros con nosotros",
|
|
["DefaultErrorMessage"] = "Error al procesar. Inténtalo de nuevo."
|
|
};
|
|
}
|
|
}
|
|
}
|
|
}
|