GiantsTools/Giants.WebApi/Controllers/VersionController.cs

62 lines
2.0 KiB
C#

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<DataContract.V1.VersionInfo> 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<DataContract.V1.VersionInfo>(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);
}
}
}