public async Task<IActionResult> CopyReleaseBatch([FromRoute] string idOrName, [FromBody] string copyName) { if (!ModelState.IsValid) { return HttpBadRequest(ModelState); } var releaseBatch = await GetReleaseBatch(idOrName, true, true); if (releaseBatch == null) { return HttpNotFound(); } var copyReleaseBatch = new ReleaseBatch(); copyReleaseBatch.Name = copyName; copyReleaseBatch.Description = releaseBatch.Description; if (releaseBatch.Logo != null) { copyReleaseBatch.Logo = new ReleaseBatchLogo(); copyReleaseBatch.Logo.Content = releaseBatch.Logo.Content; copyReleaseBatch.Logo.ContentType = releaseBatch.Logo.ContentType; } if (releaseBatch.Items != null) { copyReleaseBatch.Items = new List<ReleaseBatchItem>(); foreach (var item in releaseBatch.Items) { var copyItem = new ReleaseBatchItem(); copyItem.ProjectId = item.ProjectId; copyItem.ProjectName = item.ProjectName; copyItem.ProjectSlug = item.ProjectSlug; copyItem.ReleaseId = item.ReleaseId; copyItem.ReleaseVersion = item.ReleaseVersion; copyReleaseBatch.Items.Add(copyItem); } } copyReleaseBatch.UpdateDateTime = DateTimeOffset.Now; copyReleaseBatch.UpdateUserName = User.Identity.Name; _context.ReleaseBatches.Add(copyReleaseBatch); await _context.SaveChangesAsync(); return CreatedAtRoute("GetReleaseBatch", new { idOrName = copyReleaseBatch.Id }, copyReleaseBatch); }
public async Task<IActionResult> LinkProject([FromRoute] string idOrName, [FromBody] LinkProjectRequestBody requestBody) { if (!ModelState.IsValid) { return HttpBadRequest(ModelState); } var releaseBatch = await GetReleaseBatch(idOrName, false, false); if (releaseBatch == null) { return HttpNotFound(); } if (releaseBatch.IsLocked) { return GetLockedForbiddenUpdateResult(releaseBatch); } var projectResource = _octopusProxy.GetProject(requestBody.ProjectIdOrSlugOrName); if (projectResource == null) { return HttpBadRequest("Project Not Found"); } ReleaseResource releaseResource = null; if (requestBody.ReleaseVersion != null) { releaseResource = _octopusProxy.GetRelease(projectResource.Id, requestBody.ReleaseVersion); if (releaseResource == null) { return HttpBadRequest("Release Not Found"); } } var releaseBatchItem = await _context.ReleaseBatchItems.SingleOrDefaultAsync(e => e.ReleaseBatchId == releaseBatch.Id && e.ProjectId == projectResource.Id); if (releaseBatchItem == null) { releaseBatchItem = new ReleaseBatchItem { ReleaseBatchId = releaseBatch.Id, ProjectId = projectResource.Id }; _context.ReleaseBatchItems.Add(releaseBatchItem); } releaseBatchItem.ProjectName = projectResource.Name; releaseBatchItem.ProjectSlug = projectResource.Slug; if (releaseResource != null) { releaseBatchItem.ReleaseId = releaseResource.Id; releaseBatchItem.ReleaseVersion = releaseResource.Version; } releaseBatch.UpdateDateTime = DateTimeOffset.Now; releaseBatch.UpdateUserName = User.Identity.Name; await _context.SaveChangesAsync(); return new HttpStatusCodeResult(StatusCodes.Status204NoContent); }
public async Task<IActionResult> LinkProjectToReleaseBatch([FromRoute] int id, [FromBody] string projectIdOrSlugOrName) { if (!ModelState.IsValid) { return HttpBadRequest(ModelState); } var projectResource = _octopusProxy.GetProject(projectIdOrSlugOrName); if (projectResource == null) { return HttpBadRequest("Project Not Found"); } var releaseBatchItem = new ReleaseBatchItem { ReleaseBatchId = id, ProjectId = projectResource.Id, ProjectName = projectResource.Name }; _context.ReleaseBatchItems.Add(releaseBatchItem); try { await _context.SaveChangesAsync(); } catch (DbUpdateConcurrencyException) { if (!ReleaseBatchExists(id)) { return HttpNotFound(); } else { throw; } //TODO: check for existence and throw bad request } return new HttpStatusCodeResult(StatusCodes.Status204NoContent); }