private JsonDinner JsonDinnerFromDinner(Dinner dinner) { return new JsonDinner { DinnerID = dinner.DinnerID, EventDate = dinner.EventDate, Latitude = dinner.Latitude, Longitude = dinner.Longitude, Title = dinner.Title, Description = dinner.Description, RSVPCount = dinner.RSVPs.Count, //TODO: Need to mock this out for testing... //Url = Url.RouteUrl("PrettyDetails", new { Id = dinner.DinnerID } ) Url = dinner.DinnerID.ToString() }; }
public DinnerModuleAuth(IDocumentSession documentSession) : base("/dinners") { this.RequiresAuthentication(); Get["/create"] = parameters => { Dinner dinner = new Dinner() { EventDate = DateTime.Now.AddDays(7) }; base.Page.Title = "Host a Nerd Dinner"; base.Model.Dinner = dinner; return View["Create", base.Model]; }; Post["/create"] = parameters => { var dinner = this.Bind<Dinner>(); var result = this.Validate(dinner); if (result.IsValid) { UserIdentity nerd = (UserIdentity)this.Context.CurrentUser; dinner.HostedById = nerd.UserName; dinner.HostedBy = nerd.FriendlyName; RSVP rsvp = new RSVP(); rsvp.AttendeeNameId = nerd.UserName; rsvp.AttendeeName = nerd.FriendlyName; dinner.RSVPs = new List<RSVP>(); dinner.RSVPs.Add(rsvp); documentSession.Store(dinner); documentSession.SaveChanges(); return this.Response.AsRedirect("/dinners/" + dinner.DinnerID); } else { base.Page.Title = "Host a Nerd Dinner"; base.Model.Dinner = dinner; foreach (var item in result.Errors) { foreach (var member in item.MemberNames) { base.Page.Errors.Add(new ErrorModel() { Name = member, ErrorMessage = item.GetMessage(member) }); } } } return View["Create", base.Model]; }; Get["/delete/" + Route.AnyIntAtLeastOnce("id")] = parameters => { Dinner dinner = documentSession.Load<Dinner>((int)parameters.id); if (dinner == null) { base.Page.Title = "Nerd Dinner Not Found"; return View["NotFound", base.Model]; } if (!dinner.IsHostedBy(this.Context.CurrentUser.UserName)) { base.Page.Title = "You Don't Own This Dinner"; return View["InvalidOwner", base.Model]; } base.Page.Title = "Delete Confirmation: " + dinner.Title; base.Model.Dinner = dinner; return View["Delete", base.Model]; }; Post["/delete/" + Route.AnyIntAtLeastOnce("id")] = parameters => { Dinner dinner = documentSession.Load<Dinner>((int)parameters.id); if (dinner == null) { base.Page.Title = "Nerd Dinner Not Found"; return View["NotFound", base.Model]; } if (!dinner.IsHostedBy(this.Context.CurrentUser.UserName)) { base.Page.Title = "You Don't Own This Dinner"; return View["InvalidOwner", base.Model]; } documentSession.Delete(dinner); documentSession.SaveChanges(); base.Page.Title = "Deleted"; return View["Deleted", base.Model]; }; Get["/edit" + Route.And() + Route.AnyIntAtLeastOnce("id")] = parameters => { Dinner dinner = documentSession.Load<Dinner>((int)parameters.id); if (dinner == null) { base.Page.Title = "Nerd Dinner Not Found"; return View["NotFound", base.Model]; } if (!dinner.IsHostedBy(this.Context.CurrentUser.UserName)) { base.Page.Title = "You Don't Own This Dinner"; return View["InvalidOwner", base.Model]; } base.Page.Title = "Edit: " + dinner.Title; base.Model.Dinner = dinner; return View["Edit", base.Model]; }; Post["/edit" + Route.And() + Route.AnyIntAtLeastOnce("id")] = parameters => { Dinner dinner = documentSession.Load<Dinner>((int)parameters.id); if (!dinner.IsHostedBy(this.Context.CurrentUser.UserName)) { base.Page.Title = "You Don't Own This Dinner"; return View["InvalidOwner", base.Model]; } this.BindTo(dinner); var result = this.Validate(dinner); if (!result.IsValid) { base.Page.Title = "Edit: " + dinner.Title; base.Model.Dinner = dinner; foreach (var item in result.Errors) { foreach (var member in item.MemberNames) { base.Page.Errors.Add(new ErrorModel() { Name = member, ErrorMessage = item.GetMessage(member) }); } } return View["Edit", base.Model]; } documentSession.SaveChanges(); return this.Response.AsRedirect("/" + dinner.DinnerID); }; Get["/my"] = parameters => { string nerdName = this.Context.CurrentUser.UserName; var userDinners = documentSession.Query<Dinner, Dinners_Index>() .Where(x => x.HostedById == nerdName || x.HostedBy == nerdName || x.RSVPs.Any(r => r.AttendeeNameId == nerdName || (r.AttendeeNameId == null && r.AttendeeName == nerdName))) .OrderBy(x => x.EventDate) .AsEnumerable(); base.Page.Title = "My Dinners"; base.Model.Dinners = userDinners; return View["My", base.Model]; }; }