Home Task 1
Создал проект shop. Изменил скрипт запуска в package.json
Запуск backend: npm run backend Запуск frontend: npm start
-
Модуль товаров Страницы: Список товаров (localhost:420/products) Компоненты: ProductsListComponent - Список товаров ProductComponent - Краткое отображение позиции списка
Страница детализации (localhost:4200/product/:id) Компоненты: ProductDetailsComponent - Страница с детальным описанием товара
Сервисы: ProductsService - Источник данных для продуктов. Хранилище данных json-server db\db.json
-
Модуль корзины Страницы: Корзина (localhost:4200/charts) Компоненты: ShoppingCartComponent - Список товаров выбранных для заказа
-
Корневой модуль Страница не найдена Компонент PageNotFoundComponent Сервисы: ShoppingCartService - сквозной сервис для хранения пользовательского выбора
Home Task 2
Перевел приложение на Pull-Based архитектуру. Модифицировал шаблоны. Вынес все зависимости в корневые компоненты. Дочерние компоненты перевел на OnPush стратегию, общение выполняется через Input Output. Добавил блокировку на событие добавление товара в корзину если товар недоступен. Создал дополнительный модуль shared. В модуль добавил общий компонент ContinueButtonComponent. В соответствии с заданием разместил в модуле новую дерективу SelectedItemDirective стилизации фона элементов корзины. Модифицировал сервис корзины. Перевел с Promise на Observable. Добавил доп. методы позволяющие получить общую стоимость и общее количество товаров, изменить количество выбранных товаров. Внес правки в компонент элемента корзины, теперь можно прям в нем изменять количество выбранных товаров. Завязал инициализацию заголовка в компоненте AppComponent на ViewChild через шаблонную переменную. Добавил интеграцию с ngx-translate. Перенес тексты в ресурсный файл. В модуле корзины перевел компонент заполнения адреса на реактивные формы.
Home Task 3
Добавил директиву ClickDirective изменящую стили HostListener через Renderer2 (меняет цвет фона и размер шрифта) Отрефакторил сервис корзины. Добавил сервис генератор последовательности символов GeneratorService. Завел сервис константу с метаданными приложения ConstantsService. Добавил сервис LocalStorageService для работы с localStorage. Перевел сервис корзины на использование LocalStorageService. Добавил фиктивный сервис ConfigOptionsService для работы с конфигом. Добавил тестовую страницу (localhost:4200/about) для демонстрации новых сущностей, внедрение сущностей выполнил в соответствии с требованиями задания.
Home Task 4
Добавил в компоненты корзины встроенные пайпы. В компонент CartListFooterComponent пайп форматирования цены В компонент CartListItemComponent пайпы форматирования цены и верхний регистр на заголовок товара.
Добавил кастомный пайп OrderByPipe выполняющий сортировку элементов корзины. Аргументы OrderByPipe: field: поле по которому выполняется фильтрация isAsc: признак сортировки по возрастанию Подключил пайп сортировки в модуле корзины. Добавил компонент SortByPanelComponent - панель модификации аргументов сортировки.
Home Task 5
Добавил страницу логина (localhost:4200/login) Добавил сервисы: OrdersService - Источник данных для заказов. Хранилище данных json-server db\db.json AuthService - сервис аунтифекации пользователей.
Добавил модуль админки. Закрыл админку через AuthGuard. Страницы: Список заказов (localhost:4200/admin) Детализация заказа (localhost:4200/admin/order/edit/:id') Список книг (localhost:4200/admin/products) Добавить новую книгу (localhost:4200/admin/products/add) Редактирование книги (localhost:4200/admin/products/edit/:id)
Home Task 6
Добавил TimingInterceptor для логирования длительности запросов к бекэнду. Добавил сервис AppSettings, сервис выполняет доп. попытки запроса данных в случае неудачной инициализации.
Home Task 7
Перевел приложение на ngrx. Добавил состояния: cart - модуль корзины (редюсеры базируются на @ngrx/entity) products - модуль для работы с продуктами (редюсеры базируются на @ngrx/entity) orders - модуль для работы с заказами (редюсеры базируются на @ngrx/entity) router - модуль для взаимодействия с роутером
Home Task 8
Добавил компонент ProcessOrderComponent в модуль CartModule. Определил поля ввода: Имя (обязательное поле) Фамилия Email (обязательное поле) Телефоны (Динамический список) Флаг самовывоз Город доставки / Адрес доставки. Поля обязательные в случае если выставлен флаг самовывоз, иначе поля скрываются. Добавил кастомные валидаторы: customRequiredValidatorFn - проверка обязательности заполнения контрола emailValidator - валидация email. Для данного валидатора реализовал директиву EmailValidatorDirective. Добавил компонент ValidatorMessageComponent для отображения сообщения ошибки.
Home Task 9
Добавил изолированный юнит тест для сервиса [AuthService]. Добавил изолированный юнит тест для пайпа [ToStarsPipe]. Добавил интеграционные юнит тесты для компонент: ProductListComponent, ProductComponent. Добавил юнит тест для [AppComponent]. Изменил package.json под создание отчета покрытия кода тестами. Создал отчет.