diff --git a/CHANGELOG.md b/CHANGELOG.md index 55ba2c7a49..81d4d72801 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## Unreleased + +### Changed + +- Deprecated the `api/v1/symbol` endpoints in favor of the `api/v1/symbols` endpoints + ## 3.94.0 - 2026-10-28 ### Changed diff --git a/apps/api/src/app/__snapshots__/app.module.spec.ts.snap b/apps/api/src/app/__snapshots__/app.module.spec.ts.snap index 9e2b9ff69b..2c022018ca 100644 --- a/apps/api/src/app/__snapshots__/app.module.spec.ts.snap +++ b/apps/api/src/app/__snapshots__/app.module.spec.ts.snap @@ -844,6 +844,32 @@ exports[`AppModule should keep the security of each route 1`] = ` "TransformDataSourceInResponseInterceptor", ], }, + "GET /symbols/:dataSource/:symbol": { + "guards": [ + "AuthGuard('jwt')", + "HasPermissionGuard", + ], + "interceptors": [ + "TransformDataSourceInResponseInterceptor", + "TransformDataSourceInRequestInterceptor", + ], + }, + "GET /symbols/:dataSource/:symbol/:dateString": { + "guards": [ + "AuthGuard('jwt')", + "HasPermissionGuard", + ], + "interceptors": [], + }, + "GET /symbols/lookup": { + "guards": [ + "AuthGuard('jwt')", + "HasPermissionGuard", + ], + "interceptors": [ + "TransformDataSourceInResponseInterceptor", + ], + }, "GET /tags": { "allowDuringImpersonation": true, "guards": [ diff --git a/apps/api/src/app/app.module.ts b/apps/api/src/app/app.module.ts index 417c2f50e2..79a25c56ae 100644 --- a/apps/api/src/app/app.module.ts +++ b/apps/api/src/app/app.module.ts @@ -61,10 +61,10 @@ import { PlatformsModule } from './endpoints/platforms/platforms.module'; import { PublicModule } from './endpoints/public/public.module'; import { SitemapModule } from './endpoints/sitemap/sitemap.module'; import { SubscriptionModule } from './endpoints/subscription/subscription.module'; +import { SymbolsModule } from './endpoints/symbols/symbols.module'; import { TagsModule } from './endpoints/tags/tags.module'; import { WatchlistModule } from './endpoints/watchlist/watchlist.module'; import { PortfolioModule } from './portfolio/portfolio.module'; -import { SymbolModule } from './symbol/symbol.module'; import { UserModule } from './user/user.module'; @Module({ @@ -150,7 +150,7 @@ import { UserModule } from './user/user.module'; }), SitemapModule, SubscriptionModule, - SymbolModule, + SymbolsModule, TagsModule, ThrottlerModule.forRootAsync({ imports: [ConfigurationModule], diff --git a/apps/api/src/app/endpoints/benchmarks/benchmarks.module.ts b/apps/api/src/app/endpoints/benchmarks/benchmarks.module.ts index 0fbccb2c84..69197d969b 100644 --- a/apps/api/src/app/endpoints/benchmarks/benchmarks.module.ts +++ b/apps/api/src/app/endpoints/benchmarks/benchmarks.module.ts @@ -1,5 +1,4 @@ import { PortfolioModule } from '@ghostfolio/api/app/portfolio/portfolio.module'; -import { SymbolModule } from '@ghostfolio/api/app/symbol/symbol.module'; import { TransformDataSourceInRequestModule } from '@ghostfolio/api/interceptors/transform-data-source-in-request/transform-data-source-in-request.module'; import { TransformDataSourceInResponseModule } from '@ghostfolio/api/interceptors/transform-data-source-in-response/transform-data-source-in-response.module'; import { ApiModule } from '@ghostfolio/api/services/api/api.module'; @@ -7,6 +6,7 @@ import { BenchmarkModule } from '@ghostfolio/api/services/benchmark/benchmark.mo import { ExchangeRateDataModule } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.module'; import { ImpersonationModule } from '@ghostfolio/api/services/impersonation/impersonation.module'; import { MarketDataModule } from '@ghostfolio/api/services/market-data/market-data.module'; +import { SymbolModule } from '@ghostfolio/api/services/symbol/symbol.module'; import { Module } from '@nestjs/common'; diff --git a/apps/api/src/app/endpoints/benchmarks/benchmarks.service.spec.ts b/apps/api/src/app/endpoints/benchmarks/benchmarks.service.spec.ts index 864f1d5a42..f5d19955d5 100644 --- a/apps/api/src/app/endpoints/benchmarks/benchmarks.service.spec.ts +++ b/apps/api/src/app/endpoints/benchmarks/benchmarks.service.spec.ts @@ -1,8 +1,8 @@ import { PortfolioService } from '@ghostfolio/api/app/portfolio/portfolio.service'; -import { SymbolService } from '@ghostfolio/api/app/symbol/symbol.service'; import { BenchmarkService } from '@ghostfolio/api/services/benchmark/benchmark.service'; import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.service'; import { MarketDataService } from '@ghostfolio/api/services/market-data/market-data.service'; +import { SymbolService } from '@ghostfolio/api/services/symbol/symbol.service'; import { parseDate } from '@ghostfolio/common/helper'; import { DataSource } from '@prisma/client'; diff --git a/apps/api/src/app/endpoints/benchmarks/benchmarks.service.time-zone.spec.ts b/apps/api/src/app/endpoints/benchmarks/benchmarks.service.time-zone.spec.ts index e0bf24120c..ef31c27a98 100644 --- a/apps/api/src/app/endpoints/benchmarks/benchmarks.service.time-zone.spec.ts +++ b/apps/api/src/app/endpoints/benchmarks/benchmarks.service.time-zone.spec.ts @@ -3,10 +3,10 @@ * @jest-environment-options {"timeZone": "America/New_York"} */ import { PortfolioService } from '@ghostfolio/api/app/portfolio/portfolio.service'; -import { SymbolService } from '@ghostfolio/api/app/symbol/symbol.service'; import { BenchmarkService } from '@ghostfolio/api/services/benchmark/benchmark.service'; import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.service'; import { MarketDataService } from '@ghostfolio/api/services/market-data/market-data.service'; +import { SymbolService } from '@ghostfolio/api/services/symbol/symbol.service'; import { parseDate } from '@ghostfolio/common/helper'; import { DataSource } from '@prisma/client'; diff --git a/apps/api/src/app/endpoints/benchmarks/benchmarks.service.ts b/apps/api/src/app/endpoints/benchmarks/benchmarks.service.ts index 066516236a..11853af84b 100644 --- a/apps/api/src/app/endpoints/benchmarks/benchmarks.service.ts +++ b/apps/api/src/app/endpoints/benchmarks/benchmarks.service.ts @@ -1,8 +1,8 @@ import { PortfolioService } from '@ghostfolio/api/app/portfolio/portfolio.service'; -import { SymbolService } from '@ghostfolio/api/app/symbol/symbol.service'; import { BenchmarkService } from '@ghostfolio/api/services/benchmark/benchmark.service'; import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.service'; import { MarketDataService } from '@ghostfolio/api/services/market-data/market-data.service'; +import { SymbolService } from '@ghostfolio/api/services/symbol/symbol.service'; import { DATE_FORMAT, parseDate, resetHours } from '@ghostfolio/common/helper'; import { AssetProfileIdentifier, diff --git a/apps/api/src/app/endpoints/data-providers/ghostfolio/ghostfolio.module.ts b/apps/api/src/app/endpoints/data-providers/ghostfolio/ghostfolio.module.ts index e77dea9eeb..29fc4c21cf 100644 --- a/apps/api/src/app/endpoints/data-providers/ghostfolio/ghostfolio.module.ts +++ b/apps/api/src/app/endpoints/data-providers/ghostfolio/ghostfolio.module.ts @@ -1,4 +1,3 @@ -import { SymbolModule } from '@ghostfolio/api/app/symbol/symbol.module'; import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service'; import { CryptocurrencyModule } from '@ghostfolio/api/services/cryptocurrency/cryptocurrency.module'; import { AlphaVantageService } from '@ghostfolio/api/services/data-provider/alpha-vantage/alpha-vantage.service'; @@ -18,6 +17,7 @@ import { PrismaModule } from '@ghostfolio/api/services/prisma/prisma.module'; import { PropertyModule } from '@ghostfolio/api/services/property/property.module'; import { RedisCacheModule } from '@ghostfolio/api/services/redis-cache/redis-cache.module'; import { SymbolProfileModule } from '@ghostfolio/api/services/symbol-profile/symbol-profile.module'; +import { SymbolModule } from '@ghostfolio/api/services/symbol/symbol.module'; import { Module } from '@nestjs/common'; diff --git a/apps/api/src/app/endpoints/data-providers/ghostfolio/ghostfolio.service.ts b/apps/api/src/app/endpoints/data-providers/ghostfolio/ghostfolio.service.ts index 4042241449..770d5d62b0 100644 --- a/apps/api/src/app/endpoints/data-providers/ghostfolio/ghostfolio.service.ts +++ b/apps/api/src/app/endpoints/data-providers/ghostfolio/ghostfolio.service.ts @@ -1,4 +1,3 @@ -import { SymbolService } from '@ghostfolio/api/app/symbol/symbol.service'; import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service'; import { DataProviderService } from '@ghostfolio/api/services/data-provider/data-provider.service'; import { GhostfolioService as GhostfolioDataProviderService } from '@ghostfolio/api/services/data-provider/ghostfolio/ghostfolio.service'; @@ -12,6 +11,7 @@ import { import { FetchService } from '@ghostfolio/api/services/fetch/fetch.service'; import { PrismaService } from '@ghostfolio/api/services/prisma/prisma.service'; import { PropertyService } from '@ghostfolio/api/services/property/property.service'; +import { SymbolService } from '@ghostfolio/api/services/symbol/symbol.service'; import { DATA_SOURCES_GHOSTFOLIO_DATA_PROVIDER_SETUP_PERIOD, DATA_SOURCES_GHOSTFOLIO_DATA_PROVIDER_SETUP_PERIOD_MAX_REQUESTS_FACTOR, diff --git a/apps/api/src/app/endpoints/market-data/market-data.controller.ts b/apps/api/src/app/endpoints/market-data/market-data.controller.ts index 73c8ad4451..2c4e37e42a 100644 --- a/apps/api/src/app/endpoints/market-data/market-data.controller.ts +++ b/apps/api/src/app/endpoints/market-data/market-data.controller.ts @@ -1,9 +1,9 @@ -import { SymbolService } from '@ghostfolio/api/app/symbol/symbol.service'; import { AllowDuringImpersonation } from '@ghostfolio/api/decorators/allow-during-impersonation.decorator'; import { HasPermission } from '@ghostfolio/api/decorators/has-permission.decorator'; import { HasPermissionGuard } from '@ghostfolio/api/guards/has-permission.guard'; import { MarketDataService } from '@ghostfolio/api/services/market-data/market-data.service'; import { SymbolProfileService } from '@ghostfolio/api/services/symbol-profile/symbol-profile.service'; +import { SymbolService } from '@ghostfolio/api/services/symbol/symbol.service'; import { UpdateBulkMarketDataDto } from '@ghostfolio/common/dtos'; import { getCurrencyFromSymbol, isCurrency } from '@ghostfolio/common/helper'; import { MarketDataOfMarketsResponse } from '@ghostfolio/common/interfaces'; diff --git a/apps/api/src/app/endpoints/market-data/market-data.module.ts b/apps/api/src/app/endpoints/market-data/market-data.module.ts index 1de10907b7..ec78f5e2b0 100644 --- a/apps/api/src/app/endpoints/market-data/market-data.module.ts +++ b/apps/api/src/app/endpoints/market-data/market-data.module.ts @@ -1,6 +1,6 @@ -import { SymbolModule } from '@ghostfolio/api/app/symbol/symbol.module'; import { MarketDataModule as MarketDataServiceModule } from '@ghostfolio/api/services/market-data/market-data.module'; import { SymbolProfileModule } from '@ghostfolio/api/services/symbol-profile/symbol-profile.module'; +import { SymbolModule } from '@ghostfolio/api/services/symbol/symbol.module'; import { Module } from '@nestjs/common'; diff --git a/apps/api/src/app/endpoints/mcp/mcp.module.ts b/apps/api/src/app/endpoints/mcp/mcp.module.ts index 1c32b7754c..70143ba87e 100644 --- a/apps/api/src/app/endpoints/mcp/mcp.module.ts +++ b/apps/api/src/app/endpoints/mcp/mcp.module.ts @@ -1,4 +1,3 @@ -import { SymbolModule } from '@ghostfolio/api/app/symbol/symbol.module'; import { UserModule } from '@ghostfolio/api/app/user/user.module'; import { environment } from '@ghostfolio/api/environments/environment'; import { @@ -14,6 +13,7 @@ import { ImportModule } from '@ghostfolio/api/services/import/import.module'; import { PortfolioTableModule } from '@ghostfolio/api/services/portfolio-table/portfolio-table.module'; import { PortfolioTableService } from '@ghostfolio/api/services/portfolio-table/portfolio-table.service'; import { SymbolProfileModule } from '@ghostfolio/api/services/symbol-profile/symbol-profile.module'; +import { SymbolModule } from '@ghostfolio/api/services/symbol/symbol.module'; import { MCP_ENDPOINT } from '@ghostfolio/common/config'; import { Module } from '@nestjs/common'; diff --git a/apps/api/src/app/endpoints/mcp/mcp.service.spec.ts b/apps/api/src/app/endpoints/mcp/mcp.service.spec.ts index 3df77226ce..c3587200d1 100644 --- a/apps/api/src/app/endpoints/mcp/mcp.service.spec.ts +++ b/apps/api/src/app/endpoints/mcp/mcp.service.spec.ts @@ -1,4 +1,3 @@ -import { SymbolService } from '@ghostfolio/api/app/symbol/symbol.service'; import { UserService } from '@ghostfolio/api/app/user/user.service'; import { CallerFacingError } from '@ghostfolio/api/errors/caller-facing.error'; import { encodeDataSource } from '@ghostfolio/api/helper/data-source.helper'; @@ -10,6 +9,7 @@ import { ImportValidationError } from '@ghostfolio/api/services/import/errors/im import { ImportService } from '@ghostfolio/api/services/import/import.service'; import { PortfolioTableService } from '@ghostfolio/api/services/portfolio-table/portfolio-table.service'; import { SymbolProfileService } from '@ghostfolio/api/services/symbol-profile/symbol-profile.service'; +import { SymbolService } from '@ghostfolio/api/services/symbol/symbol.service'; import { DEFAULT_LANGUAGE_CODE, MCP_MAX_ACTIVITIES diff --git a/apps/api/src/app/endpoints/mcp/mcp.service.ts b/apps/api/src/app/endpoints/mcp/mcp.service.ts index 486e954e9e..cf1909a190 100644 --- a/apps/api/src/app/endpoints/mcp/mcp.service.ts +++ b/apps/api/src/app/endpoints/mcp/mcp.service.ts @@ -1,4 +1,3 @@ -import { SymbolService } from '@ghostfolio/api/app/symbol/symbol.service'; import { UserService } from '@ghostfolio/api/app/user/user.service'; import { CallerFacingError } from '@ghostfolio/api/errors/caller-facing.error'; import { @@ -12,6 +11,7 @@ import { ConfigurationService } from '@ghostfolio/api/services/configuration/con import { ImportService } from '@ghostfolio/api/services/import/import.service'; import { PortfolioTableService } from '@ghostfolio/api/services/portfolio-table/portfolio-table.service'; import { SymbolProfileService } from '@ghostfolio/api/services/symbol-profile/symbol-profile.service'; +import { SymbolService } from '@ghostfolio/api/services/symbol/symbol.service'; import { getIntervalFromDateRange } from '@ghostfolio/common/calculation-helper'; import { DEFAULT_LANGUAGE_CODE } from '@ghostfolio/common/config'; import { hasPermission, permissions } from '@ghostfolio/common/permissions'; diff --git a/apps/api/src/app/symbol/get-lookup.dto.ts b/apps/api/src/app/endpoints/symbols/get-lookup.dto.ts similarity index 100% rename from apps/api/src/app/symbol/get-lookup.dto.ts rename to apps/api/src/app/endpoints/symbols/get-lookup.dto.ts diff --git a/apps/api/src/app/symbol/symbol.controller.ts b/apps/api/src/app/endpoints/symbols/symbols.controller.ts similarity index 94% rename from apps/api/src/app/symbol/symbol.controller.ts rename to apps/api/src/app/endpoints/symbols/symbols.controller.ts index cf26d39d54..eb66dc7346 100644 --- a/apps/api/src/app/symbol/symbol.controller.ts +++ b/apps/api/src/app/endpoints/symbols/symbols.controller.ts @@ -1,10 +1,11 @@ import { HasPermissionGuard } from '@ghostfolio/api/guards/has-permission.guard'; import { TransformDataSourceInRequestInterceptor } from '@ghostfolio/api/interceptors/transform-data-source-in-request/transform-data-source-in-request.interceptor'; import { TransformDataSourceInResponseInterceptor } from '@ghostfolio/api/interceptors/transform-data-source-in-response/transform-data-source-in-response.interceptor'; +import { SymbolService } from '@ghostfolio/api/services/symbol/symbol.service'; import { DataProviderHistoricalResponse, LookupResponse, - SymbolItem + SymbolResponse } from '@ghostfolio/common/interfaces'; import type { RequestWithUser } from '@ghostfolio/common/types'; @@ -28,10 +29,13 @@ import { StatusCodes, getReasonPhrase } from 'http-status-codes'; import { isEmpty } from 'lodash-es'; import { GetLookupDto } from './get-lookup.dto'; -import { SymbolService } from './symbol.service'; -@Controller('symbol') -export class SymbolController { +@Controller([ + 'symbols', + /** @deprecated */ + 'symbol' +]) +export class SymbolsController { public constructor( @Inject(REQUEST) private readonly request: RequestWithUser, private readonly symbolService: SymbolService @@ -72,7 +76,7 @@ export class SymbolController { @Param('symbol') symbol: string, @Query('includeHistoricalData', new ParseIntPipe({ optional: true })) includeHistoricalData = 0 - ): Promise { + ): Promise { if (!DataSource[dataSource]) { throw new HttpException( getReasonPhrase(StatusCodes.NOT_FOUND), diff --git a/apps/api/src/app/endpoints/symbols/symbols.module.ts b/apps/api/src/app/endpoints/symbols/symbols.module.ts new file mode 100644 index 0000000000..81611ddfa8 --- /dev/null +++ b/apps/api/src/app/endpoints/symbols/symbols.module.ts @@ -0,0 +1,17 @@ +import { TransformDataSourceInRequestModule } from '@ghostfolio/api/interceptors/transform-data-source-in-request/transform-data-source-in-request.module'; +import { TransformDataSourceInResponseModule } from '@ghostfolio/api/interceptors/transform-data-source-in-response/transform-data-source-in-response.module'; +import { SymbolModule } from '@ghostfolio/api/services/symbol/symbol.module'; + +import { Module } from '@nestjs/common'; + +import { SymbolsController } from './symbols.controller'; + +@Module({ + controllers: [SymbolsController], + imports: [ + SymbolModule, + TransformDataSourceInRequestModule, + TransformDataSourceInResponseModule + ] +}) +export class SymbolsModule {} diff --git a/apps/api/src/app/symbol/symbol.module.ts b/apps/api/src/app/symbol/symbol.module.ts deleted file mode 100644 index 223a0a832f..0000000000 --- a/apps/api/src/app/symbol/symbol.module.ts +++ /dev/null @@ -1,24 +0,0 @@ -import { TransformDataSourceInRequestModule } from '@ghostfolio/api/interceptors/transform-data-source-in-request/transform-data-source-in-request.module'; -import { TransformDataSourceInResponseModule } from '@ghostfolio/api/interceptors/transform-data-source-in-response/transform-data-source-in-response.module'; -import { DataProviderModule } from '@ghostfolio/api/services/data-provider/data-provider.module'; -import { MarketDataModule } from '@ghostfolio/api/services/market-data/market-data.module'; -import { PrismaModule } from '@ghostfolio/api/services/prisma/prisma.module'; - -import { Module } from '@nestjs/common'; - -import { SymbolController } from './symbol.controller'; -import { SymbolService } from './symbol.service'; - -@Module({ - controllers: [SymbolController], - exports: [SymbolService], - imports: [ - DataProviderModule, - MarketDataModule, - PrismaModule, - TransformDataSourceInRequestModule, - TransformDataSourceInResponseModule - ], - providers: [SymbolService] -}) -export class SymbolModule {} diff --git a/apps/api/src/services/symbol/symbol.module.ts b/apps/api/src/services/symbol/symbol.module.ts new file mode 100644 index 0000000000..cb73ed32b2 --- /dev/null +++ b/apps/api/src/services/symbol/symbol.module.ts @@ -0,0 +1,14 @@ +import { DataProviderModule } from '@ghostfolio/api/services/data-provider/data-provider.module'; +import { MarketDataModule } from '@ghostfolio/api/services/market-data/market-data.module'; +import { PrismaModule } from '@ghostfolio/api/services/prisma/prisma.module'; + +import { Module } from '@nestjs/common'; + +import { SymbolService } from './symbol.service'; + +@Module({ + exports: [SymbolService], + imports: [DataProviderModule, MarketDataModule, PrismaModule], + providers: [SymbolService] +}) +export class SymbolModule {} diff --git a/apps/api/src/app/symbol/symbol.service.ts b/apps/api/src/services/symbol/symbol.service.ts similarity index 100% rename from apps/api/src/app/symbol/symbol.service.ts rename to apps/api/src/services/symbol/symbol.service.ts diff --git a/apps/api/src/services/twitter-bot/twitter-bot.module.ts b/apps/api/src/services/twitter-bot/twitter-bot.module.ts index bdb1a7988e..8854ed00eb 100644 --- a/apps/api/src/services/twitter-bot/twitter-bot.module.ts +++ b/apps/api/src/services/twitter-bot/twitter-bot.module.ts @@ -1,7 +1,7 @@ -import { SymbolModule } from '@ghostfolio/api/app/symbol/symbol.module'; import { BenchmarkModule } from '@ghostfolio/api/services/benchmark/benchmark.module'; import { ConfigurationModule } from '@ghostfolio/api/services/configuration/configuration.module'; import { DataProviderModule } from '@ghostfolio/api/services/data-provider/data-provider.module'; +import { SymbolModule } from '@ghostfolio/api/services/symbol/symbol.module'; import { TwitterBotService } from '@ghostfolio/api/services/twitter-bot/twitter-bot.service'; import { Module } from '@nestjs/common'; diff --git a/apps/api/src/services/twitter-bot/twitter-bot.service.ts b/apps/api/src/services/twitter-bot/twitter-bot.service.ts index 6282b4363b..b49a49e1dd 100644 --- a/apps/api/src/services/twitter-bot/twitter-bot.service.ts +++ b/apps/api/src/services/twitter-bot/twitter-bot.service.ts @@ -1,7 +1,7 @@ -import { SymbolService } from '@ghostfolio/api/app/symbol/symbol.service'; import { BenchmarkService } from '@ghostfolio/api/services/benchmark/benchmark.service'; import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service'; import { DataProviderService } from '@ghostfolio/api/services/data-provider/data-provider.service'; +import { SymbolService } from '@ghostfolio/api/services/symbol/symbol.service'; import { ghostfolioFearAndGreedIndexSymbolStocks } from '@ghostfolio/common/config'; import { resolveFearAndGreedIndex, diff --git a/libs/common/src/lib/interfaces/index.ts b/libs/common/src/lib/interfaces/index.ts index 3df525236c..675e23f603 100644 --- a/libs/common/src/lib/interfaces/index.ts +++ b/libs/common/src/lib/interfaces/index.ts @@ -90,6 +90,7 @@ import type { PortfolioReportResponse } from './responses/portfolio-report.inter import type { PublicPortfolioResponse } from './responses/public-portfolio-response.interface'; import type { QuotesResponse } from './responses/quotes-response.interface'; import type { RedeemCouponResponse } from './responses/redeem-coupon-response.interface'; +import type { SymbolResponse } from './responses/symbol-response.interface'; import type { WatchlistResponse } from './responses/watchlist-response.interface'; import type { RuleSettings } from './rule-settings.interface'; import type { ScraperConfiguration } from './scraper-configuration.interface'; @@ -207,6 +208,7 @@ export { Statistics, SubscriptionOffer, SymbolItem, + SymbolResponse, SystemMessage, User, UserItem, diff --git a/libs/common/src/lib/interfaces/responses/symbol-response.interface.ts b/libs/common/src/lib/interfaces/responses/symbol-response.interface.ts new file mode 100644 index 0000000000..b3b756c34a --- /dev/null +++ b/libs/common/src/lib/interfaces/responses/symbol-response.interface.ts @@ -0,0 +1,3 @@ +import type { SymbolItem } from '../symbol-item.interface'; + +export interface SymbolResponse extends SymbolItem {} diff --git a/libs/ui/src/lib/services/admin.service.ts b/libs/ui/src/lib/services/admin.service.ts index 78314c3b9b..131caf5e17 100644 --- a/libs/ui/src/lib/services/admin.service.ts +++ b/libs/ui/src/lib/services/admin.service.ts @@ -172,7 +172,7 @@ export class AdminService { dateString, symbol }: { dateString: string } & AssetProfileIdentifier) { - const url = `/api/v1/symbol/${dataSource}/${encodeURIComponent(symbol)}/${dateString}`; + const url = `/api/v1/symbols/${dataSource}/${encodeURIComponent(symbol)}/${dateString}`; return this.http.get(url); } diff --git a/libs/ui/src/lib/services/data.service.ts b/libs/ui/src/lib/services/data.service.ts index c7bbf270b1..6161f776e8 100644 --- a/libs/ui/src/lib/services/data.service.ts +++ b/libs/ui/src/lib/services/data.service.ts @@ -60,7 +60,7 @@ import { PortfolioReportResponse, PublicPortfolioResponse, RedeemCouponResponse, - SymbolItem, + SymbolResponse, User, UserItem, WatchlistResponse @@ -826,8 +826,8 @@ export class DataService { params = params.append('includeHistoricalData', includeHistoricalData); } - return this.http.get( - `/api/v1/symbol/${dataSource}/${encodeURIComponent(symbol)}`, + return this.http.get( + `/api/v1/symbols/${dataSource}/${encodeURIComponent(symbol)}`, { params } @@ -848,7 +848,7 @@ export class DataService { } return this.http - .get('/api/v1/symbol/lookup', { params }) + .get('/api/v1/symbols/lookup', { params }) .pipe( map(({ items }) => { return items; diff --git a/libs/ui/src/lib/symbol-autocomplete/symbol-autocomplete.component.stories.ts b/libs/ui/src/lib/symbol-autocomplete/symbol-autocomplete.component.stories.ts index 5bae01c70f..51f5258457 100644 --- a/libs/ui/src/lib/symbol-autocomplete/symbol-autocomplete.component.stories.ts +++ b/libs/ui/src/lib/symbol-autocomplete/symbol-autocomplete.component.stories.ts @@ -91,7 +91,7 @@ export default { useValue: new HttpClientMock( new Map([ [ - '/api/v1/symbol/lookup', + '/api/v1/symbols/lookup', { items: FILTERED_OPTIONS }