From 5230bddc03b7227151a2c550f364e2b64a7cb40e Mon Sep 17 00:00:00 2001 From: Michal Vrba Date: Thu, 11 Dec 2025 14:11:46 +0100 Subject: [PATCH] Replace weather example with shared YouTube models Removed WeatherForecast API and model. Added TuneRipper.Shared project with shared configuration and YouTube processing models. Updated solution and project references to enable code sharing between API and client. Explicitly included Controllers folder in API project. --- .../Controllers/WeatherForecastController.cs | 26 ------------------- TuneRipper.Api/TuneRipper.Api.csproj | 8 ++++++ TuneRipper.Api/WeatherForecast.cs | 13 ---------- .../Configuration/ApiSettings.cs | 11 ++++++++ .../Models/ProcessVideoModels.cs | 24 +++++++++++++++++ .../Models/YouTubeVideoDetails.cs | 14 ++++++++++ TuneRipper.Shared/TuneRipper.Shared.csproj | 9 +++++++ TuneRipper.slnx | 1 + TuneRipper/TuneRipper.csproj | 4 +++ 9 files changed, 71 insertions(+), 39 deletions(-) delete mode 100644 TuneRipper.Api/Controllers/WeatherForecastController.cs delete mode 100644 TuneRipper.Api/WeatherForecast.cs create mode 100644 TuneRipper.Shared/Configuration/ApiSettings.cs create mode 100644 TuneRipper.Shared/Models/ProcessVideoModels.cs create mode 100644 TuneRipper.Shared/Models/YouTubeVideoDetails.cs create mode 100644 TuneRipper.Shared/TuneRipper.Shared.csproj diff --git a/TuneRipper.Api/Controllers/WeatherForecastController.cs b/TuneRipper.Api/Controllers/WeatherForecastController.cs deleted file mode 100644 index bf88415..0000000 --- a/TuneRipper.Api/Controllers/WeatherForecastController.cs +++ /dev/null @@ -1,26 +0,0 @@ -using Microsoft.AspNetCore.Mvc; - -namespace TuneRipper.Api.Controllers -{ - [ApiController] - [Route("[controller]")] - public class WeatherForecastController : ControllerBase - { - private static readonly string[] Summaries = - [ - "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching" - ]; - - [HttpGet(Name = "GetWeatherForecast")] - public IEnumerable Get() - { - return Enumerable.Range(1, 5).Select(index => new WeatherForecast - { - Date = DateOnly.FromDateTime(DateTime.Now.AddDays(index)), - TemperatureC = Random.Shared.Next(-20, 55), - Summary = Summaries[Random.Shared.Next(Summaries.Length)] - }) - .ToArray(); - } - } -} diff --git a/TuneRipper.Api/TuneRipper.Api.csproj b/TuneRipper.Api/TuneRipper.Api.csproj index 52dd1c3..1e9d092 100644 --- a/TuneRipper.Api/TuneRipper.Api.csproj +++ b/TuneRipper.Api/TuneRipper.Api.csproj @@ -10,4 +10,12 @@ + + + + + + + + diff --git a/TuneRipper.Api/WeatherForecast.cs b/TuneRipper.Api/WeatherForecast.cs deleted file mode 100644 index d3b4092..0000000 --- a/TuneRipper.Api/WeatherForecast.cs +++ /dev/null @@ -1,13 +0,0 @@ -namespace TuneRipper.Api -{ - public class WeatherForecast - { - public DateOnly Date { get; set; } - - public int TemperatureC { get; set; } - - public int TemperatureF => 32 + (int)(TemperatureC / 0.5556); - - public string? Summary { get; set; } - } -} diff --git a/TuneRipper.Shared/Configuration/ApiSettings.cs b/TuneRipper.Shared/Configuration/ApiSettings.cs new file mode 100644 index 0000000..c0b8bc8 --- /dev/null +++ b/TuneRipper.Shared/Configuration/ApiSettings.cs @@ -0,0 +1,11 @@ +namespace TuneRipper.Shared.Configuration; + +public class ApiSettings +{ + public const string SectionName = "ApiSettings"; + + public string? BaseUrl { get; set; } + public string? ApiKey { get; set; } + public int TimeoutSeconds { get; set; } = 30; + public bool EnableLogging { get; set; } = true; +} \ No newline at end of file diff --git a/TuneRipper.Shared/Models/ProcessVideoModels.cs b/TuneRipper.Shared/Models/ProcessVideoModels.cs new file mode 100644 index 0000000..034e9c8 --- /dev/null +++ b/TuneRipper.Shared/Models/ProcessVideoModels.cs @@ -0,0 +1,24 @@ +namespace TuneRipper.Shared.Models; + +public class ProcessVideoRequest +{ + public string? Url { get; set; } + public string? Format { get; set; } = "mp3"; + public string? Quality { get; set; } = "128"; +} + +public class ProcessVideoResponse +{ + public bool Success { get; set; } + public string? Message { get; set; } + public string? FileName { get; set; } + public string? DownloadUrl { get; set; } + public YouTubeVideoDetails? VideoDetails { get; set; } +} + +public class DownloadProgress +{ + public int PercentageComplete { get; set; } + public string? Status { get; set; } + public string? Message { get; set; } +} \ No newline at end of file diff --git a/TuneRipper.Shared/Models/YouTubeVideoDetails.cs b/TuneRipper.Shared/Models/YouTubeVideoDetails.cs new file mode 100644 index 0000000..35969b2 --- /dev/null +++ b/TuneRipper.Shared/Models/YouTubeVideoDetails.cs @@ -0,0 +1,14 @@ +namespace TuneRipper.Shared.Models; + +public class YouTubeVideoDetails +{ + public string? Id { get; set; } + public string? Title { get; set; } + public string? Description { get; set; } + public string? ThumbnailUrl { get; set; } + public TimeSpan Duration { get; set; } + public string? Author { get; set; } + public int ViewCount { get; set; } + public DateTime UploadDate { get; set; } + public List Tags { get; set; } = new(); +} \ No newline at end of file diff --git a/TuneRipper.Shared/TuneRipper.Shared.csproj b/TuneRipper.Shared/TuneRipper.Shared.csproj new file mode 100644 index 0000000..b760144 --- /dev/null +++ b/TuneRipper.Shared/TuneRipper.Shared.csproj @@ -0,0 +1,9 @@ + + + + net10.0 + enable + enable + + + diff --git a/TuneRipper.slnx b/TuneRipper.slnx index a1e3df2..1deb668 100644 --- a/TuneRipper.slnx +++ b/TuneRipper.slnx @@ -1,4 +1,5 @@ + diff --git a/TuneRipper/TuneRipper.csproj b/TuneRipper/TuneRipper.csproj index 84b8458..f2dca46 100644 --- a/TuneRipper/TuneRipper.csproj +++ b/TuneRipper/TuneRipper.csproj @@ -12,4 +12,8 @@ + + + +