using AutoMapper; using Giants.DataContract.Contracts.V1; using Giants.Services; using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Mvc; using Microsoft.Identity.Web.Resource; using System; using System.Threading.Tasks; namespace Giants.WebApi.Controllers { [ApiController] [ApiVersion("1.0")] [ApiVersion("1.1")] [Route("api/[controller]")] public class VersionController : ControllerBase { private readonly IMapper mapper; private readonly IVersioningService versioningService; private const string VersionWriteScope = "App.Write"; public VersionController( IMapper mapper, IVersioningService versioningService) { this.mapper = mapper; this.versioningService = versioningService; } [HttpGet] public async Task GetVersionInfo(string appName, string branchName) { ArgumentUtility.CheckStringForNullOrEmpty(appName); VersionInfo versionInfo = await this.versioningService.GetVersionInfo(appName, branchName); if (versionInfo == null) { throw new ArgumentException($"No version information for {appName} ({branchName}) found.", appName); } return this.mapper.Map(versionInfo); } [Authorize] [RequiredScopeOrAppPermission( AcceptedAppPermission = new[] { VersionWriteScope }) ] [HttpPost] public async Task UpdateVersionInfo([FromBody] VersionInfoUpdate versionInfoUpdate) { ArgumentUtility.CheckForNull(versionInfoUpdate); await this.versioningService.UpdateVersionInfo( appName: versionInfoUpdate.AppName, appVersion: versionInfoUpdate.AppVersion, fileName: versionInfoUpdate.FileName, branchName: versionInfoUpdate.BranchName, force: versionInfoUpdate.ForceUpdate); } } }