Ответ
В проекте мы реализовали CRM-систему на основе многослойной архитектуры (Clean Architecture) для обеспечения гибкости и тестируемости. Вот ключевые компоненты и решения:
1. Backend (ASP.NET Core, C#):
-
API-слой (Controllers): Принимал HTTP-запросы, валидировал входные данные и возвращал ответы.
[ApiController] [Route("api/[controller]")] public class ClientsController : ControllerBase { private readonly IClientService _service; public ClientsController(IClientService service) => _service = service; [HttpGet] public async Task<IActionResult> GetAll() => Ok(await _service.GetAllAsync()); } - Слой бизнес-логики (Services): Содержал основные правила и процессы (воркфлоу лидов, автоматизация напоминаний).
- Слой доступа к данным (Repositories): Абстрагировал работу с базой данных через Entity Framework Core.
2. Frontend (React с TypeScript):
- Использовали SPA-подход с роутингом (React Router).
- Для управления состоянием применяли Redux Toolkit (кэширование списков, состояние форм).
- UI-компоненты строили на библиотеке Material-UI.
3. База данных (PostgreSQL):
- Основные сущности:
Clients,Leads,Interactions,Orders. - Для сложных отчетов использовали материализованные представления и индексы по часто фильтруемым полям (статус, дата).
4. Интеграции:
- Подключение к почтовым сервисам (SendGrid) и SMS-шлюзам через Polly для устойчивых HTTP-вызовов с повторными попытками.
- Интеграция с платежной системой через отдельный фоновый сервис (BackgroundService в .NET).
Ключевые нефункциональные требования:
- Безопасность: Аутентификация на основе JWT, авторизация через политики (RBAC), шифрование чувствительных данных (PII) в БД.
- Масштабируемость: Критичные сервисы (обработка email-рассылок) выносили в отдельные микросервисы, общающиеся через шину (RabbitMQ).
- Наблюдаемость: Централизованное логирование в Seq и метрики (производительность эндпоинтов) в Prometheus/Grafana.