Skip to content

Quyntrd/enterprise-development

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

44 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

🚲 BicycleRental API

.NET C# AutoMapper Swagger

Структура проекта

Domain

Содержит основные доменные сущности:

  • BicycleModel — модель велосипеда (название, тип, цена за час)
  • Bicycle — конкретный велосипед, связанный с моделью
  • Renter — арендатор, содержащий персональные данные
  • Rental — аренда велосипеда (начало, длительность, арендатор, велосипед)

Также определён универсальный интерфейс IRepository<TEntity, TKey>
для работы с различными хранилищами данных.


Application.Contracts

DTO-классы и контракты для API:

  • EntityDto — используется для возврата сущностей из запросов
  • EntityCreateUpdateDto — для создания и обновления сущностей
  • RentalDto / RentalCreateUpdateDto — DTO для аренды с полями
    BicycleId, RenterId, StartAt, DurationHours

Содержит интерфейсы сервисов (IBicycleService, IRenterService, IRentalService и т.д.),
реализуемые в проекте Application.


Application

Реализует бизнес-логику и сервисы, использующие контракты из Application.Contracts.

Сервисы:

  • BicycleService
  • BicycleModelService
  • RenterService
  • RentalService

Используется AutoMapper для маппинга между сущностями и DTO.
Метод MapWithPrice() в RentalService рассчитывает стоимость аренды по длительности и модели велосипеда.


Infrastructure.InMemory

Реализация in-memory репозиториев, позволяющая работать без базы данных.

Каждый репозиторий наследуется от InMemoryRepository<TEntity>
и реализует IRepository<TEntity, int>.

Реализованы репозитории:

  • BicycleModelInMemoryRepository
  • BicycleInMemoryRepository
  • RenterInMemoryRepository
  • RentalInMemoryRepository

Используются для тестирования и отладки без внешних зависимостей.


Api

Основной REST API-проект, реализующий контроллеры, Swagger и логирование.

Контроллеры наследуются от базового класса:

CrudControllerBase<TDto, TCreateUpdateDto, TKey>

Контроллеры:

  • BicycleModelsController
  • BicyclesController
  • RentersController
  • RentalsController

Каждый контроллер предоставляет CRUD-операции: GET /api/{entity}, GET /api/{entity}/{id}, POST, PUT, DELETE

Особенности:

  • Для Rentals используется TimeSpanSchemaFilter, отображающий DurationHours корректно как "hh:mm:ss".
  • Swagger включает XML-комментарии из всех зависимых сборок.
  • Все контроллеры используют ILogger для логирования ошибок и действий.

Swagger

Фильтр TimeSpanSchemaFilter, расположенный в:

BicycleRental.Api/Swagger/TimeSpanSchemaFilter.cs

Корректирует отображение TimeSpan в Swagger UI:

Пример корректного тела запроса:

{
  "bicycleId": 1,
  "renterId": 2,
  "startAt": "2025-11-10T12:00:00Z",
  "durationHours": "03:00:00"
}

Program.cs

Файл BicycleRental.Api/Program.cs выполняет:

  • Регистрацию AutoMapper (BicycleRentalProfile)
  • Регистрацию in-memory репозиториев и сервисов
  • Настройку контроллеров
  • Подключение Swagger с XML-комментариями всех сборок

Swagger автоматически добавляет документацию для всех проектов решения.


About

Разработка корпоративных приложений. 4 курс

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages

  • C# 100.0%