В рамках лабораторных работ оцениваются навыки студентов в написании красивого, качественного и тестируемого кода.
Перед началом работы необходимо ознакомиться с style guide (руководством по стилю), принятым в рамках данного курса.
Списывание карается строжайшим образом: при обнаружении факта списывания в любой из работ будут аннулированы ВСЕ лабораторные работы. Настоятельно рекомендуем хорошо подумать, прежде чем бездумно копировать код из нейросети, — если две лабораторные работы будут ПОЛНОСТЬЮ сгенерированы, велика вероятность, что они будут распознаны как списанные.
Входные данные:
Студенту дается набор интерфейсов каждого из слоев программы, студенты должны реализовать данные интерфейсы и покрыть его тестами
Критерии приемки:
- Тестовое покрытие должно быть не менее 70%
- Программа должно пройти все установленные линтеры
- Программа должна успешно пройти проверку на списывание
Модели:
- Пользователь - модель, которая содержит в себе информацию о пользователе
- Книга - модель, которая содержи в себе информацию о книге
- Заявка - модель, которая содержит в себе информацию о заявке
Условие:
Вам необходимо реализовать систему, которая представляет собой систему управления книгами в библиотеке, в системе есть 3 вида пользователей:
- Библиотекарь - Рассматривает заявки на получение книги и добавление книги
- Писатель - Создает заявки на добавление новой книги
- Читатель - Создает заявки на прочтение книги
Система предоставляет следующую функциональность:
- Читатель может получить книгу через создание заявки
- Писатель может дать новые книги в библиотеку через создание заявки
- Читатель может вернуть прочитанную книгу через создание заявки
- Библиотекарь подтверждает или отклоняет созданные заявки
Процесс получения книги выглядит следующим образом:
- Читатель создает заявку на получение книги
- Библиотекарь либо принимает заявку, либо отклоняет ее
- Если библиотекарь одобряет заявку, то у пользователя появляется книга
Бизнес требования:
- Считаем что каждый пользователь уникально идентифицируется полем name, т.е. не может быть 2ух пользователей с одинаковым name
- Писатель может создавать заявки на хранение только своих книг, кол-во книг не должно превышать тираж
- Читатель может создавать заявку только на те книги, которые он не брал
- Считаем что каждый пользователь может входить сразу в 2, а то и в 3 группы, т.е. условный Иван Иванов может быть и Писателем и Библиотекарем одновременно
- Если пользователь является читателем(или писателем) и библиотекарем одновременно, то при создании заявки, она автоматический подтверждается
Входные данные:
Студенту дается набор бизнес требований и набор интерфейсов Presentation Layerа, необходимо спроектировать и реализовать приложение
Критерии приемки:
- Приложение полностью проходит интеграционные тесты, описанные в репозитории
- Тестовое покрытие не менее 70%
- Программа успешно проходит все установленные линтеры
- Программа успешно проходит проверку на списывание
Модели:
Все модели должны быть спроектированы студентами
Условие:
Вам необходимо спроектировать и реализовать бэкенд-систему управления арендой автомобилей. Система предоставляет REST API (контроллеры даны) для следующих категорий пользователей:
- Клиент — может просматривать каталог автомобилей и создавать заявки на аренду.
- Менеджер — управляет заявками (подтверждает/отклоняет) и автомобилями (добавляет, изменяет статус).
- Администратор — управляет пользователями и их ролями.
Система предоставляет следующую функциональность:
- Управление каталогом автомобилей Просмотр доступных автомобилей с фильтрацией. Только менеджеры и администраторы могут добавлять новые автомобили или изменять их статус (например, поставить на обслуживание).
- Клиент может арендовать автомобиль
- Управление пользователями: Администратор может добавлять новых пользователей и назначать им роли.
Бизнес требования и ограничения (ключевые для проектирования логики):
- Уникальность: VIN-номер автомобиля и имя пользователя (
username) являются уникальными в системе.
- Статусы автомобилей:
AVAILABLE/RENTED/UNDER_MAINTENANCE
- Статусы заявок на аренду автомобилей:
PENDING/APPROVED/REJECTED/COMPLETED
- Проверка доступности автомобиля: Нельзя создать заявку на автомобиль, который уже арендован (
RENTED) или находится на обслуживании (UNDER_MAINTENANCE) в запрашиваемые даты.
- Проверка возраста и стажа: Клиент должен быть старше 21 года и иметь водительский стаж не менее 2 лет для создания заявки. Эти правила могут изменяться в зависимости от категории автомобиля (например, для мощных автомобилей требования строже).
- Автоматическое подтверждение: Если пользователь обладает одновременно ролями
CLIENT и MANAGER, то его заявки на аренду должны подтверждаться автоматически (система должна создавать договор без участия другого менеджера).
- Расчет стоимости: Стоимость аренды в договоре рассчитывается как
тариф_автомобиля * количество_дней. При возврате автомобиля с повреждениями или позднее срока к стоимости добавляется штраф (фиксированная сумма или процент).