diff --git a/apps/api/src/app/sitemap/sitemap.controller.ts b/apps/api/src/app/sitemap/sitemap.controller.ts index aad5e39a1..4d6dfb5ea 100644 --- a/apps/api/src/app/sitemap/sitemap.controller.ts +++ b/apps/api/src/app/sitemap/sitemap.controller.ts @@ -4,7 +4,6 @@ import { getYesterday, interpolate } from '@ghostfolio/common/helper'; -import { personalFinanceTools } from '@ghostfolio/common/personal-finance-tools'; import { Controller, Get, Res, VERSION_NEUTRAL, Version } from '@nestjs/common'; import { format } from 'date-fns'; @@ -12,12 +11,15 @@ import { Response } from 'express'; import { readFileSync } from 'fs'; import { join } from 'path'; +import { SitemapService } from './sitemap.service'; + @Controller('sitemap.xml') export class SitemapController { public sitemapXml = ''; public constructor( - private readonly configurationService: ConfigurationService + private readonly configurationService: ConfigurationService, + private readonly sitemapService: SitemapService ) { try { this.sitemapXml = readFileSync( @@ -29,7 +31,7 @@ export class SitemapController { @Get() @Version(VERSION_NEUTRAL) - public async getSitemapXml(@Res() response: Response): Promise { + public getSitemapXml(@Res() response: Response) { const currentDate = format(getYesterday(), DATE_FORMAT); response.setHeader('content-type', 'application/xml'); @@ -39,40 +41,7 @@ export class SitemapController { personalFinanceTools: this.configurationService.get( 'ENABLE_FEATURE_SUBSCRIPTION' ) - ? personalFinanceTools - .map(({ alias, key }) => { - return [ - '', - ` https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-${alias ?? key}`, - ` ${currentDate}T00:00:00+00:00`, - '', - '', - ` https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-${alias ?? key}`, - ` ${currentDate}T00:00:00+00:00`, - '', - '', - ` https://ghostfol.io/es/recursos/personal-finance-tools/alternativa-de-software-libre-a-${alias ?? key}`, - ` ${currentDate}T00:00:00+00:00`, - '', - '', - ` https://ghostfol.io/fr/ressources/personal-finance-tools/alternative-open-source-a-${alias ?? key}`, - ` ${currentDate}T00:00:00+00:00`, - '', - '', - ` https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-${alias ?? key}`, - ` ${currentDate}T00:00:00+00:00`, - '', - '', - ` https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-${alias ?? key}`, - ` ${currentDate}T00:00:00+00:00`, - '', - '', - ` https://ghostfol.io/pt/recursos/personal-finance-tools/alternativa-de-software-livre-ao-${alias ?? key}`, - ` ${currentDate}T00:00:00+00:00`, - '' - ].join('\n'); - }) - .join('\n') + ? this.sitemapService.getPersonalFinanceTools({ currentDate }) : '' }) ); diff --git a/apps/api/src/app/sitemap/sitemap.module.ts b/apps/api/src/app/sitemap/sitemap.module.ts index d1059d408..abf2e370e 100644 --- a/apps/api/src/app/sitemap/sitemap.module.ts +++ b/apps/api/src/app/sitemap/sitemap.module.ts @@ -3,9 +3,11 @@ import { ConfigurationModule } from '@ghostfolio/api/services/configuration/conf import { Module } from '@nestjs/common'; import { SitemapController } from './sitemap.controller'; +import { SitemapService } from './sitemap.service'; @Module({ controllers: [SitemapController], - imports: [ConfigurationModule] + imports: [ConfigurationModule], + providers: [SitemapService] }) export class SitemapModule {} diff --git a/apps/api/src/app/sitemap/sitemap.service.ts b/apps/api/src/app/sitemap/sitemap.service.ts new file mode 100644 index 000000000..d02b9a5bf --- /dev/null +++ b/apps/api/src/app/sitemap/sitemap.service.ts @@ -0,0 +1,47 @@ +import { personalFinanceTools } from '@ghostfolio/common/personal-finance-tools'; + +import { Injectable } from '@nestjs/common'; + +@Injectable() +export class SitemapService { + public getPersonalFinanceTools({ + currentDate + }: { + currentDate: string; + }): string { + return personalFinanceTools + .map(({ alias, key }) => { + return [ + '', + ` https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-${alias ?? key}`, + ` ${currentDate}T00:00:00+00:00`, + '', + '', + ` https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-${alias ?? key}`, + ` ${currentDate}T00:00:00+00:00`, + '', + '', + ` https://ghostfol.io/es/recursos/personal-finance-tools/alternativa-de-software-libre-a-${alias ?? key}`, + ` ${currentDate}T00:00:00+00:00`, + '', + '', + ` https://ghostfol.io/fr/ressources/personal-finance-tools/alternative-open-source-a-${alias ?? key}`, + ` ${currentDate}T00:00:00+00:00`, + '', + '', + ` https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-${alias ?? key}`, + ` ${currentDate}T00:00:00+00:00`, + '', + '', + ` https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-${alias ?? key}`, + ` ${currentDate}T00:00:00+00:00`, + '', + '', + ` https://ghostfol.io/pt/recursos/personal-finance-tools/alternativa-de-software-livre-ao-${alias ?? key}`, + ` ${currentDate}T00:00:00+00:00`, + '' + ].join('\n'); + }) + .join('\n'); + } +}