Skip to content

FateevDev/finshark

Repository files navigation

FinShark.API

Современное финансовое API для работы с акциями, комментариями и пользовательскими портфелями с полной поддержкой CRUD операций, авторизации и версионирования.

📑 Оглавление

🛠 Технический стек

  • Фреймворк: .NET 8.0
  • Технологии: ASP.NET Core, C# 12.0, Razor ASP.NET Core
  • Архитектура: MVC с Repository Pattern
  • API Versioning: v1.0
  • Авторизация: JWT/Identity
  • Контейнеризация: Docker

📊 Модель данных

Основные сущности

  1. Stock - акции/ценные бумаги

    • Symbol, CompanyName, Purchase, LastDiv, Industry, MarketCap
  2. Comment - комментарии к акциям

    • Связь с User и Stock
  3. User - пользователи (IdentityUser)

    • Управление портфелями и комментариями
  4. 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 эндпоинты

Акции

/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/ # Конфигурация приложения

Особенности реализации

Lazy Loading и Include

  • Используется 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

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published