<b><u>Сдача работы и баллы</u></b><p>Работу необходимо будет сдать лично. На своей паре или в доп.время. Не тяните, распределяйте время, чтобы не было столпотворений!</p><p>При проверке будет оцениваться соответствие всем нижеперечисленным требованиям, реализация правильной архитектуры, умение применять используемые технологии, удобство пользования системой, защищенность системы.</p><p><i>Сайт должен быть задеплоен на общедоступный сервер и/</i><b><i>или</i></b><i> помещён в Docker (сервер приложений и сервер СУБД в отдельных контейнерах). Код необходимо выложить на Github Classroom в специально подготовленное преподавателем задание.</i></p><p>Работа без выполнения списка обязательных требований ниже не принимается. Невыполнение каждого дополнительного требования к наполнению/реализации уменьшает максимальные баллы на 20%.</p><b><u>Обязательные требования</u></b><p>Семестровая работа – сайт, написанный с использованием Spring MVC Framework.</p><p>У сайта должна быть идея, обладающая новизной и актуальностью. Если сомневаетесь в сложности и новизне проекта, лучше подойдите-уточните. <i><u>Либо же можно воспользоваться своей предыдущей семестровой и развить её.</u></i></p><p>Сайт должен иметь удобный интерфейс.</p><p>Необходимо использовать HTML5, CSS3. CSS-препроцессоры не запрещаются, но нужно знать их основные принципы. Если используете CSS-фреймворки (Bootstrap и проч.), должны уметь пояснить, что за классы используете, особенно классы сетки.</p><p>Необходимо корректно работать с формами: проверка данных, защита от повторной отправки там, где это нужно.</p><p>Нужно использовать любой шаблонизатор, <i>можно JSP</i>. В коде видов нельзя напрямую вызывать Java-код. Должна быть развитая система шаблонов (свои теги или наследование шаблонов, разделение видов на несколько частей).</p><p>Сайт должен иметь аутентификацию, авторизацию, регистрацию (Spring Security).</p><p>Сайт должен быть защищён от атак, которые обсуждались в течение всего курса предмета (XSS, CSRF, SI, CORS).</p><p>Сайт должен хранить данные в реляционной СУБД: MySQL, MSSQL, MariaDB или PostgreSQL. Можно ли использовать другие СУБД нужно уточнить лично. Использование In-Memory DB (H2 и проч) не допускается.</p><p>Для работы с СУБД необходимо использовать и Spring Data JPA, и JPA. То есть должны быть как и репозитории от Spring, так и самостоятельно написанные запросы с помощью JPQL/CriteriaBuilder.</p><p>Система должна работать, как минимум с <b><u>пятью </u></b>JPA сущностями. Должны быть связи M2M, O2M, O2O. </p><p>Как минимум, для одной из сущностей должен быть реализован полностью CRUD: не обязательно в виде админки, но должны быть некие экшены контроллеров, которые вызывают эти методы.</p><p>Система должна быть построена по модели MVC, и следует придерживаться логики Controller->Service->Repository и тд. Необходимо придерживаться принципов SOLID. Весь код должен быть корректно поделен на пакеты. Рекомендуется использовать DTO-, Request-, Forms-классы, где это уменьшает связность, абстрагирует архитектуру.</p><p>Проект должен быть основан на Spring Boot: нужно использовать стартеры, настройки и запускающий класс.</p><p>Все реализации требований должны вписываться в бизнес-логику и выполнение соответствующего кода должно быть возможно из-за действий пользователя.</p><b><u>Требования к наполнению, наличию реализаций</u></b><ul><li><p>Необходимо применить Javascript. Нужно использовать AJAX.</p></li><li><p>Все исключения, проблемы должны корректно обрабатываться: обычные экшены – приводить к отдачи самостоятельно оформленной веб-страницы, а AJAX-запросы получить JSON-ответ с информацией о проблеме. Не должно быть дефолтных страниц с ошибками от сервера приложений или Spring Boot.</p></li><li><p>Использование стороннего API, не используя специальную библиотеку для этого API, а самостоятельное описание запросов на уровне HTTP (например, библиотека okhttp, restTemplate). Примеры: вход или восстановление пароля через отправку смс, использование курсов валют для пересчёта стоимости корзины. Наличие простого информера для сайта типа вывода погоды не подходит!</p></li><li><p>Использование Spring Security. То есть полноценная работа с пользователем: закрытая часть сайта, аутентификация, регистрация.</p></li><li><p>Организация REST API хотя бы для одной сущности. Подключение генерации Swagger. А также написание тестов через http-файлы Idea или через Postman.</p></li><li><p>Использование конвертеров, в том числе и своих.</p></li><li><p>Логирование возникающих исключений.</p></li><li><p>Наличие 2 нестандартных методов для репозиториев Spring: самостоятельно написанных методов с использованием @Query, CriteriaBuiler, но не повторяющих функционал методов, описываемых в Spring Data JPA.</p></li><li><p>Один запрос с подзапросом.</p></li></ul><b><u>Сроки</u></b><p>Дедлайн досрочной сдачи: 24 мая. Можно получить +4 балла баллов сверх баллов семестровой работы при строгом выполнении всех требований.</p><p>Дедлайн сдачи: 14 июня.</p><p><br></p><b><u>Разбалловка</u></b><p>При несоответствии каждому дополнительному требованию максимальные баллы уменьшаются на 20%.</p><p>Если обнаружено, что какой-то участок кода списан, то баллы списавшего и давшего списать аннулируются полностью.</p><p>Все уменьшения баллов целочисленные, с округлением в меньшую сторону.</p><p><br></p><p>Фронтэнд (вёрстка, дизайн, шаблоны, JS) – 3</p><p>Работа с базой (репозитории, 5 сущностей, M2M, O2M, O2O свои запросы) – 4</p><p>Архитектура (слои абстракций, взаимодействие модулей, шаблоны проектирования) – 4</p><p>Общие правила построения сайтов (упоминание контекста, защита от повторной отправки, проверки ввода, корректный вывод, обработка запроса и проч) – 6</p><p>Использование продвинутых техник/технологий, в т.ч. Spring (логгирование, правильное описание конфигураций, настройка окружения, конвертеров, централизованная обработка исключений и т.д.) – 7</p><p>Корректное использование API – 1</p><p>Итого: 25 баллов</p><p><br></p><p>Пример: студент сдал работу без 2 дополнительных требований и у него было очень много проблем с фронтэндом. 60% максимальных баллов и вычет всех баллов за фронтэнд: (1-0.2*2)*(25-3) балла = 15 - 1.8 = 13.2 ? 13 баллов.</p><b><u>Доп.задание:</u></b><p>Подключить oAuth-сервис без использование библиотеки, которая непосредственно решает эту задачу. Максимум: библиотека для отправки HTTP-запросов, генерации секретных кодов. Нужно реализовать функционал “войти через”.</p><p>+4 балла (но не более 25 суммарно)</p>