// POST api/<controller>
        public HttpResponseMessage Post([FromBody] ViewModels.Component component)
        {
            try
            {
                component.Id = _componentService.Add(component);

                return(Request.CreateResponse(HttpStatusCode.OK, component));
            }
            catch (Exception ex)
            {
                return(Request.CreateResponse(HttpStatusCode.InternalServerError, ex));
            }
        }
        // POST api/<controller>
        public HttpResponseMessage Post([FromBody] ViewModels.Component component)
        {
            try
            {
                var matchFound = _packageService.Update(component);

                return(matchFound
                    ? Request.CreateResponse(HttpStatusCode.OK, component)
                    : Request.CreateResponse(HttpStatusCode.NotFound));
            }
            catch (Exception ex)
            {
                return(Request.CreateResponse(HttpStatusCode.InternalServerError, ex));
            }
        }
        public int Add(ViewModels.Component component)
        {
            using (var db = new PackageContext())
            {
                var newComponent = new Component
                {
                    Name            = component.Name,
                    TeamCityBuildId = component.TeamCityBuildId
                };

                db.Components.Add(newComponent);

                db.SaveChanges();

                return(newComponent.Id);
            }
        }
        public bool Update(ViewModels.Component component)
        {
            using (var db = new PackageContext())
            {
                var existingComponent = db.Components.SingleOrDefault(c => c.Id == component.Id);

                if (existingComponent == null)
                {
                    return(false);
                }

                existingComponent.Name            = component.Name;
                existingComponent.TeamCityBuildId = component.TeamCityBuildId;

                db.SaveChanges();

                return(true);
            }
        }
        public bool Update(ViewModels.Component component)
        {
            using (var db = new Models.PackageContext())
            {
                if (!db.Components.Any(c => c.Id == component.Id))
                {
                    return(false);
                }

                var existingPackages =
                    db.Components.Include("Packages").Single(c => c.Id == component.Id).Packages;

                if (existingPackages != null)
                {
                    db.Packages.RemoveRange(existingPackages);
                }
                else
                {
                    db.Components.Single(c => c.Id == component.Id).Packages = new List <Models.Package>();
                }

                db.Components.Single(c => c.Id == component.Id)
                .Packages.AddRange(component.Packages.Select(p => new Models.Package
                {
                    Name            = p.Name,
                    Version         = p.Version,
                    TargetFramework = p.TargetFramework,
                    Projects        = p.Projects.Select(pr => new Models.Project
                    {
                        Name = pr.Name
                    }).ToList()
                }));

                db.SaveChanges();

                return(true);
            }
        }