static object PostRoom( NancyContext context, IDocumentSession documentSession, string title, string slug, string description) { context.Ensure("context"); documentSession.Ensure("documentSession"); if (!context.IsSignedUp()) return 403; var errors = new List<string>(); errors.AddRange(fn.ValidateRequired("Title", title)); errors.AddRange(fn.ValidateLength("Title", title, 128)); errors.AddRange(fn.ValidateRequired("Slug", slug)); errors.AddRange(fn.ValidateLength("Slug", slug, 128)); errors.AddRange(fn.ValidateFormat("Slug", slug, new Regex("[a-z][a-z0-9_-]+"))); if (description != null) errors.AddRange(fn.ValidateLength("Description", description, 1024)); var existingRoom =documentSession.GetRoomBySlug(slug); if (existingRoom != null) errors.Add(Strings.NotAvailable("slug", slug)); existingRoom = documentSession.GetRoomByTitle(title); if (existingRoom != null) errors.Add(Strings.NotAvailable("title", title)); if (errors.Count > 0) return context.ModelWithStatus(new CreateRoomFormResponse(title, slug, description, errors), 400); var currentMember = context.GetCurrentMember(documentSession); Debug.Assert(currentMember != null, "`IsSignedUp` should ensure current member is not null."); var room = documentSession.CreateRoom(currentMember.Id, slug, title, description); return context.Redirect(Paths.Room(room.Slug)); }