Improve API base URL handling for downloads and logging
Refactored API and Blazor client to dynamically construct download URLs using the configured API base URL instead of hardcoded localhost addresses. Enhanced root endpoint and startup logs to reflect environment-specific URLs. Added GetBaseUrl() to ITuneRipperApiService for consistent URL generation.
This commit is contained in:
+70
-50
@@ -1,4 +1,4 @@
|
||||
using TuneRipper.Api.Services;
|
||||
using TuneRipper.Api.Services;
|
||||
|
||||
var builder = WebApplication.CreateBuilder(args);
|
||||
|
||||
@@ -45,60 +45,80 @@ app.UseCors("BlazorPolicy");
|
||||
app.UseAuthorization();
|
||||
|
||||
// Add root endpoint with startup info
|
||||
app.MapGet("/", (IWebHostEnvironment env) => new
|
||||
app.MapGet("/", (IWebHostEnvironment env, HttpContext context) =>
|
||||
{
|
||||
service = "TuneRipper API",
|
||||
version = "1.0.0",
|
||||
status = "running",
|
||||
timestamp = DateTime.UtcNow,
|
||||
environment = env.EnvironmentName,
|
||||
urls = new
|
||||
// Get the current request's base URL
|
||||
var request = context.Request;
|
||||
var baseUrl = $"{request.Scheme}://{request.Host}";
|
||||
|
||||
// Determine URLs based on environment
|
||||
var httpsUrl = app.Environment.IsDevelopment()
|
||||
? "https://localhost:7160"
|
||||
: baseUrl;
|
||||
|
||||
var httpUrl = app.Environment.IsDevelopment()
|
||||
? "http://localhost:5112"
|
||||
: baseUrl.Replace("https://", "http://");
|
||||
|
||||
return new
|
||||
{
|
||||
https = "https://localhost:7160",
|
||||
http = "http://localhost:5112"
|
||||
},
|
||||
endpoints = new
|
||||
{
|
||||
health = "/api/health",
|
||||
video_details = "/api/video/details?url={youtubeUrl}",
|
||||
process_video = "/api/video/process",
|
||||
check_status = "/api/video/status/{jobId}",
|
||||
get_result = "/api/video/result/{jobId}",
|
||||
download = "/api/download/{jobId}",
|
||||
download_by_session = "/api/download/{sessionId}/{jobId}",
|
||||
download_session_zip = "/api/download/zip/{sessionId}",
|
||||
session_zip_info = "/api/download/zip/info/{sessionId}",
|
||||
session_create = "/api/session/create",
|
||||
session_validate = "/api/session/validate/{sessionId}",
|
||||
static_files = "/downloads/{fileName}",
|
||||
openapi = "/openapi/v1.json"
|
||||
},
|
||||
features = new
|
||||
{
|
||||
session_management = true,
|
||||
automatic_zip_creation = true,
|
||||
session_based_organization = true,
|
||||
backward_compatibility = true
|
||||
},
|
||||
testing = new
|
||||
{
|
||||
httpFile = "Use api-tests.http to test endpoints",
|
||||
startWith = "GET /api/health to verify API is running"
|
||||
}
|
||||
service = "TuneRipper API",
|
||||
version = "1.0.0",
|
||||
status = "running",
|
||||
timestamp = DateTime.UtcNow,
|
||||
environment = env.EnvironmentName,
|
||||
urls = new
|
||||
{
|
||||
https = httpsUrl,
|
||||
http = httpUrl
|
||||
},
|
||||
endpoints = new
|
||||
{
|
||||
health = "/api/health",
|
||||
video_details = "/api/video/details?url={youtubeUrl}",
|
||||
process_video = "/api/video/process",
|
||||
check_status = "/api/video/status/{jobId}",
|
||||
get_result = "/api/video/result/{jobId}",
|
||||
download = "/api/download/{jobId}",
|
||||
download_by_session = "/api/download/{sessionId}/{jobId}",
|
||||
download_session_zip = "/api/download/zip/{sessionId}",
|
||||
session_zip_info = "/api/download/zip/info/{sessionId}",
|
||||
session_create = "/api/session/create",
|
||||
session_validate = "/api/session/validate/{sessionId}",
|
||||
static_files = "/downloads/{fileName}",
|
||||
openapi = "/openapi/v1.json"
|
||||
},
|
||||
features = new
|
||||
{
|
||||
session_management = true,
|
||||
automatic_zip_creation = true,
|
||||
session_based_organization = true,
|
||||
backward_compatibility = true
|
||||
},
|
||||
testing = new
|
||||
{
|
||||
httpFile = "Use api-tests.http to test endpoints",
|
||||
startWith = "GET /api/health to verify API is running"
|
||||
}
|
||||
};
|
||||
});
|
||||
|
||||
app.MapControllers();
|
||||
|
||||
// Log startup information
|
||||
app.Logger.LogInformation("?? TuneRipper API is starting...");
|
||||
app.Logger.LogInformation("?? Environment: {Environment}", app.Environment.EnvironmentName);
|
||||
app.Logger.LogInformation("?? API will be available at:");
|
||||
app.Logger.LogInformation(" ?? HTTPS: https://localhost:7160");
|
||||
app.Logger.LogInformation(" ?? HTTP: http://localhost:5112");
|
||||
app.Logger.LogInformation("?? Health check: /api/health");
|
||||
app.Logger.LogInformation("?? API info: /");
|
||||
app.Logger.LogInformation("?? Static files served from: /downloads/*");
|
||||
app.Logger.LogInformation("?? Session-based downloads supported");
|
||||
app.Logger.LogInformation("?? Automatic ZIP file creation enabled");
|
||||
// Log startup information with dynamic URLs
|
||||
var isDevelopment = app.Environment.IsDevelopment();
|
||||
var httpsLogUrl = isDevelopment ? "https://localhost:7160" : "[Production HTTPS URL]";
|
||||
var httpLogUrl = isDevelopment ? "http://localhost:5112" : "[Production HTTP URL]";
|
||||
|
||||
app.Logger.LogInformation("🚀 TuneRipper API is starting...");
|
||||
app.Logger.LogInformation("🌍 Environment: {Environment}", app.Environment.EnvironmentName);
|
||||
app.Logger.LogInformation("🌐 API will be available at:");
|
||||
app.Logger.LogInformation(" 🔒 HTTPS: {HttpsUrl}", httpsLogUrl);
|
||||
app.Logger.LogInformation(" 🔓 HTTP: {HttpUrl}", httpLogUrl);
|
||||
app.Logger.LogInformation("❤️ Health check: /api/health");
|
||||
app.Logger.LogInformation("ℹ️ API info: /");
|
||||
app.Logger.LogInformation("📁 Static files served from: /downloads/*");
|
||||
app.Logger.LogInformation("🔗 Session-based downloads supported");
|
||||
app.Logger.LogInformation("📦 Automatic ZIP file creation enabled");
|
||||
|
||||
app.Run();
|
||||
|
||||
Reference in New Issue
Block a user