Exemplo n.º 1
0
        public async Task <IActionResult> CopyReleaseBatch([FromRoute] string idOrName, [FromBody] string copyName)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var releaseBatch = await GetReleaseBatch(idOrName, true, true);

            if (releaseBatch == null)
            {
                return(NotFound());
            }

            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));
        }
Exemplo n.º 2
0
        public async Task <IActionResult> LinkProject([FromRoute] string idOrName, [FromBody] LinkProjectRequestBody requestBody)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            var releaseBatch = await GetReleaseBatch(idOrName, false, false);

            if (releaseBatch == null)
            {
                return(NotFound());
            }

            if (releaseBatch.IsLocked)
            {
                return(GetLockedForbiddenUpdateResult(releaseBatch));
            }

            var projectResource = await _octopusProxy.GetProjectAsync(requestBody.ProjectIdOrSlugOrName);

            if (projectResource == null)
            {
                return(BadRequest("Project Not Found"));
            }

            ReleaseResource releaseResource = null;

            if (requestBody.ReleaseVersion != null)
            {
                releaseResource = await _octopusProxy.GetReleaseAsync(projectResource.Id, requestBody.ReleaseVersion);

                if (releaseResource == null)
                {
                    return(BadRequest("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 NoContentResult());
        }