- API-клиент.
- Внедрить зависимость клиента в проект Blazor WASM.
- Выведить список товаров на странице фронтэнда(Подсказка: перезаписать метод OnInitializedAsync. Добавить CORS)
builder.Services.AddCors();
… var app = builder.Build(); …
app.UseCors(policy =>
{
policy
.AllowAnyMethod()
.AllowAnyHeader()
.AllowAnyOrigin();
});
- Добавть редактор товаров, чтобы он позволял хотя бы добавлять и удалять товары из каталога.
- Добавить функционал редактирования товаров.
- Добавить класс Account и создать для него репозиторий
- Упростить все репозитории в программе путем наследования от generic repo
- Добавить отдельную модель данных для передачи в запросе на регистрацию.
- Реализуйть валидацию модели регистрации при помощи библиотеки FluentValidator.
- Перенести бизнес логику регистрации в сервис AccountService.
- Создать собственный эксепшн на случай, если аккаунт с таким же Email'ом уже зарегистрирован в системе.
- На уровне контроллера обработать эксепшн о том, что пользователь с таким Email'ом уже зарегистрирован и верните соответствующий ответ.
- Вынести работу с данными в отдельный проект (репозиторий, DbContext).
- Реализовать регистрацию с корректным хранением пароля в БД.
- Добавить action для авторизации. Если авторизация прошла успешно, то возвращать класс аккаунта.
- Добавить страницу логина в Blazor WASM.
- Реализовать метод расширения PostAsJsonAndDeserializeAsync для класса HttpClient.
- Добавить логирование тела запросов и логирование тела ответов (используя подход из .net 6).
- Реализовать подсчет переходов для всех страниц (HttpContext.Request.Path) (через класс Middleware).
- Добавить страницу /metrics с выводом данных о переходах в формате адрес страницы: кол-во переходов.
- (Клиент) Реализовать перехват 400-й и остальных ошибок и прокидывайте исключение с подробностями об ошибке из ShopClient.
- Реализовать паттерн Unit Of Work в приложении.
- Реализовать функционал корзины.
- Добавить централизованную обработку исключений в фильтр исключений и запишите текст ошибки в результат действия.
- Добавить фильтр, проверяющий API ключ в заголовке запроса. Если в API ключ не совпадает выполнение конвейера фильтров должно прерываться.
- Реализовать оповещение пользователя о регистрации (через MediatR)
- Реализовать отправку кода подтверждение пользователю в двухфакторной аутентификации через доменные события.
- Написать тесты всех сценариев, проверяющие корректность добавления товара в корзину.
- Написать юнит-тесты для метода регистрации пользователя( для создания моков воспользоваться библиотекой Moq, применить библиотеку Fluent Assertions в тестах, генерировать тестовые данные при помощи библиотеки Bogus, добиться максимального покрытия).