В агентстве хранится информация об объектах недвижимости, контрагентах и заявках от них.
Объект недвижимости характеризуется типом, назначением, кадастровым номером, адресом, этажностью, общей площадью, числом комнат, высотой потолков, этажом расположения, наличием обременений. Тип объекта недвижимости является перечислением. Назначение объекта недвижимости является перечислением.
Контрагент характеризуется ФИО, номером паспорта, контактным телефоном.
Заявка содержит информацию о контрагенте, объекте недвижимости, типе заявки- покупка/продажа, денежной сумме. Используется в качестве контракта.
- PropertyPurpose - Назначение недвижимости
- PropertyType - Тип объекта
- RequestType - Тип заявки
- Counterparty - Клиент агентства
- RealEstateProperty - Объект недвижимости с полным описанием характеристик
- Request - Заявка на операцию с недвижимостью
- GetSellersInPeriodReturnsCorrectSellers() - Поиск продавцов за указанный период
- Top5ClientsByRequestCountReturnsSeparateTop5() - Топ-5 клиентов по количеству заявок (покупка/продажа отдельно)
- RequestCountByPropertyTypeReturnsCorrectStatistics() - Статистика заявок по типам недвижимости
- ClientsWithMinAmountAreFoundCorrectly() - Клиенты с заявками минимальной стоимости
- ClientsSeekingPropertyTypeAreReturnedOrdered() - Поиск клиентов по типу недвижимости с сортировкой
- RealEstateAgency.AppHost/ - .NET Aspire оркестратор
- RealEstateAgency.WebApi/ - ASP.NET Core API с NATS Subscriber Service
- RealEstateAgency.Generator/ - Сервис генерации тестовых данных с отправкой через NATS
- RealEstateAgency.Application/ - Бизнес-логика и сервисы
- RealEstateAgency.Contracts/ - DTO и интерфейсы сервисов
- RealEstateAgency.Domain/ - Сущности и интерфейсы репозиториев
- RealEstateAgency.Infrastructure/ - Репозитории и контекст БД (MongoDB)
- RealEstateAgency.ServiceDefaults/ - Общие настройки Aspire
- RealEstateAgency.Generator.Tests/ - Тесты генератора данных
- RealEstateAgency.WebApi.Tests/ - Интеграционные тесты
- Полное управление контрагентами, объектами недвижимости и заявками
- Валидация связанных сущностей при создании/обновлении заявок
- Асинхронное получение данных через NATS
- Продавцы за указанный период
- Топ-5 клиентов по количеству заявок (покупка и продажа отдельно)
- Статистика заявок по типам недвижимости
- Клиенты с минимальной суммой заявок
- Поиск клиентов по интересующему типу недвижимости
- Двойные репозитории: InMemory для тестов, MongoDB для продакшена
- Автоматическое заполнение БД: 12 контрагентов, 13 объектов, 15 заявок при первом запуске
- Умная конфигурация: Автоматическое переключение между MongoDB и InMemory режимами
- Асинхронная обработка: NATS Subscriber Service для фонового получения сообщений
- Docker-оркестрация: Полная контейнеризация через .NET Aspire AppHost
- Потоковая передача данных: Generator → NATS → WebAPI → MongoDB
- Мониторинг: Визуализация работы системы через Aspire Dashboard
- Масштабируемость: Независимое развертывание компонентов
- Generator публикует сообщения в топики:
- realestate.counterparty.created - создание контрагента
- realestate.property.created - создание объекта недвижимости
- WebAPI подписывается на сообщения и сохраняет данные в MongoDB
- Пакетная отправка: Generator отправляет данные пачками по 10 записей каждые 5 секунд
- Aspire Dashboard: Визуальный мониторинг состояния всех сервисов
- Логирование операций: Детальное логирование всех операций с MongoDB
- Health checks: Проверка здоровья всех компонентов системы