Browse Source

Feature/rename Settings to settings in User database schema (#5100)

* Rename Settings to settings in User database schema

* Update changelog
pull/5104/head
Thomas Kaul 2 weeks ago
committed by GitHub
parent
commit
cf8eac3d44
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 1
      CHANGELOG.md
  2. 2
      apps/api/src/app/account/account.controller.ts
  3. 2
      apps/api/src/app/admin/admin.controller.ts
  4. 8
      apps/api/src/app/auth/jwt.strategy.ts
  5. 4
      apps/api/src/app/endpoints/ai/ai.controller.ts
  6. 2
      apps/api/src/app/endpoints/benchmarks/benchmarks.service.ts
  7. 2
      apps/api/src/app/endpoints/public/public.controller.ts
  8. 2
      apps/api/src/app/export/export.controller.ts
  9. 2
      apps/api/src/app/import/import.service.ts
  10. 4
      apps/api/src/app/order/order.controller.ts
  11. 6
      apps/api/src/app/portfolio/portfolio.controller.ts
  12. 14
      apps/api/src/app/portfolio/portfolio.service.ts
  13. 4
      apps/api/src/app/subscription/subscription.service.ts
  14. 2
      apps/api/src/app/user/user.controller.ts
  15. 78
      apps/api/src/app/user/user.service.ts
  16. 2
      apps/api/src/services/data-provider/data-provider.service.ts
  17. 2
      libs/common/src/lib/permissions.ts
  18. 2
      libs/common/src/lib/types/user-with-settings.type.ts
  19. 2
      prisma/schema.prisma

1
CHANGELOG.md

@ -9,6 +9,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
### Changed ### Changed
- Renamed `Settings` to `settings` in the `User` database schema
- Improved the language localization for Dutch (`nl`) - Improved the language localization for Dutch (`nl`)
- Improved the language localization for Español (`es`) - Improved the language localization for Español (`es`)

2
apps/api/src/app/account/account.controller.ts

@ -134,7 +134,7 @@ export class AccountController {
): Promise<AccountBalancesResponse> { ): Promise<AccountBalancesResponse> {
return this.accountBalanceService.getAccountBalances({ return this.accountBalanceService.getAccountBalances({
filters: [{ id, type: 'ACCOUNT' }], filters: [{ id, type: 'ACCOUNT' }],
userCurrency: this.request.user.Settings.settings.baseCurrency, userCurrency: this.request.user.settings.settings.baseCurrency,
userId: this.request.user.id userId: this.request.user.id
}); });
} }

2
apps/api/src/app/admin/admin.controller.ts

@ -255,7 +255,7 @@ export class AdminController {
return this.adminService.addAssetProfile({ return this.adminService.addAssetProfile({
dataSource, dataSource,
symbol, symbol,
currency: this.request.user.Settings.settings.baseCurrency currency: this.request.user.settings.settings.baseCurrency
}); });
} }

8
apps/api/src/app/auth/jwt.strategy.ts

@ -56,12 +56,12 @@ export class JwtStrategy extends PassportStrategy(Strategy, 'jwt') {
}); });
} }
if (!user.Settings.settings.baseCurrency) { if (!user.settings.settings.baseCurrency) {
user.Settings.settings.baseCurrency = DEFAULT_CURRENCY; user.settings.settings.baseCurrency = DEFAULT_CURRENCY;
} }
if (!user.Settings.settings.language) { if (!user.settings.settings.language) {
user.Settings.settings.language = DEFAULT_LANGUAGE_CODE; user.settings.settings.language = DEFAULT_LANGUAGE_CODE;
} }
return user; return user;

4
apps/api/src/app/endpoints/ai/ai.controller.ts

@ -49,8 +49,8 @@ export class AiController {
filters, filters,
mode, mode,
impersonationId: undefined, impersonationId: undefined,
languageCode: this.request.user.Settings.settings.language, languageCode: this.request.user.settings.settings.language,
userCurrency: this.request.user.Settings.settings.baseCurrency, userCurrency: this.request.user.settings.settings.baseCurrency,
userId: this.request.user.id userId: this.request.user.id
}); });

2
apps/api/src/app/endpoints/benchmarks/benchmarks.service.ts

