- .Net 9.0;
- Entity Framework Core;
- MS SQL;
- Mapster;
- FluentValidation;
- Authentication via jwt access & refresh token (ex.: IdentityServer4);
- EF Fluent API;
- React;
- xUnit;
- Docker
- Redis
- Nginx
- Получение списка всех книг; ✅
- Получение определенной книги по её Id; ✅
- Получение книги по её ISBN; ✅
- Добавление новой книги; ✅
- Изменение информации о существующей книге; ✅
- Удаление книги; ✅
- Выдача книг на руки пользователю; ✅
- Возможность добавления изображения к книге и его хранение; ✅
- *Отправка уведомления об истечении срока выдачи книги (будет плюсом). ✅
- Получение списка всех авторов; ✅
- Получение автора по его Id; ✅
- Добавление нового автора; ✅
- Изменение информации о существующем авторе; ✅
- Удаление автора; ✅
- Получение всех книг по автору. ✅
- Должна быть реализована страница регистрации/аутентификации; ✅
- Реализовать страницу отображения списка книг. Если все книги с данным автором и названием были взяты из библиотеки, отображать, что книги нет в наличии; ✅
- Реализовать страницу, отображающую информацию о конкретной книге. Если книга в наличии, пользователь может ее взять; ✅
- Для админа реализовать страницу добавления/редактирования книги; ✅
- Для админа на странице с информацией о книге должны быть кнопки "Редактировать", "Удалить". При нажатии на кнопку редактирования происходит редирект на страницу редактирования/добавления книги. При нажатии на кнопку удаления открывается модальное окно с подтверждением удаления книги; ✅
- У каждого пользователя должна быть страница, на которой он сможет просматривать книги, которые взял из библиотеки;
- Реализовать пагинацию, поиск по названию книги, фильтрацию по жанру/автору. ✅
- Реализация policy-based авторизации с использованием refresh и jwt access токенов; ✅
- Внедрение паттерна репозиторий; ✅
- Разработка middleware для глобальной обработки исключений; ✅
- Реализация пагинации; ✅
- Обеспечение покрытия unit-тестами всех use cases/сервисов одной модели и двух методов ее репозитория (один на получение и один на сохранение данных). Модель выбирается на усмотрение кандидата (для всех моделей должны быть написаны use cases/сервисы). Разрешено использовать InMemoryDatabase; 🔁
- *Внедрение кеширования изображений (будет плюсом). ✅ (Реализовано при помощи Redis)
- Использование AsNoTracking в get запросах; ✅
- Отсутствие закомментированного или неиспользуемого кода; ✅
- Логгирование ключевых событий и ошибок; ✅
- Использование FirstOrDefault() вместо First() + проверку на null, если элемент может отсутствовать; ✅
- Сохранение данных при их создании в паттерне Репозитрий вне зависимости от использования паттерна UnitOfWork; ✅
- Клонируем репозиторий
git clone https://github.com/XmyriyCat/library.git- Выполняем сборку файла compose.yaml в терминале
docker compose build- Выполняем запуск файла compose.yaml в терминале
docker compose up -d- Далее выполним просмотр запущенных docker контейнеров
docker psпосле этого должны увидеть вот такой вывод:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a59561f32ab6 modsenlibrary-library.client "/docker-entrypoint.…" 2 hours ago Up 2 hours 0.0.0.0:3000->80/tcp, [::]:3000->80/tcp library.client
7ba2f6a47c6e library.api "dotnet Library.Api.…" 2 hours ago Up 2 hours 5100/tcp, 0.0.0.0:8080->8080/tcp, [::]:8080->8080/tcp library-api
88a37e7971b8 redis:latest "docker-entrypoint.s…" 2 hours ago Up 2 hours 0.0.0.0:6379->6379/tcp, [::]:6379->6379/tcp redis-cache
3795da5a4132 mcr.microsoft.com/mssql/server:latest "/bin/bash /entrypoi…" 2 hours ago Up 2 hours 0.0.0.0:1433->1433/tcp, [::]:1433->1433/tcp mssql-db- Далее открываем начальную страницу проекта
http://localhost:3000/dashboard
- Для просмотра логов приложения необходимо открыть Seq страницу
http://localhost:8081
- После запуска веб-приложения пользователь попадает на главную страницу. Обратите внимаение, что пользователь не авторизован. Пользователю доступен поиск книг по заголовку & жанру & автору.

- Демонстрация поиска книги.

- Демонстрация просмотра книги. Обращаю внимание, что неавторизованный пользователь не может брать книги, он может их только просматривать.

- Демонстрация просмотра авторов.

- Демонстрация просмотра личных данных автора.

- Окно регистрации пользователя

- Окно логина пользователя

- Главная страница админа. Админ может добавлять новые книги и авторов, изменять их и удалять. Менеджер же может только добавлять и изменять без прав на удаление.
Данные пользователей для входа:
Email: paulito@gmail.com & Password: password [Админ]
Email: Ivan228@gmail.com & Password: password [Менеджер]
Email: tom@gmail.com & Password: password [Обычный юзер]

- Форма создания книги. Присутствует валидация данных на стороне клиента для всех форм (логин, регистрация, добавления и изменение объекта).

- Демонстрация просмотра книги для АДМИНА! Стали доступны операции изменения и удаления книги.

- Форма изменения книги.

- Результат изменения книги.

- Модальное окно для подтверждения удаления книги.

- После подтверждения удаления книги появляется уведомление об удалении книги.

- Личный кабинет пользователя. На странице отображаются книги, которые пользователь взял в пользование. В случае если срок пользования книгой просрочен, то карточка книги становится красной и пользователю приходит уведомление, что нужно вернуть книгу.

- Демонстрация возврата книги

- Кеш изображений, сохранённых в Redis.
