From 7959ecd3519a00ce7fabbbe7b8f478266d339328 Mon Sep 17 00:00:00 2001 From: Allen Date: Thu, 31 Aug 2023 10:56:49 +0800 Subject: [PATCH] Add v3-flatcontainer as in api.nuget.com. Merge PR: https://github.com/loic-sharma/BaGet/pull/752 --- src/BaGet.Web/BaGetEndpointBuilder.cs | 9 +++++ .../Controllers/VersionsController.cs | 34 +++++++++++++++++++ src/BaGet.Web/Dtos/VersionsDto.cs | 9 +++++ 3 files changed, 52 insertions(+) create mode 100644 src/BaGet.Web/Controllers/VersionsController.cs create mode 100644 src/BaGet.Web/Dtos/VersionsDto.cs diff --git a/src/BaGet.Web/BaGetEndpointBuilder.cs b/src/BaGet.Web/BaGetEndpointBuilder.cs index 78b5c1a40..83c972d69 100644 --- a/src/BaGet.Web/BaGetEndpointBuilder.cs +++ b/src/BaGet.Web/BaGetEndpointBuilder.cs @@ -12,6 +12,7 @@ public void MapEndpoints(IEndpointRouteBuilder endpoints) MapSearchRoutes(endpoints); MapPackageMetadataRoutes(endpoints); MapPackageContentRoutes(endpoints); + MapPackageVersionRoutes(endpoints); } public void MapServiceIndexRoutes(IEndpointRouteBuilder endpoints) @@ -121,4 +122,12 @@ public void MapPackageContentRoutes(IEndpointRouteBuilder endpoints) pattern: "v3/package/{id}/{version}/icon", defaults: new { controller = "PackageContent", action = "DownloadIcon" }); } + + public void MapPackageVersionRoutes(IEndpointRouteBuilder endpoints) + { + endpoints.MapControllerRoute( + name: Routes.PackageVersionsRouteName, + pattern: "v3-flatcontainer/{packageId}/index.json", + defaults: new { controller = "VersionsController", action = "GetVersionsForPackage" }); + } } diff --git a/src/BaGet.Web/Controllers/VersionsController.cs b/src/BaGet.Web/Controllers/VersionsController.cs new file mode 100644 index 000000000..b3930dcba --- /dev/null +++ b/src/BaGet.Web/Controllers/VersionsController.cs @@ -0,0 +1,34 @@ +using BaGet.Core; +using BaGet.Web.Dtos; +using Microsoft.AspNetCore.Mvc; +using System.Collections.Generic; +using System.Threading.Tasks; +using System; +using System.Linq; + +namespace BaGet.Web.Controllers +{ + [Route("v3-flatcontainer/{packageId}/index.json")] + [ApiController] + public class VersionsController : ControllerBase + { + private readonly IPackageDatabase _packageDatabase; + public VersionsController(IPackageDatabase packageDatabase) + { + _packageDatabase = packageDatabase; + } + + [HttpGet] + public async Task>> GetVersionsForPackage(string packageId) + { + Console.WriteLine($"--> Getting versions for package {packageId} from Automaise nuget"); + var exists = await _packageDatabase.ExistsAsync(packageId, new System.Threading.CancellationToken()); + if (!exists) + return NotFound(); + var retVersions = await _packageDatabase.FindAsync(packageId, true, new System.Threading.CancellationToken()); + var versionDto = new VersionDto(); + versionDto.versions = retVersions.Select(x => x.Version.ToString()).ToList(); + return Ok(versionDto); + } + } +} diff --git a/src/BaGet.Web/Dtos/VersionsDto.cs b/src/BaGet.Web/Dtos/VersionsDto.cs new file mode 100644 index 000000000..ec9ab3036 --- /dev/null +++ b/src/BaGet.Web/Dtos/VersionsDto.cs @@ -0,0 +1,9 @@ +using System.Collections.Generic; + +namespace BaGet.Web.Dtos +{ + public class VersionDto + { + public List versions { get; set; } = new List(); + } +}