Browse Source

Improve type safety of key in PropertyService

pull/7219/head
AkashNegi1 3 weeks ago
parent
commit
97a26a2615
  1. 12
      apps/api/src/app/admin/admin.service.ts
  2. 9
      apps/api/src/services/property/property.service.ts
  3. 29
      libs/common/src/lib/config.ts

12
apps/api/src/app/admin/admin.service.ts

@ -9,7 +9,8 @@ import { SymbolProfileService } from '@ghostfolio/api/services/symbol-profile/sy
import { import {
PROPERTY_CURRENCIES, PROPERTY_CURRENCIES,
PROPERTY_IS_READ_ONLY_MODE, PROPERTY_IS_READ_ONLY_MODE,
PROPERTY_IS_USER_SIGNUP_ENABLED PROPERTY_IS_USER_SIGNUP_ENABLED,
PropertyKey
} from '@ghostfolio/common/config'; } from '@ghostfolio/common/config';
import { import {
getAssetProfileIdentifier, getAssetProfileIdentifier,
@ -347,9 +348,14 @@ export class AdminService {
let response: Property; let response: Property;
if (value) { if (value) {
response = await this.propertyService.put({ key, value }); response = await this.propertyService.put({
key: key as PropertyKey,
value
});
} else { } else {
response = await this.propertyService.delete({ key }); response = await this.propertyService.delete({
key: key as PropertyKey
});
} }
if (key === PROPERTY_IS_READ_ONLY_MODE && value === 'true') { if (key === PROPERTY_IS_READ_ONLY_MODE && value === 'true') {

9
apps/api/src/services/property/property.service.ts

@ -1,7 +1,8 @@
import { PrismaService } from '@ghostfolio/api/services/prisma/prisma.service'; import { PrismaService } from '@ghostfolio/api/services/prisma/prisma.service';
import { import {
PROPERTY_CURRENCIES, PROPERTY_CURRENCIES,
PROPERTY_IS_USER_SIGNUP_ENABLED PROPERTY_IS_USER_SIGNUP_ENABLED,
PropertyKey
} from '@ghostfolio/common/config'; } from '@ghostfolio/common/config';
import { Injectable } from '@nestjs/common'; import { Injectable } from '@nestjs/common';
@ -12,7 +13,7 @@ import { PropertyValue } from './interfaces/interfaces';
export class PropertyService { export class PropertyService {
public constructor(private readonly prismaService: PrismaService) {} public constructor(private readonly prismaService: PrismaService) {}
public async delete({ key }: { key: string }) { public async delete({ key }: { key: PropertyKey }) {
return this.prismaService.property.delete({ return this.prismaService.property.delete({
where: { key } where: { key }
}); });
@ -40,7 +41,7 @@ export class PropertyService {
return response; return response;
} }
public async getByKey<TValue extends PropertyValue>(aKey: string) { public async getByKey<TValue extends PropertyValue>(aKey: PropertyKey) {
const properties = await this.get(); const properties = await this.get();
return properties[aKey] as TValue; return properties[aKey] as TValue;
} }
@ -51,7 +52,7 @@ export class PropertyService {
); );
} }
public async put({ key, value }: { key: string; value: string }) { public async put({ key, value }: { key: PropertyKey; value: string }) {
return this.prismaService.property.upsert({ return this.prismaService.property.upsert({
create: { key, value }, create: { key, value },
update: { value }, update: { value },

29
libs/common/src/lib/config.ts

@ -267,6 +267,35 @@ export const PROPERTY_SYSTEM_MESSAGE = 'SYSTEM_MESSAGE';
export const PROPERTY_UPTIME = 'UPTIME'; export const PROPERTY_UPTIME = 'UPTIME';
export const PROPERTY_WEB_FETCH_ROUTES = 'WEB_FETCH_ROUTES'; export const PROPERTY_WEB_FETCH_ROUTES = 'WEB_FETCH_ROUTES';
export type PropertyKey =
| typeof PROPERTY_API_KEY_GHOSTFOLIO
| typeof PROPERTY_API_KEY_OPENROUTER
| typeof PROPERTY_BENCHMARKS
| typeof PROPERTY_BETTER_UPTIME_MONITOR_ID
| typeof PROPERTY_COUNTRIES_OF_SUBSCRIBERS
| typeof PROPERTY_COUPONS
| typeof PROPERTY_CURRENCIES
| typeof PROPERTY_CUSTOM_CRYPTOCURRENCIES
| typeof PROPERTY_DATA_SOURCE_MAPPING
| typeof PROPERTY_DATA_SOURCES_GHOSTFOLIO_DATA_PROVIDER_MAX_REQUESTS
| typeof PROPERTY_DEMO_ACCOUNT_ID
| typeof PROPERTY_DEMO_USER_ID
| typeof PROPERTY_DOCKER_HUB_PULLS
| typeof PROPERTY_GITHUB_CONTRIBUTORS
| typeof PROPERTY_GITHUB_STARGAZERS
| typeof PROPERTY_IS_DATA_GATHERING_ENABLED
| typeof PROPERTY_IS_READ_ONLY_MODE
| typeof PROPERTY_IS_USER_SIGNUP_ENABLED
| typeof PROPERTY_OPENROUTER_MODEL
| typeof PROPERTY_OPENROUTER_MODEL_WEB_FETCH
| typeof PROPERTY_PROXY_ROUTES
| typeof PROPERTY_REFERRAL_PARTNERS
| typeof PROPERTY_SLACK_COMMUNITY_USERS
| typeof PROPERTY_STRIPE_CONFIG
| typeof PROPERTY_SYSTEM_MESSAGE
| typeof PROPERTY_UPTIME
| typeof PROPERTY_WEB_FETCH_ROUTES;
export const QUEUE_JOB_STATUS_LIST = [ export const QUEUE_JOB_STATUS_LIST = [
'active', 'active',
'completed', 'completed',

Loading…
Cancel
Save