Entities — все сущности приложения, в том числе модели базы данных и исключений
Contracts — интерфейсы репозиториев, логгера и прочие общие контракты
LoggerService — реализация сервиса для логгирования, дающий абстракцию над выбранным пакетом
Repository — репозитории, методы расширения, конфигурация сущностей и контекст, наследуемый от DbContext
Service.Contracts — интерфейсы для уровня сервисов
Service — реализация уровня сервисов
HotelBooking — основной проект, содержащий Program.cs, методы расширения, логи и MappingProfile
HotelBooking.Presentation — реализация уровеня представления: контроллеры и используемые в них фильтры
Shared — содержит Data Transfer Objects, а также сущности, отображающие query-параметры в запросе
Onion-архитектура проекта (Domain, Service and Presentation layers)
Аутентификация и авторизация реализованы с помощью Identity и JWT (Access + Refresh)
Пагинация, фильтрация, поиск и сортировка реализованы с помощью query-параметров
Форматирование тела ответа в соответствии с заголовком Accept. Поддерживаются: JSON, XML, CSV
Кэширование на стороне клиента с помощью ETag и Last-Modified
Глобальная обработка исключений с помощью кастомного middleware
Поддерживается Data Shaping. Поддерживаемые сущности: Room
Поддерживается HATEOAS. Поддерживаемые сущности: Room
Возможность создания коллекции сущностей. Поддерживаемые сущности: Hotel, Room, HotelPhoto, RoomPhoto
Возможность создания дочерних сущностей вместе с родительскими за один запрос
Реализованы эндпоинты для всех основных HTTP-методов: GET, POST, PUT, DELETE, PATCH, HEAD, OPTIONS
Соблюдены принципы DRY, KISS и SOLID
Присутствует подробная Swagger-документация
Присутствует Rate Limiting