public ActionResult Create(EventRest @event)
        {
            using (var db = DbFactory.Open())
            {
                JsonResult nameAssertResult;
                if (!AssertNameUnique(@event, db, out nameAssertResult))
                {
                    return nameAssertResult;
                }

                var dlEvent = EventFromRest(@event, db);
                db.Session.Save(dlEvent);
                db.Commit();

                var response = new EventRest(dlEvent);
                Logger.I("Created event {0}", response.ToJson());
                return Json(response);
            }
        }
        public ActionResult Update(EventRest @event)
        {
            if ([email protected])
            {
                Logger.I("Attempt to update transaction without id");
                Response.StatusCode = 400;
                return Json(new {Field = "Id", Message = "Missing Id"});
            }

            using (var db = DbFactory.Open())
            {
                JsonResult nameAssertResult;
                if (!AssertNameUnique(@event, db, out nameAssertResult))
                {
                    return nameAssertResult;
                }

                var dlEvent = EventFromRest(@event, db);
                db.Session.Update(dlEvent);
                db.Commit();

                var response = new EventRest(dlEvent);
                Logger.I("Updated event {0}", response.ToJson());
                return Json(response);
            }
        }
 private Event EventFromRest(EventRest source, Db db)
 {
     var target = new Event();
     if (source.Id.HasValue)
     {
         target.Id = source.Id.Value;
     }
     target.Name = source.Name;
     target.StartDate = JsonDate.Parse(source.StartDate);
     target.Description = source.Description ?? "";
     target.Bros.AddRange(source.Bros.Load<Bro>(db));
     return target;
 }
        private bool AssertNameUnique(EventRest @event, Db db, out JsonResult result)
        {
            result = null;
            bool conflict = @event.Id.HasValue
                ? db.Query<Event>().Any(e => e.Id != @event.Id.Value && e.Name == @event.Name)
                : db.Query<Event>().Any(e => e.Name == @event.Name);
            if (!conflict) return true;

            Logger.E("Attempt to create duplicate event {0}", @event.Name);
            result = Json(new {Field = "Name", Message = "Event with name {0} already exists.".F(@event.Name)});
            Response.StatusCode = 400;
            return false;
        }