Реализация проекта сервисно-ориентированного приложения.
Система аренды велосипедов с управлением моделями, велосипедами, арендаторами и арендой.
Проект реализован с использованием ASP.NET Core Web API, MongoDB для хранения данных и Aspire.Hosting для локальной оркестрации сервисов.
- BikeRental.Domain — доменные модели и перечисления.
- BikeRental.Infrastructure — репозитории для работы с MongoDB, тестовые данные (
DataSeeder) и настройки подключения. - BikeRental.Api — Web API для работы с системой аренды.
- BikeRental.AppHost — проект для оркестрации всех сервисов и MongoDB через Aspire.Hosting.
- Доменные модели:
BikeModel— модель велосипеда.Bike— конкретный велосипед.Renter— арендатор.Rental— запись об аренде велосипеда.
- Репозитории — общий интерфейс для работы с MongoDB (
IRepository<T>). - DTO — объекты передачи данных через API (
BikeDto,RentalDto,RenterDtoи т.д.). - DataSeeder — генерация тестовых данных.
- Управление велосипедами и моделями.
- Управление арендаторами.
- Создание и просмотр аренд.
-
Bike — конкретный велосипед.
Поля:Id,SerialNumber,Color,Model. -
BikeModel — справочник моделей велосипедов.
Поля:Id,Name,Type (BikeType),WheelSize,MaxRiderWeight,BikeWeight,BrakeType,ModelYear,HourlyRate. -
Renter — арендатор.
Поля:Id,FullName,Phone. -
Rental — факт аренды велосипеда.
Поля:Id,Bike,Renter,StartTime,DurationHours -
BikeType (Enum) — перечисление типов велосипедов
DataSeeder — это вспомогательный класс, который создаёт тестовые данные. RentalFixture — это класс, который один раз создаёт общие тестовые данны и передаёт их во все тесты.
-
ShouldFindAllSportBikes Проверяет, что возвращаются только модели велосипедов типа Sport.
-
ShouldCalculateTop5ModelsByProfit Считает топ-5 моделей по прибыли от аренды (на основе HourlyRate * DurationHours) и проверяет порядок моделей.
-
ShouldCalculateTop5ModelsByDuration Считает топ-5 моделей по суммарной длительности аренды и проверяет порядок моделей.
-
ShouldFindMinMaxAvgRentalDuration Вычисляет минимальное, максимальное и среднее время аренды среди всех записей.
-
ShouldSumRentalTimeByBikeType Считает суммарное время аренды по каждому типу велосипеда и проверяет соответствие ожидаемым значениям.
-
ShouldFindTopRentersByUsage Определяет топ-3 арендатора по количеству аренд и проверяет их имена.