public HttpResponseMessage Create([FromBody] CreateActivityBindingModel model)
        {
            Guard.ArgumentNotNullOrEmpty(model.Name, $"{model}.{model.Name}");
            Guard.ArgumentNotNullOrEmpty(model.Description, $"{model}.{model.Description}");
            Guard.ArgumentNotNullOrEmpty(model.Place, $"{model}.{model.Place}");
            Guard.ArgumentNotNullOrEmpty(model.StartTime, $"{model}.{model.StartTime}");
            Guard.ArgumentNotNullOrEmpty(model.EndTime, $"{model}.{model.EndTime}");
            Guard.ArgumentNotNullOrEmpty(model.Classfication, $"{model}.{model.Classfication}");

            var activity = new Activity
            {
                CreatorId      = this.User.Identity.GetUserId(),
                Name           = model.Name,
                Description    = model.Description,
                PublishTime    = DateTime.Now,
                Classficiation =
                    EnumUtils.Parse <ActivityClassficiation>(model.Classfication ??
                                                             ActivityClassficiation.Other.ToString()),
                Place     = model.Place,
                StartTime = DateTime.Parse(model.StartTime),
                EndTime   = DateTime.Parse(model.EndTime),
                IsDisplay = model.IsDisplay,
                Organizer = model.Organizer
            };

            this.Data.Activity.Add(activity);
            this.Data.SaveChanges();

            return(Request.CreateResponse(HttpStatusCode.OK, activity));
        }
        public ActionResult Create(CreateActivityBindingModel model)
        {
            try
            {
                var activity = new Activity
                {
                    CreatorId      = this.User.Identity.GetUserId(),
                    Name           = model.Name,
                    Description    = model.Description,
                    PublishTime    = DateTime.Now,
                    Classficiation = EnumUtils.Parse <ActivityClassficiation>(model.Classfication ?? ActivityClassficiation.Other.ToString()),
                    Place          = model.Place,
                    StartTime      = DateTime.Now,
                    EndTime        = DateTime.Now
                };

                this.Data.Activity.Add(activity);
                this.Data.SaveChanges();

                return(RedirectToAction("Index"));
            }
            catch
            {
                return(View());
            }
        }
        public HttpResponseMessage Update([FromUri] int activityId, [FromBody] CreateActivityBindingModel model)
        {
            Guard.ArgumentNotNull(activityId, nameof(activityId));
            Guard.ArgumentNotNullOrEmpty(model.Name, $"{model}.{model.Name}");
            Guard.ArgumentNotNullOrEmpty(model.Description, $"{model}.{model.Description}");
            Guard.ArgumentNotNullOrEmpty(model.Place, $"{model}.{model.Place}");
            Guard.ArgumentNotNullOrEmpty(model.StartTime, $"{model}.{model.StartTime}");
            Guard.ArgumentNotNullOrEmpty(model.EndTime, $"{model}.{model.EndTime}");
            Guard.ArgumentNotNullOrEmpty(model.Classfication, $"{model}.{model.Classfication}");

            var activity = Data.Activity
                           .All()
                           .FirstOrDefault(t => t.Id == activityId);

            if (activity == null)
            {
                return(Request.CreateResponse(HttpStatusCode.NotFound, $"Cannot find activity for activity ID {activityId}"));
            }

            // Check ownership
            if (activity.CreatorId != this.User.Identity.GetUserId())
            {
                return(Request.CreateErrorResponse(HttpStatusCode.Forbidden, $"Only creator {activity.CreatorId} can update the activity"));
            }

            activity.Name           = model.Name;
            activity.Description    = model.Description;
            activity.Place          = model.Place;
            activity.Classficiation = EnumUtils.Parse <ActivityClassficiation>(model.Classfication);
            activity.StartTime      = DateTime.Parse(model.StartTime);
            activity.EndTime        = DateTime.Parse(model.EndTime);
            activity.IsDisplay      = model.IsDisplay;
            activity.Organizer      = model.Organizer;

            this.Data.Activity.Update(activity);
            this.Data.SaveChanges();

            return(Request.CreateResponse(HttpStatusCode.OK, activity.ToActivityViewModel()));
        }