Современное финансовое API для работы с акциями, комментариями и пользовательскими портфелями с полной поддержкой CRUD операций, авторизации и версионирования.
- 🛠 Технический стек
- 📊 Модель данных
- 🚀 API эндпоинты
- Архитектурные особенности
- 🔍 Фильтрация и пагинация
- Структура проекта
- Особенности реализации
- 🔒 Безопасность
- 🚀 Запуск проекта
- Фреймворк: .NET 8.0
- Технологии: ASP.NET Core, C# 12.0, Razor ASP.NET Core
- Архитектура: MVC с Repository Pattern
- API Versioning: v1.0
- Авторизация: JWT/Identity
- Контейнеризация: Docker
-
Stock - акции/ценные бумаги
- Symbol, CompanyName, Purchase, LastDiv, Industry, MarketCap
-
Comment - комментарии к акциям
- Связь с User и Stock
-
User - пользователи (IdentityUser)
- Управление портфелями и комментариями
-
Portfolio - портфель пользователя
- Many-to-Many связь между User и Stock
User (1) ←→ (∞) Portfolio (∞) ←→ (1) Stock
↓ ↓
(1) (1)
↓ ↓
(∞) Comment (∞) ←→ (1) Stock
Описание:
- User ↔ Portfolio: один пользователь → много записей портфеля
- Stock ↔ Portfolio: одна акция → много пользователей
- User ↔ Comment: один пользователь → много комментариев
- Stock ↔ Comment: одна акция → много комментариев
/api/v1/stocks …
/api/v1/stocks/{stockId}/comments …
/api/v1/portfolio …
/api/v1/users …
- Repository Pattern - использование интерфейсов
ICommentRepository
,IStockRepository
- DTO маппинг - отдельные DTO для запросов и ответов
- Валидация - специальная папка
Validators
для валидации данных - Обработка ошибок - кастомные исключения (
EntityNotFoundException
,UpdateCommentException
) - Расширения - вспомогательные методы для User и других сущностей
Пагинация:
Offset
- смещение записейLimit
- размер страницы
Фильтрация:
Symbol
- поиск по символу (частичное совпадение)CompanyName
- поиск по названию компанииMarketCapMin/Max
- диапазон рыночной капитализации
Сортировка:
Sort
- поля:id
,symbol
,companyName
,purchase
,lastDiv
,industry
,marketCap
- Убывающая сортировка: префикс
-
(например,-marketCap
)
FinShark.API/
├── Controllers/ # API контроллеры с версионированием
├── Models/ # Модели данных
├── Dtos/ # Data Transfer Objects
├── Repositories/ # Репозитории для работы с данными
├── Services/ # Бизнес-логика
├── Mappers/ # Маппинг между моделями и DTO
├── Validators/ # Валидация данных
├── Exceptions/ # Кастомные исключения
├── Data/ # Контекст базы данных
├── Migrations/ # Миграции БД
└── Configuration/ # Конфигурация приложения
- Используется
Include()
для загрузки связанных данных ThenInclude()
для многоуровневых связей (например, комментарии с пользователями)
- Метод расширения
When()
для условной фильтрации - Динамическая сортировка через словарь выражений
- При получении акций автоматически загружаются комментарии с информацией о пользователях
- Поддержка каскадных операций через Entity Framework
- Авторизация через
[Authorize]
атрибуты - Контроль доступа на уровне пользователя
- Извлечение UserId из JWT токена
- Identity framework для управления пользователями
- Swagger документация API
- Docker контейнеризация
- Environment конфигурация (.env файлы)
- Development настройки для разработки
# Клонирование репозитория
git clone https://github.com/FateevDev/finshark.git
# Запуск через Docker
make install
API будет доступно по адресу: http://localhost:5064/swagger