-
Notifications
You must be signed in to change notification settings - Fork 4
Specification
Приложение блога состоит из нескольких типовых страниц, наследующих один из двух шаблонов (шаблон пуличной версии и шаблон админ-панели, у шаблонов могут быть минимальные отличия - например, просто изменено содержимое меню). Публичный шаблон включает в себя простое навигационное меню (ссылки "все посты", "авторы", "вход", "о проекте"), форму поиска, стандартное поле для вывода контента. Шаблон админ-панели также имеет навигационное меню ("мои посты", "мой профиль", "выход") и стандартное поле для вывода контента.
Выводятся аватарки трех последних постеров, три последних поста, ссылка на общую ленту постов.
Здесь выводятся посты, соответствующие выбранной странице (по умолчанию - самой первой). Сортировка производится по дате в обратном порядке.
Здесь выводится полностью заголовок, дата, аватарка и ссылка на пользователя, контент поста, комментарии и форма комментариев. Контент рендерится с помощью Markdown.
Выводится простой листинг пользователей: ссылка, аватарка, количество постов, количество комментариев (если есть).
Выводится логин, аватарка, заметка пользователя о себе, количество постов и ссылка на посты (если они есть), количество комментариев (аналогично).
Выводится простая форма поиска, при введении запроса под формой показывается листинг удовлетворяющих запросу постов (в короткой версии, как в основном представлении), либо сообщение об отсутствующих результатах.
Просто выводится заголовок и контент.
Выводится стандартная логин-парольная форма.
Выводится общее количество постов/комментариев в системе, ссылки на управление постами и пользователями (если они доступны), ссылка на редактирование профиля.
На странице находятся две вкладки - табличный список постов с кнопками "редактировать", "удалить" (выводится по умолчанию) и форма нового поста.
Выводится просто форма редактирования поста
Аналогично странице управления постами, выводится вкладка с таблицей пользователей и вкладка формы нового пользователя.
Тот же вывод, что и в публичном профиле, плюс кнопка удаления.
Здесь находится форма, позволяющая сменить аватар и короткое описание пользователя.
Метод | URL | Вывод |
---|---|---|
GET | / | Главная страница, последние три поста, аватарки постеров |
GET | /posts[?page={page=1}] | Посты выбранной страницы |
GET | /posts/{id} | Конкретный пост |
POST | /posts/{id}/comment | Публикация комментария, редирект на пост |
GET | /users | Список пользователей |
GET | /users/{id} | Конкретный пользователь |
GET | /search | Страница с формой поиска |
GET | /search/?query={query} | Форма поиска и список подходящих под запрос постов |
GET | /about | "О проекте" |
GET | /login | Форма логина |
POST | /login | Авторизация и редирект в админку |
GET | /admin | Админка |
GET | /admin/posts | Список постов и форма нового поста |
POST | /admin/posts | Публикация поста и редирект на результат |
GET | /admin/posts/{id} | Форма редактирования конкретного поста |
POST(PUT?) | /admin/posts/{id} | Обновление конкретного поста и редирект на результат |
DELETE | /admin/posts/{id} | Удаление конкретного поста и редирект в /admin/posts
|
GET | /admin/users | Список пользователей и форма создания нового |
POST | /admin/users | Создание нового пользователя и редирект в /admin/users
|
GET | /admin/users/{id} | Страница информации конкретного пользователя |
DELETE | /admin/users/{id} | Удаление пользователя и редирект в /admin/users
|
GET | /admin/profile | Страница с формой собственного профиля |
POST | /admin/profile | Обновление профиля |
GET | POST | /logout |
Многое может поменяться из-за того, что "правильный" REST - это четыре метода (POST, GET, PUT, DELETE),
которые используются с одним и тем же URL для выполнения CRUD-операций (create, read, update, delete). "Правильный" REST бы обращался к /admin/post
и для получения всех постов, и для получения одного поста, и для создания-апдейта поста, и для удаления.
При установке должна создаваться структура базы данных (если решим все-таки опираться на SQL). Эту штуку желательно оформить красивыми миграциями.
По умолчанию при билде должен создаваться пользователь admin с паролем admin, чтобы хоть кто-то мог добавлять остальных пользователей. В принципе, это можно засунуть в миграции.
- Разделение роли админа на собственно админа и писателя. Админ может совершать любые действия с любыми сущностями, писатель может только приглашать друзей в качестве читателей и редактировать свои посты.
- Вывод комментариев конкретного пользователя
- Древовидные комментарии
- Подтягивание аватара через gravatar
- Регистрация со стандартной ссылкой подтверждения через email
- Уведомления по email о новом комментарии / ответе на комментарий
- При наличии заголовка
X-Requested-With: XMLHttpRequest
отдавать данные в JSON. - При выполнении предыдущего условия перенести рендеринг на JS, разделить тесты на апишные и фронтэндовые.