Skip to content
This repository has been archived by the owner on Oct 18, 2018. It is now read-only.

Specification

etki edited this page Nov 16, 2014 · 3 revisions

Коротенькое ТЗ

Приложение блога состоит из нескольких типовых страниц, наследующих один из двух шаблонов (шаблон пуличной версии и шаблон админ-панели, у шаблонов могут быть минимальные отличия - например, просто изменено содержимое меню). Публичный шаблон включает в себя простое навигационное меню (ссылки "все посты", "авторы", "вход", "о проекте"), форму поиска, стандартное поле для вывода контента. Шаблон админ-панели также имеет навигационное меню ("мои посты", "мой профиль", "выход") и стандартное поле для вывода контента.

Минимальные требования

Главная

Выводятся аватарки трех последних постеров, три последних поста, ссылка на общую ленту постов.

Страница вывода постов

Здесь выводятся посты, соответствующие выбранной странице (по умолчанию - самой первой). Сортировка производится по дате в обратном порядке.

Страница отдельного поста

Здесь выводится полностью заголовок, дата, аватарка и ссылка на пользователя, контент поста, комментарии и форма комментариев. Контент рендерится с помощью 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, разделить тесты на апишные и фронтэндовые.