// POST api/<controller>
        //
        // Create a new event.  Json eventInfo is passed in through the body of the POST
        //
        public HttpResponseMessage Post([FromBody] JsonEvent eventInfo)
        {
            // Make sure the request is valid
            //
            if (string.IsNullOrEmpty(UserId))
            {
                return(Request.CreateErrorResponse(HttpStatusCode.Unauthorized, "Not Authorized"));
            }

            if (eventInfo == null)
            {
                return(Request.CreateErrorResponse(HttpStatusCode.NotAcceptable, "Invalid Event Information"));
            }

            // Create new Model Event
            //
            RaceDayAPI.Models.Event iEvent = eventInfo.ToDatabase();
            iEvent.GroupId   = GroupId;
            iEvent.CreatorId = UserId;

            // Add to the database and then add this user as a participant
            //
            Repository repository = new Repository();
            Event      newEvent   = repository.AddEvent(iEvent);

            repository.SaveChanges();

            if ((newEvent != null) && (newEvent.EventId > 0))
            {
                var user = repository.GetUserById(UserId);
                repository.AddUserToEvent(user, newEvent, AttendingEnum.Attending);
                repository.SaveChanges();

                var addedEvent     = repository.GetEventViewById(newEvent.EventId, UserId);
                var eventAttendees = repository.GetUsersForEvent(newEvent.EventId);

                // Send an email notification
                //
                var smtp    = new SmtpClient();         // Settings in config file
                var message = new MailMessage("*****@*****.**", ConfigurationManager.AppSettings["AdminEmail"]);
                message.Subject    = "JYMF RaceDay New Event";
                message.IsBodyHtml = true;
                message.Body       = File.ReadAllText(HttpContext.Current.Server.MapPath("~/App_Data/NewEvent.txt"));
                message.Body       = message.Body.Replace("@NAME@", newEvent.Name)
                                     .Replace("@DATE@", newEvent.Date.ToShortDateString())
                                     .Replace("@URL@", newEvent.Url)
                                     .Replace("@LOCATION@", newEvent.Location)
                                     .Replace("@DESCRIPTION@", newEvent.Description)
                                     .Replace("@MFUSER@", this.UserId);

                smtp.Send(message);
                return(Request.CreateResponse(HttpStatusCode.Created, new { eventinfo = addedEvent, attendees = JsonUser.FromDatabase(eventAttendees) }));
            }

            return(Request.CreateResponse(HttpStatusCode.NotAcceptable, "Unable to create event"));
        }
 public static JsonEvent FromDatabase(RaceDayAPI.Models.Event iEvent)
 {
     return(new JsonEvent
     {
         EventId = iEvent.EventId,
         Name = iEvent.Name,
         Date = iEvent.Date,
         Url = iEvent.Url,
         Location = iEvent.Location,
         Description = iEvent.Description,
         CreatorId = iEvent.CreatorId,
     });
 }
        public RaceDayAPI.Models.Event ToDatabase()
        {
            RaceDayAPI.Models.Event iEvent = new RaceDayAPI.Models.Event
            {
                EventId     = EventId,
                Name        = Name,
                Date        = Date,
                Url         = Url,
                Location    = Location,
                Description = Description,
                CreatorId   = CreatorId
            };

            return(iEvent);
        }