@ -45,7 +45,7 @@ export class BenchmarksService {
withExcludedAccounts?: boolean; withExcludedAccounts?: boolean;
} & AssetProfileIdentifier): Promise<BenchmarkMarketDataDetails> { } & AssetProfileIdentifier): Promise<BenchmarkMarketDataDetails> {
const marketData: { date: string; value: number }[] = []; const marketData: { date: string; value: number }[] = [];
const userCurrency = user.Settings.settings.baseCurrency; const userCurrency = user.settings.settings.baseCurrency;
const userId = user.id; const userId = user.id;
const { chart } = await this.portfolioService.getPerformance({ const { chart } = await this.portfolioService.getPerformance({

2
apps/api/src/app/endpoints/public/public.controller.ts

@ -108,7 +108,7 @@ export class PublicController {
this.exchangeRateDataService.toCurrency( this.exchangeRateDataService.toCurrency(
quantity * marketPrice, quantity * marketPrice,
currency, currency,
this.request.user?.Settings?.settings.baseCurrency ?? this.request.user?.settings?.settings.baseCurrency ??
DEFAULT_CURRENCY DEFAULT_CURRENCY
) )
); );

2
apps/api/src/app/export/export.controller.ts

@ -48,7 +48,7 @@ export class ExportController {
return this.exportService.export({ return this.exportService.export({
activityIds, activityIds,
filters, filters,
userCurrency: this.request.user.Settings.settings.baseCurrency, userCurrency: this.request.user.settings.settings.baseCurrency,
userId: this.request.user.id userId: this.request.user.id
}); });
} }

2
apps/api/src/app/import/import.service.ts

@ -159,7 +159,7 @@ export class ImportService {
user: UserWithSettings; user: UserWithSettings;
}): Promise<Activity[]> { }): Promise<Activity[]> {
const accountIdMapping: { [oldAccountId: string]: string } = {}; const accountIdMapping: { [oldAccountId: string]: string } = {};
const userCurrency = user.Settings.settings.baseCurrency; const userCurrency = user.settings.settings.baseCurrency;
if (!isDryRun && accountsWithBalancesDto?.length) { if (!isDryRun && accountsWithBalancesDto?.length) {
const [existingAccounts, existingPlatforms] = await Promise.all([ const [existingAccounts, existingPlatforms] = await Promise.all([

4
apps/api/src/app/order/order.controller.ts

@ -131,7 +131,7 @@ export class OrderController {
const impersonationUserId = const impersonationUserId =
await this.impersonationService.validateImpersonationId(impersonationId); await this.impersonationService.validateImpersonationId(impersonationId);
const userCurrency = this.request.user.Settings.settings.baseCurrency; const userCurrency = this.request.user.settings.settings.baseCurrency;
const { activities, count } = await this.orderService.getOrders({ const { activities, count } = await this.orderService.getOrders({
endDate, endDate,
@ -160,7 +160,7 @@ export class OrderController {
): Promise<Activity> { ): Promise<Activity> {
const impersonationUserId = const impersonationUserId =
await this.impersonationService.validateImpersonationId(impersonationId); await this.impersonationService.validateImpersonationId(impersonationId);
const userCurrency = this.request.user.Settings.settings.baseCurrency; const userCurrency = this.request.user.settings.settings.baseCurrency;
const { activities } = await this.orderService.getOrders({ const { activities } = await this.orderService.getOrders({
userCurrency, userCurrency,

6
apps/api/src/app/portfolio/portfolio.controller.ts

@ -317,7 +317,7 @@ export class PortfolioController {
const impersonationUserId = const impersonationUserId =
await this.impersonationService.validateImpersonationId(impersonationId); await this.impersonationService.validateImpersonationId(impersonationId);
const userCurrency = this.request.user.Settings.settings.baseCurrency; const userCurrency = this.request.user.settings.settings.baseCurrency;
const { endDate, startDate } = getIntervalFromDateRange(dateRange); const { endDate, startDate } = getIntervalFromDateRange(dateRange);
@ -454,7 +454,7 @@ export class PortfolioController {
filters, filters,
groupBy, groupBy,
impersonationId, impersonationId,
savingsRate: this.request.user?.Settings?.settings.savingsRate, savingsRate: this.request.user?.settings?.settings.savingsRate,
userId: this.request.user.id userId: this.request.user.id
}); });
@ -538,7 +538,7 @@ export class PortfolioController {
user: this.request.user user: this.request.user
}) || }) ||
isRestrictedView(this.request.user) || isRestrictedView(this.request.user) ||
this.request.user.Settings.settings.viewMode === 'ZEN' this.request.user.settings.settings.viewMode === 'ZEN'
) { ) {
performanceInformation.chart = performanceInformation.chart.map( performanceInformation.chart = performanceInformation.chart.map(
({ ({

14
apps/api/src/app/portfolio/portfolio.service.ts

@ -173,7 +173,7 @@ export class PortfolioService {
}) })
]); ]);
const userCurrency = this.request.user.Settings.settings.baseCurrency; const userCurrency = this.request.user.settings.settings.baseCurrency;
return accounts.map((account) => { return accounts.map((account) => {
let transactionCount = 0; let transactionCount = 0;
@ -409,7 +409,7 @@ export class PortfolioService {
const userCurrency = this.getUserCurrency(user); const userCurrency = this.getUserCurrency(user);
const emergencyFund = new Big( const emergencyFund = new Big(
(user.Settings?.settings as UserSettings)?.emergencyFund ?? 0 (user.settings?.settings as UserSettings)?.emergencyFund ?? 0
); );
const { activities } = const { activities } =
@ -1134,7 +1134,7 @@ export class PortfolioService {
userId: string; userId: string;
}): Promise<PortfolioReportResponse> { }): Promise<PortfolioReportResponse> {
userId = await this.getUserId(impersonationId, userId); userId = await this.getUserId(impersonationId, userId);
const userSettings = this.request.user.Settings.settings as UserSettings; const userSettings = this.request.user.settings.settings as UserSettings;
const { accounts, holdings, markets, marketsAdvanced, summary } = const { accounts, holdings, markets, marketsAdvanced, summary } =
await this.getDetails({ await this.getDetails({
@ -1813,7 +1813,7 @@ export class PortfolioService {
const totalEmergencyFund = this.getTotalEmergencyFund({ const totalEmergencyFund = this.getTotalEmergencyFund({
emergencyFundHoldingsValueInBaseCurrency, emergencyFundHoldingsValueInBaseCurrency,
userSettings: user.Settings?.settings as UserSettings userSettings: user.settings?.settings as UserSettings
}); });
const fees = await portfolioCalculator.getFeesInBaseCurrency(); const fees = await portfolioCalculator.getFeesInBaseCurrency();
@ -1980,8 +1980,8 @@ export class PortfolioService {
private getUserCurrency(aUser?: UserWithSettings) { private getUserCurrency(aUser?: UserWithSettings) {
return ( return (
aUser?.Settings?.settings.baseCurrency ?? aUser?.settings?.settings.baseCurrency ??
this.request.user?.Settings?.settings.baseCurrency ?? this.request.user?.settings?.settings.baseCurrency ??
DEFAULT_CURRENCY DEFAULT_CURRENCY
); );
} }
@ -1996,7 +1996,7 @@ export class PortfolioService {
private getUserPerformanceCalculationType( private getUserPerformanceCalculationType(
aUser: UserWithSettings aUser: UserWithSettings
): PerformanceCalculationType { ): PerformanceCalculationType {
return aUser?.Settings?.settings.performanceCalculationType; return aUser?.settings?.settings.performanceCalculationType;
} }
private async getValueOfAccountsAndPlatforms({ private async getValueOfAccountsAndPlatforms({

4
apps/api/src/app/subscription/subscription.service.ts

@ -60,7 +60,7 @@ export class SubscriptionService {
const checkoutSessionCreateParams: Stripe.Checkout.SessionCreateParams = { const checkoutSessionCreateParams: Stripe.Checkout.SessionCreateParams = {
cancel_url: `${this.configurationService.get('ROOT_URL')}/${ cancel_url: `${this.configurationService.get('ROOT_URL')}/${
user.Settings.settings.language user.settings.settings.language
}/account`, }/account`,
client_reference_id: user.id, client_reference_id: user.id,
line_items: [ line_items: [
@ -70,7 +70,7 @@ export class SubscriptionService {
} }
], ],
locale: locale:
(user.Settings?.settings (user.settings?.settings
?.language as Stripe.Checkout.SessionCreateParams.Locale) ?? ?.language as Stripe.Checkout.SessionCreateParams.Locale) ??
DEFAULT_LANGUAGE_CODE, DEFAULT_LANGUAGE_CODE,
metadata: subscriptionOffer metadata: subscriptionOffer

2
apps/api/src/app/user/user.controller.ts

@ -166,7 +166,7 @@ export class UserController {
const userSettings: UserSettings = merge( const userSettings: UserSettings = merge(
{}, {},
this.request.user.Settings.settings as UserSettings, this.request.user.settings.settings as UserSettings,
data data
); );

78
apps/api/src/app/user/user.service.ts

@ -95,7 +95,7 @@ export class UserService {
} }
public async getUser( public async getUser(
{ accounts, id, permissions, Settings, subscription }: UserWithSettings, { accounts, id, permissions, settings, subscription }: UserWithSettings,
aLocale = locale aLocale = locale
): Promise<IUser> { ): Promise<IUser> {
const userData = await Promise.all([ const userData = await Promise.all([
@ -158,8 +158,8 @@ export class UserService {
}), }),
dateOfFirstActivity: firstActivity?.date ?? new Date(), dateOfFirstActivity: firstActivity?.date ?? new Date(),
settings: { settings: {
...(Settings.settings as UserSettings), ...(settings.settings as UserSettings),
locale: (Settings.settings as UserSettings)?.locale ?? aLocale locale: (settings.settings as UserSettings)?.locale ?? aLocale
} }
}; };
} }
@ -189,7 +189,7 @@ export class UserService {
id, id,
provider, provider,
role, role,
Settings, settings,
subscriptions, subscriptions,
thirdPartyId, thirdPartyId,
updatedAt updatedAt
@ -200,7 +200,7 @@ export class UserService {
include: { platform: true } include: { platform: true }
}, },
analytics: true, analytics: true,
Settings: true, settings: true,
subscriptions: true subscriptions: true
}, },
where: userWhereUniqueInput where: userWhereUniqueInput
@ -215,7 +215,7 @@ export class UserService {
id, id,
provider, provider,
role, role,
Settings: Settings as UserWithSettings['Settings'], settings: settings as UserWithSettings['settings'],
thirdPartyId, thirdPartyId,
updatedAt, updatedAt,
activityCount: analytics?.activityCount, activityCount: analytics?.activityCount,
@ -223,13 +223,13 @@ export class UserService {
analytics?.dataProviderGhostfolioDailyRequests analytics?.dataProviderGhostfolioDailyRequests
}; };
if (user?.Settings) { if (user?.settings) {
if (!user.Settings.settings) { if (!user.settings.settings) {
user.Settings.settings = {}; user.settings.settings = {};
} }
} else if (user) { } else if (user) {
// Set default settings if needed // Set default settings if needed
user.Settings = { user.settings = {
settings: {}, settings: {},
updatedAt: new Date(), updatedAt: new Date(),
userId: user?.id userId: user?.id
@ -237,120 +237,120 @@ export class UserService {
} }
// Set default value for base currency // Set default value for base currency
if (!(user.Settings.settings as UserSettings)?.baseCurrency) { if (!(user.settings.settings as UserSettings)?.baseCurrency) {
(user.Settings.settings as UserSettings).baseCurrency = DEFAULT_CURRENCY; (user.settings.settings as UserSettings).baseCurrency = DEFAULT_CURRENCY;
} }
// Set default value for date range // Set default value for date range
(user.Settings.settings as UserSettings).dateRange = (user.settings.settings as UserSettings).dateRange =
(user.Settings.settings as UserSettings).viewMode === 'ZEN' (user.settings.settings as UserSettings).viewMode === 'ZEN'
? 'max' ? 'max'
: ((user.Settings.settings as UserSettings)?.dateRange ?? 'max'); : ((user.settings.settings as UserSettings)?.dateRange ?? 'max');
// Set default value for performance calculation type // Set default value for performance calculation type
if (!(user.Settings.settings as UserSettings)?.performanceCalculationType) { if (!(user.settings.settings as UserSettings)?.performanceCalculationType) {
(user.Settings.settings as UserSettings).performanceCalculationType = (user.settings.settings as UserSettings).performanceCalculationType =
PerformanceCalculationType.ROAI; PerformanceCalculationType.ROAI;
} }
// Set default value for view mode // Set default value for view mode
if (!(user.Settings.settings as UserSettings).viewMode) { if (!(user.settings.settings as UserSettings).viewMode) {
(user.Settings.settings as UserSettings).viewMode = 'DEFAULT'; (user.settings.settings as UserSettings).viewMode = 'DEFAULT';
} }
(user.Settings.settings as UserSettings).xRayRules = { (user.settings.settings as UserSettings).xRayRules = {
AccountClusterRiskCurrentInvestment: AccountClusterRiskCurrentInvestment:
new AccountClusterRiskCurrentInvestment( new AccountClusterRiskCurrentInvestment(
undefined, undefined,
undefined, undefined,
undefined, undefined,
{} {}
).getSettings(user.Settings.settings), ).getSettings(user.settings.settings),
AccountClusterRiskSingleAccount: new AccountClusterRiskSingleAccount( AccountClusterRiskSingleAccount: new AccountClusterRiskSingleAccount(
undefined, undefined,
undefined, undefined,
undefined, undefined,
{} {}
).getSettings(user.Settings.settings), ).getSettings(user.settings.settings),
AssetClassClusterRiskEquity: new AssetClassClusterRiskEquity( AssetClassClusterRiskEquity: new AssetClassClusterRiskEquity(
undefined, undefined,
undefined, undefined,
undefined, undefined,
undefined undefined
).getSettings(user.Settings.settings), ).getSettings(user.settings.settings),
AssetClassClusterRiskFixedIncome: new AssetClassClusterRiskFixedIncome( AssetClassClusterRiskFixedIncome: new AssetClassClusterRiskFixedIncome(
undefined, undefined,
undefined, undefined,
undefined, undefined,
undefined undefined
).getSettings(user.Settings.settings), ).getSettings(user.settings.settings),
CurrencyClusterRiskBaseCurrencyCurrentInvestment: CurrencyClusterRiskBaseCurrencyCurrentInvestment:
new CurrencyClusterRiskBaseCurrencyCurrentInvestment( new CurrencyClusterRiskBaseCurrencyCurrentInvestment(
undefined, undefined,
undefined, undefined,
undefined, undefined,
undefined undefined
).getSettings(user.Settings.settings), ).getSettings(user.settings.settings),
CurrencyClusterRiskCurrentInvestment: CurrencyClusterRiskCurrentInvestment:
new CurrencyClusterRiskCurrentInvestment( new CurrencyClusterRiskCurrentInvestment(
undefined, undefined,
undefined, undefined,
undefined, undefined,
undefined undefined
).getSettings(user.Settings.settings), ).getSettings(user.settings.settings),
EconomicMarketClusterRiskDevelopedMarkets: EconomicMarketClusterRiskDevelopedMarkets:
new EconomicMarketClusterRiskDevelopedMarkets( new EconomicMarketClusterRiskDevelopedMarkets(
undefined, undefined,
undefined, undefined,
undefined undefined
).getSettings(user.Settings.settings), ).getSettings(user.settings.settings),
EconomicMarketClusterRiskEmergingMarkets: EconomicMarketClusterRiskEmergingMarkets:
new EconomicMarketClusterRiskEmergingMarkets( new EconomicMarketClusterRiskEmergingMarkets(
undefined, undefined,
undefined, undefined,
undefined undefined
).getSettings(user.Settings.settings), ).getSettings(user.settings.settings),
EmergencyFundSetup: new EmergencyFundSetup( EmergencyFundSetup: new EmergencyFundSetup(
undefined, undefined,
undefined, undefined,
undefined, undefined,
undefined undefined
).getSettings(user.Settings.settings), ).getSettings(user.settings.settings),
FeeRatioInitialInvestment: new FeeRatioInitialInvestment( FeeRatioInitialInvestment: new FeeRatioInitialInvestment(
undefined, undefined,
undefined, undefined,
undefined, undefined,
undefined, undefined,
undefined undefined
).getSettings(user.Settings.settings), ).getSettings(user.settings.settings),
RegionalMarketClusterRiskAsiaPacific: RegionalMarketClusterRiskAsiaPacific:
new RegionalMarketClusterRiskAsiaPacific( new RegionalMarketClusterRiskAsiaPacific(
undefined, undefined,
undefined, undefined,
undefined undefined
).getSettings(user.Settings.settings), ).getSettings(user.settings.settings),
RegionalMarketClusterRiskEmergingMarkets: RegionalMarketClusterRiskEmergingMarkets:
new RegionalMarketClusterRiskEmergingMarkets( new RegionalMarketClusterRiskEmergingMarkets(
undefined, undefined,
undefined, undefined,
undefined undefined
).getSettings(user.Settings.settings), ).getSettings(user.settings.settings),
RegionalMarketClusterRiskEurope: new RegionalMarketClusterRiskEurope( RegionalMarketClusterRiskEurope: new RegionalMarketClusterRiskEurope(
undefined, undefined,
undefined, undefined,
undefined undefined
).getSettings(user.Settings.settings), ).getSettings(user.settings.settings),
RegionalMarketClusterRiskJapan: new RegionalMarketClusterRiskJapan( RegionalMarketClusterRiskJapan: new RegionalMarketClusterRiskJapan(
undefined, undefined,
undefined, undefined,
undefined undefined
).getSettings(user.Settings.settings), ).getSettings(user.settings.settings),
RegionalMarketClusterRiskNorthAmerica: RegionalMarketClusterRiskNorthAmerica:
new RegionalMarketClusterRiskNorthAmerica( new RegionalMarketClusterRiskNorthAmerica(
undefined, undefined,
undefined, undefined,
undefined undefined
).getSettings(user.Settings.settings) ).getSettings(user.settings.settings)
}; };
let currentPermissions = getPermissions(user.role); let currentPermissions = getPermissions(user.role);
@ -360,7 +360,7 @@ export class UserService {
currentPermissions.push(permissions.updateOwnAccessToken); currentPermissions.push(permissions.updateOwnAccessToken);
} }
if (!(user.Settings.settings as UserSettings).isExperimentalFeatures) { if (!(user.settings.settings as UserSettings).isExperimentalFeatures) {
// currentPermissions = without( // currentPermissions = without(
// currentPermissions, // currentPermissions,
// permissions.xyz // permissions.xyz
@ -411,10 +411,10 @@ export class UserService {
); );
// Reset benchmark // Reset benchmark
user.Settings.settings.benchmark = undefined; user.settings.settings.benchmark = undefined;
// Reset holdings view mode // Reset holdings view mode
user.Settings.settings.holdingsViewMode = undefined; user.settings.settings.holdingsViewMode = undefined;
} else if (user.subscription?.type === 'Premium') { } else if (user.subscription?.type === 'Premium') {
if (!hasRole(user, Role.DEMO)) { if (!hasRole(user, Role.DEMO)) {
currentPermissions.push(permissions.createApiKey); currentPermissions.push(permissions.createApiKey);
@ -510,7 +510,7 @@ export class UserService {
}) })
} }
}, },
Settings: { settings: {
create: { create: {
settings: { settings: {
currency: DEFAULT_CURRENCY currency: DEFAULT_CURRENCY

2
apps/api/src/services/data-provider/data-provider.service.ts

@ -678,7 +678,7 @@ export class DataProviderService implements OnModuleInit {
if ( if (
lookupItem.assetSubClass === 'CRYPTOCURRENCY' && lookupItem.assetSubClass === 'CRYPTOCURRENCY' &&
user?.Settings?.settings.isExperimentalFeatures user?.settings?.settings.isExperimentalFeatures
) { ) {
// Remove DEFAULT_CURRENCY at the end of cryptocurrency names // Remove DEFAULT_CURRENCY at the end of cryptocurrency names
lookupItem.name = lookupItem.name.replace( lookupItem.name = lookupItem.name.replace(

2
libs/common/src/lib/permissions.ts

@ -197,5 +197,5 @@ export function hasRole(aUser: UserWithSettings, aRole: Role) {
} }
export function isRestrictedView(aUser: UserWithSettings) { export function isRestrictedView(aUser: UserWithSettings) {
return aUser.Settings.settings.isRestrictedView ?? false; return aUser.settings.settings.isRestrictedView ?? false;
} }

2
libs/common/src/lib/types/user-with-settings.type.ts

@ -10,7 +10,7 @@ export type UserWithSettings = User & {
activityCount: number; activityCount: number;
dataProviderGhostfolioDailyRequests: number; dataProviderGhostfolioDailyRequests: number;
permissions?: string[]; permissions?: string[];
Settings: Settings & { settings: UserSettings }; settings: Settings & { settings: UserSettings };
subscription?: { subscription?: {
expiresAt?: Date; expiresAt?: Date;
offer: SubscriptionOffer; offer: SubscriptionOffer;

2
prisma/schema.prisma

@ -256,13 +256,13 @@ model User {
id String @id @default(uuid()) id String @id @default(uuid())
provider Provider @default(ANONYMOUS) provider Provider @default(ANONYMOUS)
role Role @default(USER) role Role @default(USER)
settings Settings?
subscriptions Subscription[] subscriptions Subscription[]
tags Tag[] tags Tag[]
thirdPartyId String? thirdPartyId String?
updatedAt DateTime @updatedAt updatedAt DateTime @updatedAt
watchlist SymbolProfile[] @relation("UserWatchlist") watchlist SymbolProfile[] @relation("UserWatchlist")
AccessGive Access[] @relation("accessGive") AccessGive Access[] @relation("accessGive")
Settings Settings?
SymbolProfile SymbolProfile[] SymbolProfile SymbolProfile[]
@@index([accessToken]) @@index([accessToken])

Loading…
Cancel
Save