From 95227caafe0fff23a4fa6752585f68b152f1ce13 Mon Sep 17 00:00:00 2001 From: Thomas Kaul <4159106+dtslvr@users.noreply.github.com> Date: Sat, 31 Oct 2026 09:34:30 +0100 Subject: [PATCH] Task/move user service to services (#8344) Move user service to services --- .../app/endpoints/accounts/accounts.module.ts | 2 +- .../app/endpoints/auth/api-key.strategy.ts | 2 +- .../api/src/app/endpoints/auth/auth.module.ts | 2 +- .../src/app/endpoints/auth/auth.service.ts | 2 +- .../src/app/endpoints/auth/jwt.strategy.ts | 2 +- .../app/endpoints/auth/web-auth.service.ts | 2 +- .../api/src/app/endpoints/info/info.module.ts | 2 +- .../src/app/endpoints/info/info.service.ts | 2 +- apps/api/src/app/endpoints/mcp/mcp.module.ts | 2 +- .../src/app/endpoints/mcp/mcp.service.spec.ts | 2 +- apps/api/src/app/endpoints/mcp/mcp.service.ts | 2 +- .../src/app/endpoints/public/public.module.ts | 2 +- .../app/endpoints/public/public.service.ts | 2 +- .../api/src/app/portfolio/portfolio.module.ts | 2 +- .../app/portfolio/portfolio.service.spec.ts | 2 +- .../src/app/portfolio/portfolio.service.ts | 2 +- apps/api/src/app/user/user.controller.ts | 3 +-- apps/api/src/app/user/user.module.ts | 17 +++--------- apps/api/src/events/events.module.ts | 2 +- .../src/events/portfolio-changed.listener.ts | 2 +- apps/api/src/main.ts | 2 +- .../mcp-authorization.middleware.ts | 2 +- apps/api/src/services/cron/cron.module.ts | 4 +-- apps/api/src/services/cron/cron.service.ts | 2 +- apps/api/src/services/user/user.module.ts | 26 +++++++++++++++++++ .../{app => services}/user/user.service.ts | 0 26 files changed, 54 insertions(+), 38 deletions(-) create mode 100644 apps/api/src/services/user/user.module.ts rename apps/api/src/{app => services}/user/user.service.ts (100%) diff --git a/apps/api/src/app/endpoints/accounts/accounts.module.ts b/apps/api/src/app/endpoints/accounts/accounts.module.ts index 947e26582a..9a9ba19921 100644 --- a/apps/api/src/app/endpoints/accounts/accounts.module.ts +++ b/apps/api/src/app/endpoints/accounts/accounts.module.ts @@ -1,11 +1,11 @@ import { PortfolioModule } from '@ghostfolio/api/app/portfolio/portfolio.module'; -import { UserModule } from '@ghostfolio/api/app/user/user.module'; import { RedactValuesInResponseModule } from '@ghostfolio/api/interceptors/redact-values-in-response/redact-values-in-response.module'; import { AccountBalanceModule } from '@ghostfolio/api/services/account-balance/account-balance.module'; import { AccountModule } from '@ghostfolio/api/services/account/account.module'; import { ApiModule } from '@ghostfolio/api/services/api/api.module'; import { ConfigurationModule } from '@ghostfolio/api/services/configuration/configuration.module'; import { ImpersonationModule } from '@ghostfolio/api/services/impersonation/impersonation.module'; +import { UserModule } from '@ghostfolio/api/services/user/user.module'; import { Module } from '@nestjs/common'; diff --git a/apps/api/src/app/endpoints/auth/api-key.strategy.ts b/apps/api/src/app/endpoints/auth/api-key.strategy.ts index 0e990bb990..c84d3ccd2d 100644 --- a/apps/api/src/app/endpoints/auth/api-key.strategy.ts +++ b/apps/api/src/app/endpoints/auth/api-key.strategy.ts @@ -1,6 +1,6 @@ -import { UserService } from '@ghostfolio/api/app/user/user.service'; import { ApiKeyService } from '@ghostfolio/api/services/api-key/api-key.service'; import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service'; +import { UserService } from '@ghostfolio/api/services/user/user.service'; import { HEADER_KEY_TOKEN } from '@ghostfolio/common/config'; import { hasRole } from '@ghostfolio/common/permissions'; diff --git a/apps/api/src/app/endpoints/auth/auth.module.ts b/apps/api/src/app/endpoints/auth/auth.module.ts index 01951b91c0..353b063d4e 100644 --- a/apps/api/src/app/endpoints/auth/auth.module.ts +++ b/apps/api/src/app/endpoints/auth/auth.module.ts @@ -1,4 +1,3 @@ -import { UserModule } from '@ghostfolio/api/app/user/user.module'; import { ApiKeyService } from '@ghostfolio/api/services/api-key/api-key.service'; import { ApiModule } from '@ghostfolio/api/services/api/api.module'; import { AuthDeviceModule } from '@ghostfolio/api/services/auth-device/auth-device.module'; @@ -10,6 +9,7 @@ import { PrismaModule } from '@ghostfolio/api/services/prisma/prisma.module'; import { PropertyModule } from '@ghostfolio/api/services/property/property.module'; import { PortfolioSnapshotQueueModule } from '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.module'; import { RedisCacheModule } from '@ghostfolio/api/services/redis-cache/redis-cache.module'; +import { UserModule } from '@ghostfolio/api/services/user/user.module'; import { Logger, Module } from '@nestjs/common'; import { JwtModule } from '@nestjs/jwt'; diff --git a/apps/api/src/app/endpoints/auth/auth.service.ts b/apps/api/src/app/endpoints/auth/auth.service.ts index 6fe50dce0a..839578ab5f 100644 --- a/apps/api/src/app/endpoints/auth/auth.service.ts +++ b/apps/api/src/app/endpoints/auth/auth.service.ts @@ -1,6 +1,6 @@ -import { UserService } from '@ghostfolio/api/app/user/user.service'; import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service'; import { PropertyService } from '@ghostfolio/api/services/property/property.service'; +import { UserService } from '@ghostfolio/api/services/user/user.service'; import { Injectable, InternalServerErrorException } from '@nestjs/common'; import { JwtService } from '@nestjs/jwt'; diff --git a/apps/api/src/app/endpoints/auth/jwt.strategy.ts b/apps/api/src/app/endpoints/auth/jwt.strategy.ts index 703fedcd50..2327ed66a2 100644 --- a/apps/api/src/app/endpoints/auth/jwt.strategy.ts +++ b/apps/api/src/app/endpoints/auth/jwt.strategy.ts @@ -1,6 +1,6 @@ -import { UserService } from '@ghostfolio/api/app/user/user.service'; import { isBrowserUserAgent } from '@ghostfolio/api/helper/user-agent.helper'; import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service'; +import { UserService } from '@ghostfolio/api/services/user/user.service'; import { DEFAULT_CURRENCY, DEFAULT_LANGUAGE_CODE, diff --git a/apps/api/src/app/endpoints/auth/web-auth.service.ts b/apps/api/src/app/endpoints/auth/web-auth.service.ts index 3bae3de88f..4265ce8843 100644 --- a/apps/api/src/app/endpoints/auth/web-auth.service.ts +++ b/apps/api/src/app/endpoints/auth/web-auth.service.ts @@ -1,10 +1,10 @@ import { PortfolioSnapshotValue } from '@ghostfolio/api/app/portfolio/interfaces/snapshot-value.interface'; -import { UserService } from '@ghostfolio/api/app/user/user.service'; import { ApiService } from '@ghostfolio/api/services/api/api.service'; import { AuthDeviceService } from '@ghostfolio/api/services/auth-device/auth-device.service'; import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service'; import { PortfolioSnapshotService } from '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.service'; import { RedisCacheService } from '@ghostfolio/api/services/redis-cache/redis-cache.service'; +import { UserService } from '@ghostfolio/api/services/user/user.service'; import { PORTFOLIO_SNAPSHOT_COMPUTATION_QUEUE_PRIORITY_LOW, PORTFOLIO_SNAPSHOT_PROCESS_JOB_NAME, diff --git a/apps/api/src/app/endpoints/info/info.module.ts b/apps/api/src/app/endpoints/info/info.module.ts index 5211040512..1cf7e6e030 100644 --- a/apps/api/src/app/endpoints/info/info.module.ts +++ b/apps/api/src/app/endpoints/info/info.module.ts @@ -1,4 +1,3 @@ -import { UserModule } from '@ghostfolio/api/app/user/user.module'; import { TransformDataSourceInResponseModule } from '@ghostfolio/api/interceptors/transform-data-source-in-response/transform-data-source-in-response.module'; import { BenchmarkModule } from '@ghostfolio/api/services/benchmark/benchmark.module'; import { ConfigurationModule } from '@ghostfolio/api/services/configuration/configuration.module'; @@ -11,6 +10,7 @@ import { DataGatheringQueueModule } from '@ghostfolio/api/services/queues/data-g import { RedisCacheModule } from '@ghostfolio/api/services/redis-cache/redis-cache.module'; import { SubscriptionModule } from '@ghostfolio/api/services/subscription/subscription.module'; import { SymbolProfileModule } from '@ghostfolio/api/services/symbol-profile/symbol-profile.module'; +import { UserModule } from '@ghostfolio/api/services/user/user.module'; import { Module } from '@nestjs/common'; import { JwtModule } from '@nestjs/jwt'; diff --git a/apps/api/src/app/endpoints/info/info.service.ts b/apps/api/src/app/endpoints/info/info.service.ts index 506e4887a0..666b11dd1c 100644 --- a/apps/api/src/app/endpoints/info/info.service.ts +++ b/apps/api/src/app/endpoints/info/info.service.ts @@ -1,4 +1,3 @@ -import { UserService } from '@ghostfolio/api/app/user/user.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'; @@ -7,6 +6,7 @@ import { MarketDataService } from '@ghostfolio/api/services/market-data/market-d import { PropertyService } from '@ghostfolio/api/services/property/property.service'; import { RedisCacheService } from '@ghostfolio/api/services/redis-cache/redis-cache.service'; import { SubscriptionService } from '@ghostfolio/api/services/subscription/subscription.service'; +import { UserService } from '@ghostfolio/api/services/user/user.service'; import { DEFAULT_CURRENCY, ghostfolioFearAndGreedIndexSymbolStocks, diff --git a/apps/api/src/app/endpoints/mcp/mcp.module.ts b/apps/api/src/app/endpoints/mcp/mcp.module.ts index 70143ba87e..f5cd2677cf 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 { UserModule } from '@ghostfolio/api/app/user/user.module'; import { environment } from '@ghostfolio/api/environments/environment'; import { getMcpUserOfBearerToken, @@ -14,6 +13,7 @@ import { PortfolioTableModule } from '@ghostfolio/api/services/portfolio-table/p 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 { UserModule } from '@ghostfolio/api/services/user/user.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 c3587200d1..628e7128bd 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 { 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'; import { AccountBalanceService } from '@ghostfolio/api/services/account-balance/account-balance.service'; @@ -10,6 +9,7 @@ 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 { UserService } from '@ghostfolio/api/services/user/user.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 cf1909a190..3dc086ffd0 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 { UserService } from '@ghostfolio/api/app/user/user.service'; import { CallerFacingError } from '@ghostfolio/api/errors/caller-facing.error'; import { transformDataSourceInRequest, @@ -12,6 +11,7 @@ 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 { UserService } from '@ghostfolio/api/services/user/user.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/endpoints/public/public.module.ts b/apps/api/src/app/endpoints/public/public.module.ts index d015192b0e..6735b9c350 100644 --- a/apps/api/src/app/endpoints/public/public.module.ts +++ b/apps/api/src/app/endpoints/public/public.module.ts @@ -1,9 +1,9 @@ import { PortfolioModule } from '@ghostfolio/api/app/portfolio/portfolio.module'; -import { UserModule } from '@ghostfolio/api/app/user/user.module'; import { TransformDataSourceInRequestModule } from '@ghostfolio/api/interceptors/transform-data-source-in-request/transform-data-source-in-request.module'; import { AccessModule } from '@ghostfolio/api/services/access/access.module'; import { ActivitiesModule } from '@ghostfolio/api/services/activities/activities.module'; import { ExchangeRateDataModule } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.module'; +import { UserModule } from '@ghostfolio/api/services/user/user.module'; import { Module } from '@nestjs/common'; diff --git a/apps/api/src/app/endpoints/public/public.service.ts b/apps/api/src/app/endpoints/public/public.service.ts index 6dfb0a75f9..cafede17f0 100644 --- a/apps/api/src/app/endpoints/public/public.service.ts +++ b/apps/api/src/app/endpoints/public/public.service.ts @@ -1,9 +1,9 @@ import { PortfolioService } from '@ghostfolio/api/app/portfolio/portfolio.service'; -import { UserService } from '@ghostfolio/api/app/user/user.service'; import { AccessService } from '@ghostfolio/api/services/access/access.service'; import { ActivitiesService } from '@ghostfolio/api/services/activities/activities.service'; import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service'; import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.service'; +import { UserService } from '@ghostfolio/api/services/user/user.service'; import { DEFAULT_CURRENCY } from '@ghostfolio/common/config'; import { SubscriptionType } from '@ghostfolio/common/enums'; import { getSum, isCashPosition } from '@ghostfolio/common/helper'; diff --git a/apps/api/src/app/portfolio/portfolio.module.ts b/apps/api/src/app/portfolio/portfolio.module.ts index a1307ac8fd..07debec662 100644 --- a/apps/api/src/app/portfolio/portfolio.module.ts +++ b/apps/api/src/app/portfolio/portfolio.module.ts @@ -1,4 +1,3 @@ -import { UserModule } from '@ghostfolio/api/app/user/user.module'; import { PerformanceLoggingModule } from '@ghostfolio/api/interceptors/performance-logging/performance-logging.module'; import { RedactValuesInResponseModule } from '@ghostfolio/api/interceptors/redact-values-in-response/redact-values-in-response.module'; import { TransformDataSourceInRequestModule } from '@ghostfolio/api/interceptors/transform-data-source-in-request/transform-data-source-in-request.module'; @@ -19,6 +18,7 @@ import { DataGatheringQueueModule } from '@ghostfolio/api/services/queues/data-g import { PortfolioSnapshotQueueModule } from '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.module'; import { RedisCacheModule } from '@ghostfolio/api/services/redis-cache/redis-cache.module'; import { SymbolProfileModule } from '@ghostfolio/api/services/symbol-profile/symbol-profile.module'; +import { UserModule } from '@ghostfolio/api/services/user/user.module'; import { Module } from '@nestjs/common'; diff --git a/apps/api/src/app/portfolio/portfolio.service.spec.ts b/apps/api/src/app/portfolio/portfolio.service.spec.ts index 0a255cffe8..30c274cb90 100644 --- a/apps/api/src/app/portfolio/portfolio.service.spec.ts +++ b/apps/api/src/app/portfolio/portfolio.service.spec.ts @@ -2,7 +2,6 @@ import { PortfolioCalculator } from '@ghostfolio/api/app/portfolio/calculator/po import { userDummyData } from '@ghostfolio/api/app/portfolio/calculator/portfolio-calculator-test-utils'; import { PortfolioCalculatorFactory } from '@ghostfolio/api/app/portfolio/calculator/portfolio-calculator.factory'; import { CurrentRateService } from '@ghostfolio/api/app/portfolio/current-rate.service'; -import { UserService } from '@ghostfolio/api/app/user/user.service'; import { AccountBalanceService } from '@ghostfolio/api/services/account-balance/account-balance.service'; import { AccountService } from '@ghostfolio/api/services/account/account.service'; import { CashDetails } from '@ghostfolio/api/services/account/interfaces/cash-details.interface'; @@ -11,6 +10,7 @@ import { ConfigurationService } from '@ghostfolio/api/services/configuration/con import { DataProviderService } from '@ghostfolio/api/services/data-provider/data-provider.service'; import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.service'; import { SymbolProfileService } from '@ghostfolio/api/services/symbol-profile/symbol-profile.service'; +import { UserService } from '@ghostfolio/api/services/user/user.service'; import { TAG_ID_EMERGENCY_FUND, TAG_ID_EXCLUDE_FROM_ANALYSIS, diff --git a/apps/api/src/app/portfolio/portfolio.service.ts b/apps/api/src/app/portfolio/portfolio.service.ts index c95635c93d..92faa9f712 100644 --- a/apps/api/src/app/portfolio/portfolio.service.ts +++ b/apps/api/src/app/portfolio/portfolio.service.ts @@ -1,4 +1,3 @@ -import { UserService } from '@ghostfolio/api/app/user/user.service'; import { getFactor } from '@ghostfolio/api/helper/portfolio.helper'; import { AccountClusterRiskCurrentInvestment } from '@ghostfolio/api/models/rules/account-cluster-risk/current-investment'; import { AccountClusterRiskSingleAccount } from '@ghostfolio/api/models/rules/account-cluster-risk/single-account'; @@ -26,6 +25,7 @@ import { DataProviderService } from '@ghostfolio/api/services/data-provider/data import { ExchangeRateDataService } from '@ghostfolio/api/services/exchange-rate-data/exchange-rate-data.service'; import { I18nService } from '@ghostfolio/api/services/i18n/i18n.service'; import { SymbolProfileService } from '@ghostfolio/api/services/symbol-profile/symbol-profile.service'; +import { UserService } from '@ghostfolio/api/services/user/user.service'; import { getAnnualizedPerformancePercent, getIntervalFromDateRange diff --git a/apps/api/src/app/user/user.controller.ts b/apps/api/src/app/user/user.controller.ts index 2e01630129..00f7b046e4 100644 --- a/apps/api/src/app/user/user.controller.ts +++ b/apps/api/src/app/user/user.controller.ts @@ -10,6 +10,7 @@ import { TransformDataSourceInResponseInterceptor } from '@ghostfolio/api/interc import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service'; import { PrismaService } from '@ghostfolio/api/services/prisma/prisma.service'; import { PropertyService } from '@ghostfolio/api/services/property/property.service'; +import { UserService } from '@ghostfolio/api/services/user/user.service'; import { THROTTLE_SIGNUP_LIMIT, THROTTLE_SIGNUP_TTL @@ -55,8 +56,6 @@ import { User as UserModel } from '@prisma/client'; import { StatusCodes, getReasonPhrase } from 'http-status-codes'; import { merge, size } from 'lodash-es'; -import { UserService } from './user.service'; - @AllowDuringImpersonation() @Controller('user') export class UserController { diff --git a/apps/api/src/app/user/user.module.ts b/apps/api/src/app/user/user.module.ts index 32c9ff86e2..4e9965091c 100644 --- a/apps/api/src/app/user/user.module.ts +++ b/apps/api/src/app/user/user.module.ts @@ -1,27 +1,20 @@ import { RedactValuesInResponseModule } from '@ghostfolio/api/interceptors/redact-values-in-response/redact-values-in-response.module'; import { TransformDataSourceInResponseModule } from '@ghostfolio/api/interceptors/transform-data-source-in-response/transform-data-source-in-response.module'; -import { ActivitiesModule } from '@ghostfolio/api/services/activities/activities.module'; import { ConfigurationModule } from '@ghostfolio/api/services/configuration/configuration.module'; -import { I18nModule } from '@ghostfolio/api/services/i18n/i18n.module'; import { ImpersonationModule } from '@ghostfolio/api/services/impersonation/impersonation.module'; import { PrismaModule } from '@ghostfolio/api/services/prisma/prisma.module'; import { PropertyModule } from '@ghostfolio/api/services/property/property.module'; -import { SubscriptionModule } from '@ghostfolio/api/services/subscription/subscription.module'; -import { TagModule } from '@ghostfolio/api/services/tag/tag.module'; +import { UserModule as UserServiceModule } from '@ghostfolio/api/services/user/user.module'; import { Module } from '@nestjs/common'; import { JwtModule } from '@nestjs/jwt'; import { UserController } from './user.controller'; -import { UserService } from './user.service'; @Module({ controllers: [UserController], - exports: [UserService], imports: [ - ActivitiesModule, ConfigurationModule, - I18nModule, ImpersonationModule, JwtModule.register({ secret: process.env.JWT_SECRET_KEY, @@ -30,10 +23,8 @@ import { UserService } from './user.service'; PrismaModule, PropertyModule, RedactValuesInResponseModule, - SubscriptionModule, - TagModule, - TransformDataSourceInResponseModule - ], - providers: [UserService] + TransformDataSourceInResponseModule, + UserServiceModule + ] }) export class UserModule {} diff --git a/apps/api/src/events/events.module.ts b/apps/api/src/events/events.module.ts index b5a1c38444..c138262d2e 100644 --- a/apps/api/src/events/events.module.ts +++ b/apps/api/src/events/events.module.ts @@ -1,4 +1,3 @@ -import { UserModule } from '@ghostfolio/api/app/user/user.module'; import { ActivitiesModule } from '@ghostfolio/api/services/activities/activities.module'; import { ApiModule } from '@ghostfolio/api/services/api/api.module'; import { ConfigurationModule } from '@ghostfolio/api/services/configuration/configuration.module'; @@ -7,6 +6,7 @@ import { ExchangeRateDataModule } from '@ghostfolio/api/services/exchange-rate-d import { DataGatheringQueueModule } from '@ghostfolio/api/services/queues/data-gathering/data-gathering.module'; import { PortfolioSnapshotQueueModule } from '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.module'; import { RedisCacheModule } from '@ghostfolio/api/services/redis-cache/redis-cache.module'; +import { UserModule } from '@ghostfolio/api/services/user/user.module'; import { Module } from '@nestjs/common'; diff --git a/apps/api/src/events/portfolio-changed.listener.ts b/apps/api/src/events/portfolio-changed.listener.ts index a081e1bbdb..4c0dd7589d 100644 --- a/apps/api/src/events/portfolio-changed.listener.ts +++ b/apps/api/src/events/portfolio-changed.listener.ts @@ -1,7 +1,7 @@ -import { UserService } from '@ghostfolio/api/app/user/user.service'; import { ApiService } from '@ghostfolio/api/services/api/api.service'; import { PortfolioSnapshotService } from '@ghostfolio/api/services/queues/portfolio-snapshot/portfolio-snapshot.service'; import { RedisCacheService } from '@ghostfolio/api/services/redis-cache/redis-cache.service'; +import { UserService } from '@ghostfolio/api/services/user/user.service'; import { PORTFOLIO_SNAPSHOT_COMPUTATION_QUEUE_PRIORITY_LOW, PORTFOLIO_SNAPSHOT_PROCESS_JOB_NAME, diff --git a/apps/api/src/main.ts b/apps/api/src/main.ts index cb1734baea..91c4fd9b6b 100644 --- a/apps/api/src/main.ts +++ b/apps/api/src/main.ts @@ -1,9 +1,9 @@ -import { UserService } from '@ghostfolio/api/app/user/user.service'; import { getHelmetOptions } from '@ghostfolio/api/helper/security-headers.helper'; import { languageRedirectMiddleware } from '@ghostfolio/api/middlewares/language-redirect.middleware'; import { createMcpAuthorizationMiddleware } from '@ghostfolio/api/middlewares/mcp-authorization.middleware'; import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service'; import { ImpersonationService } from '@ghostfolio/api/services/impersonation/impersonation.service'; +import { UserService } from '@ghostfolio/api/services/user/user.service'; import { BULL_BOARD_ROUTE, DEFAULT_HOST, diff --git a/apps/api/src/middlewares/mcp-authorization.middleware.ts b/apps/api/src/middlewares/mcp-authorization.middleware.ts index 416816f298..d22ffbd3ab 100644 --- a/apps/api/src/middlewares/mcp-authorization.middleware.ts +++ b/apps/api/src/middlewares/mcp-authorization.middleware.ts @@ -1,7 +1,7 @@ -import { UserService } from '@ghostfolio/api/app/user/user.service'; import { getAccessIdOfBearerToken } from '@ghostfolio/api/helper/bearer-token.helper'; import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service'; import { ImpersonationService } from '@ghostfolio/api/services/impersonation/impersonation.service'; +import { UserService } from '@ghostfolio/api/services/user/user.service'; import { HEADER_KEY_TOKEN, MCP_REALM } from '@ghostfolio/common/config'; import { hasRole } from '@ghostfolio/common/permissions'; import type { ImpersonationContext } from '@ghostfolio/common/types'; diff --git a/apps/api/src/services/cron/cron.module.ts b/apps/api/src/services/cron/cron.module.ts index bc14990c15..3afdcaef9d 100644 --- a/apps/api/src/services/cron/cron.module.ts +++ b/apps/api/src/services/cron/cron.module.ts @@ -1,5 +1,3 @@ -import { UserModule } from '@ghostfolio/api/app/user/user.module'; -import { UserService } from '@ghostfolio/api/app/user/user.service'; import { ConfigurationModule } from '@ghostfolio/api/services/configuration/configuration.module'; import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service'; import { PropertyModule } from '@ghostfolio/api/services/property/property.module'; @@ -10,6 +8,8 @@ import { StatisticsGatheringQueueModule } from '@ghostfolio/api/services/queues/ import { StatisticsGatheringService } from '@ghostfolio/api/services/queues/statistics-gathering/statistics-gathering.service'; import { TwitterBotModule } from '@ghostfolio/api/services/twitter-bot/twitter-bot.module'; import { TwitterBotService } from '@ghostfolio/api/services/twitter-bot/twitter-bot.service'; +import { UserModule } from '@ghostfolio/api/services/user/user.module'; +import { UserService } from '@ghostfolio/api/services/user/user.service'; import { Logger, Module } from '@nestjs/common'; diff --git a/apps/api/src/services/cron/cron.service.ts b/apps/api/src/services/cron/cron.service.ts index b3e60ae59b..a233157b6c 100644 --- a/apps/api/src/services/cron/cron.service.ts +++ b/apps/api/src/services/cron/cron.service.ts @@ -1,9 +1,9 @@ -import { UserService } from '@ghostfolio/api/app/user/user.service'; import { ConfigurationService } from '@ghostfolio/api/services/configuration/configuration.service'; import { PropertyService } from '@ghostfolio/api/services/property/property.service'; import { DataGatheringService } from '@ghostfolio/api/services/queues/data-gathering/data-gathering.service'; import { StatisticsGatheringService } from '@ghostfolio/api/services/queues/statistics-gathering/statistics-gathering.service'; import { TwitterBotService } from '@ghostfolio/api/services/twitter-bot/twitter-bot.service'; +import { UserService } from '@ghostfolio/api/services/user/user.service'; import { DATA_GATHERING_QUEUE_PRIORITY_LOW, GATHER_ASSET_PROFILE_PROCESS_JOB_NAME, diff --git a/apps/api/src/services/user/user.module.ts b/apps/api/src/services/user/user.module.ts new file mode 100644 index 0000000000..f2836b0fe9 --- /dev/null +++ b/apps/api/src/services/user/user.module.ts @@ -0,0 +1,26 @@ +import { ActivitiesModule } from '@ghostfolio/api/services/activities/activities.module'; +import { ConfigurationModule } from '@ghostfolio/api/services/configuration/configuration.module'; +import { I18nModule } from '@ghostfolio/api/services/i18n/i18n.module'; +import { PrismaModule } from '@ghostfolio/api/services/prisma/prisma.module'; +import { PropertyModule } from '@ghostfolio/api/services/property/property.module'; +import { SubscriptionModule } from '@ghostfolio/api/services/subscription/subscription.module'; +import { TagModule } from '@ghostfolio/api/services/tag/tag.module'; + +import { Module } from '@nestjs/common'; + +import { UserService } from './user.service'; + +@Module({ + exports: [UserService], + imports: [ + ActivitiesModule, + ConfigurationModule, + I18nModule, + PrismaModule, + PropertyModule, + SubscriptionModule, + TagModule + ], + providers: [UserService] +}) +export class UserModule {} diff --git a/apps/api/src/app/user/user.service.ts b/apps/api/src/services/user/user.service.ts similarity index 100% rename from apps/api/src/app/user/user.service.ts rename to apps/api/src/services/user/user.service.ts