/link-shortener

Application for learning purpose.

link-shortener

Application for learning purpose. done

Сокращатель ссылок

Нужно реализовать сервис по сокращению ссылок наподобие bit.ly или goo.gl.

Требования

Задача • Реализовать клиентское приложение, представляющее UI для сокращения ссылки, и просмотр связанной информации. • Разработать серверную часть: API для сокращения ссылки, сбор статистики переходов по сокращённой ссылке. • Приоритизировать разработку функций с целью реализации основного поведения в первую очередь. Функционально законченное приложение не требуется, если у вас есть ограниченное время на работу над тестовым заданием.

Роли • гость • пользователь • автор - пользователь создавший данную ссылку

Функции • гость должен иметь возможность создать учётную запись (Регистрация) • гость после аутентификации становится пользователем • создание сокращённой ссылки через UI или HTTP API разрешено только пользователям ◦ Пользователь может использовать форму для указания ссылки к сокращению или использовать HTTP API. ◦ При создании ссылки можно иметь возможность задать краткое описание и список тегов, которые потом можно редактировать. • переход по сокращённой ссылке доступный и для пользователей, и для гостей • автор должен иметь возможность просмотра статистики о количестве переходов по каждой из его ссылок по отдельности и в совокупности по всех его ссылкам • любой гость или пользователь может зайти на страницу с информацией о ссылке, на которой будет краткая информация и теги, заданные автором. При клике на тег, должны показаться ссылки всех пользователей с заданным тегом. Реализация

При реализации тестового задания следует выполнить следующее элементы: 1. Разработку вести на Github или Bitbucket, используя Gitflow процесс, писать осмысленные сообщения к коммитам. 2. Придерживаться хорошего стиля кодирования, использовать инструменты JSCS и ESLint или TSLint для автоматического анализа кода. 3. Все части системы должны быть покрыты тестами. 100% покрытие не предполагается, важно показать умение выделять тестируемый элемент и автоматизировать процесс тестирования. 4. Следует проанализировать предметную область и выделить узкие места требующие масштабирования.

Набор модулей, которые можно использовать для реализации (это открытый список, элементы которого следует воспринимать как подсказки о современных подходах к разработке): • Серверная часть - HTTP сервер должен быть реализован используя Node.js (Можно использовать Express.js или hapi.js, серверная часть обязательна) • Клиентское приложение следует реализовать используя Angular (4), Ember или React. (По крайней мере на одном из этих фреймворков) • Верстка - Bootstrap или Zurb Foundation • Автоматизация - Grunt, gulp, webpack, @angular/cli • База данных - MongoDB (native или mongoose) или CouchDB или реалиционная если проще (PostgreSQL как пример) • Тесты - mocha, chai, supertest, jasmin

Полезные ресурсы в помощь:

NodeJS http://nodebeginner.ru/ http://nodeguide.ru/doc/felix/style/ http://learn.javascript.ru/nodejs-screencast

Angular https://angular.io/docs react.js https://www.gitbook.com/book/maxfarseer/react-course-ru/details