コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }