public HttpResponseMessage PutProject(int id, Project project) { var db = ServicesContext.Current; logger.Info("PutProject called with id: " + id); if (!ModelState.IsValid) { return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState); } if (id != project.Id) { return Request.CreateResponse(HttpStatusCode.BadRequest); } var dbx = new ServicesContext(); //stupid that we have to do this. maybe i'm stupid and there is a better way?! //TODO (we get ObjectStateManager error if we lookup and then change a project by id) var ownerid = dbx.Projects.Where(o => o.Id == id).FirstOrDefault().OwnerId; dbx.Dispose(); //handle copying the ownerid from the existing project. project.OwnerId = ownerid; logger.Debug("PUT with owner id = " + ownerid + " for project " + project.Id); db.Entry(project).State = EntityState.Modified; try { db.SaveChanges(); } catch (DbUpdateConcurrencyException ex) { return Request.CreateErrorResponse(HttpStatusCode.NotFound, ex); } return Request.CreateResponse(HttpStatusCode.OK); }
public HttpResponseMessage PostProject(Project project) { var db = ServicesContext.Current; logger.Info("PostProject called with project id: " + project.Id); project.CreateDateTime = DateTime.Now; User me = AuthorizationManager.getCurrentUser(); project.OwnerId = me.Id; if (ModelState.IsValid) { db.Projects.Add(project); db.SaveChanges(); HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.Created, project); response.Headers.Location = new Uri(Url.Link("DefaultApi", new { id = project.Id })); return response; } else { return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState); } }