Exemple #1
0
        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));
        }