CMS for online shop
Для сборки можно выполнить Ant-задачи файла build.xml
:
compile
- для сборки кода проекта
compile-tests
- для сборки кода тестов
test
- для запуска тестов
Либо Maven-цели build
, test
(по умолчанию проект Spring создался с поддержкой maven, скрипт сборки для Ant был сгенерирован на основе pom.xml
автоматически).
Предварительно необходимо указать параметры подключения к БД в файлах build.properties
, src/test/resources/test.properties
, src/test/resources/test_validate.properties
, src/main/resources/application.properties
.
В параметрах тестов нужно указывать название БД для запуска юнит-тестов, в параметрах приложения - название
основной БД для запуска. Для запуска тестов нужно создать схему и заполнить БД с помощью Ant-задач create
, fill
(либо выполнив файлы src/test/resources/schema.sql
, src/test/resources/data.sql
). Также, для доступа к функции регистрации пользователей, необходимо прописать настройки почтового сервера в src/main/resources/application.properties
.
Для работы используется СУБД PostgreSQL.
Код использует Spring и Spring Data. Юнит-тесты написаны с помощью фреймворка TestNG. Интеграционные тесты написаны с использованием Selenium HttpUnit.
Для взаимодействия с БД используется механизм, описываемый спецификацией JPA, при этом используется реализация Hibernate.
Классы сущностей находятся в пакете com.myshop.model
.
DAO-интерфейсы (репозитории) находятся в пакете com.myshop.repository
. Они унаследованы от
класса JpaRepository
, который сам по себе предоставляет пользователю базовые CRUD-методы,
так что вручную реализовывать их не нужно.
Вручную реализованы методы, требующие некоторой бизнес-логики.
Некоторые методы репозиториев реализуются с использованием механизма порождения тела
запроса по его сигнатуре (Derived Query Methods), встроенного в Spring Data.
Такие методы не имеют явно написанного тела - Spring Data автоматически генерирует для них тело,
в котором выполняется запрос, соответствующий названию метода (например, как видно
из сигнатуры метода Set<Item> findItemsByCategoryId(int categoryId)
,
он должен возвращать все товары, идентификатор категории которых совпадает с переданным
в качестве параметра).
Для осуществления фильтрации товаров в выдаче магазина в интерфейсе ItemRepository
реализован
метод findItemsByTerms
. Он использует JPA Criteria API для динамического составления
сложных SQL-запросов, соответствующих условиям фильтра, переданного в качестве параметра.