Скринер акций — архитектура модуля
Фронтенд (hadl-front)
Файлы
- View:
src/views/AnalyticsShares.vue— страница скринера - Store:
src/stores/analyticsShares.js— состояние, фильтры, сортировка, загрузка данных - Роут:
/shares-analytics(name:sharesAnalytics), доступен без авторизации (guestRoutes) - Навигация: App.vue (десктоп-меню), MobileMenu.vue (мобильное меню) → раздел "Скринеры"
Колонки таблицы
| Колонка | field | Сортировка | Фильтр |
|---|---|---|---|
| Тикер | asset | - | - |
| ISIN | isin | - | - |
| Цена | current_rate | - | - |
| За день | price_change_percentage_24h | да | - |
| За неделю | price_change_percentage_7d | да | - |
| Див. доходность | dividend_yield | да | - |
| Капитализация | market_cap | да (по умолч.) | - |
| Объём торгов | trading_volume | да | - |
| Категория | category | - | да |
| Страна | country | - | да (country_code) |
API endpoints
- Авторизованный:
GET /api/shares?page=... - Анонимный:
GET /api/public/shares?page=... - Категории:
GET /api/public/shares/categories - Страны:
GET /api/public/shares/countries
Бэкенд (cryptodiary)
Файлы
- Controller:
app/Http/Controllers/ShareController.php→index(),getCategories() - Model:
app/Models/Share.php→ scopewithDividendYield() - Model:
app/Models/ShareCategory.php→ связьshares() - Migration:
2026_03_22_220000_add_market_cap_and_trading_volume_to_shares_table.php - Command:
app/Console/Commands/UpdateSharesMarketStats.php(update:shares-market-stats) - MOEX API:
app/Services/MoexApiService.php→getSharesMarketStats()
Колонки shares (новые)
market_cap— капитализация (ISSUECAPITALIZATION из MOEX ISS)trading_volume— объём торгов (VALTODAY из MOEX ISS)
Дивидендная доходность
Рассчитывается SQL-подзапросом в scopeWithDividendYield():
- Сумма дивидендов на ближайшие 12 месяцев / текущая цена * 100
- Логика аналогична
DividendsOverview.vueна фронте
MOEX ISS endpoint
https://iss.moex.com/iss/engines/stock/markets/shares/securities.json
- Блок
marketdata: SECID, ISSUECAPITALIZATION, VALTODAY - Обновление:
update:shares-market-stats→ ежедневно в 01:45
Расписание (Kernel.php)
$schedule->command('update:shares-market-stats')->dailyAt('01:45')->runInBackground();Паттерн (аналогия с облигациями)
Скринер акций построен по той же архитектуре, что и скринер облигаций:
AnalyticsBonds.vue→AnalyticsShares.vueanalyticsBonds.js→analyticsShares.jsBondController::index()→ShareController::index()