Browse Source

Feature/refactor sitemap module (part 2) (#4985)

* Refactor sitemap module
pull/4986/head
Thomas Kaul 1 week ago
committed by GitHub
parent
commit
314b121584
No known key found for this signature in database GPG Key ID: B5690EEEBB952194
  1. 3
      apps/api/src/app/endpoints/sitemap/sitemap.module.ts
  2. 57
      apps/api/src/app/endpoints/sitemap/sitemap.service.ts
  3. 18
      libs/common/src/lib/routes/routes.ts

3
apps/api/src/app/endpoints/sitemap/sitemap.module.ts

@ -1,4 +1,5 @@
import { ConfigurationModule } from '@ghostfolio/api/services/configuration/configuration.module';
import { I18nModule } from '@ghostfolio/api/services/i18n/i18n.module';
import { Module } from '@nestjs/common';
@ -7,7 +8,7 @@ import { SitemapService } from './sitemap.service';
@Module({
controllers: [SitemapController],
imports: [ConfigurationModule],
imports: [ConfigurationModule, I18nModule],
providers: [SitemapService]
})
export class SitemapModule {}

57
apps/api/src/app/endpoints/sitemap/sitemap.service.ts

@ -1,42 +1,39 @@
import { I18nService } from '@ghostfolio/api/services/i18n/i18n.service';
import { SUPPORTED_LANGUAGE_CODES } from '@ghostfolio/common/config';
import { personalFinanceTools } from '@ghostfolio/common/personal-finance-tools';
import { Injectable } from '@nestjs/common';
@Injectable()
export class SitemapService {
public constructor(private readonly i18nService: I18nService) {}
public getPersonalFinanceTools({ currentDate }: { currentDate: string }) {
return personalFinanceTools
.map(({ alias, key }) => {
return [
'<url>',
` <loc>https://ghostfol.io/de/ressourcen/personal-finance-tools/open-source-alternative-zu-${alias ?? key}</loc>`,
` <lastmod>${currentDate}T00:00:00+00:00</lastmod>`,
'</url>',
'<url>',
` <loc>https://ghostfol.io/en/resources/personal-finance-tools/open-source-alternative-to-${alias ?? key}</loc>`,
` <lastmod>${currentDate}T00:00:00+00:00</lastmod>`,
'</url>',
'<url>',
` <loc>https://ghostfol.io/es/recursos/personal-finance-tools/alternativa-de-software-libre-a-${alias ?? key}</loc>`,
` <lastmod>${currentDate}T00:00:00+00:00</lastmod>`,
'</url>',
'<url>',
` <loc>https://ghostfol.io/fr/ressources/personal-finance-tools/alternative-open-source-a-${alias ?? key}</loc>`,
` <lastmod>${currentDate}T00:00:00+00:00</lastmod>`,
'</url>',
'<url>',
` <loc>https://ghostfol.io/it/risorse/personal-finance-tools/alternativa-open-source-a-${alias ?? key}</loc>`,
` <lastmod>${currentDate}T00:00:00+00:00</lastmod>`,
'</url>',
'<url>',
` <loc>https://ghostfol.io/nl/bronnen/personal-finance-tools/open-source-alternatief-voor-${alias ?? key}</loc>`,
` <lastmod>${currentDate}T00:00:00+00:00</lastmod>`,
'</url>',
'<url>',
` <loc>https://ghostfol.io/pt/recursos/personal-finance-tools/alternativa-de-software-livre-ao-${alias ?? key}</loc>`,
` <lastmod>${currentDate}T00:00:00+00:00</lastmod>`,
'</url>'
].join('\n');
return SUPPORTED_LANGUAGE_CODES.map((languageCode) => {
const resourcesPath = this.i18nService.getTranslation({
languageCode,
id: 'routes.resources'
});
const personalFinanceToolsPath = this.i18nService.getTranslation({
languageCode,
id: 'routes.resources.personalFinanceTools'
});
const openSourceAlternativeToPath = this.i18nService.getTranslation({
languageCode,
id: 'routes.resources.personalFinanceTools.openSourceAlternativeTo'
});
return [
'<url>',
` <loc>https://ghostfol.io/${languageCode}/${resourcesPath}/${personalFinanceToolsPath}/${openSourceAlternativeToPath}-${alias ?? key}</loc>`,
` <lastmod>${currentDate}T00:00:00+00:00</lastmod>`,
'</url>'
].join('\n');
});
})
.join('\n');
}

18
libs/common/src/lib/routes/routes.ts

@ -261,13 +261,13 @@ export const publicRoutes = {
title: $localize`Registration`
},
resources: {
path: $localize`:kebab-case:resources`,
routerLink: ['/' + $localize`:kebab-case:resources`],
path: $localize`:kebab-case@@routes.resources:resources`,
routerLink: ['/' + $localize`:kebab-case@@routes.resources:resources`],
subRoutes: {
glossary: {
path: $localize`:kebab-case:glossary`,
routerLink: [
'/' + $localize`:kebab-case:resources`,
'/' + $localize`:kebab-case@@routes.resources:resources`,
$localize`:kebab-case:glossary`
],
title: $localize`Glossary`
@ -275,7 +275,7 @@ export const publicRoutes = {
guides: {
path: $localize`:kebab-case:guides`,
routerLink: [
'/' + $localize`:kebab-case:resources`,
'/' + $localize`:kebab-case@@routes.resources:resources`,
$localize`:kebab-case:guides`
],
title: $localize`Guides`
@ -283,20 +283,20 @@ export const publicRoutes = {
markets: {
path: $localize`:kebab-case:markets`,
routerLink: [
'/' + $localize`:kebab-case:resources`,
'/' + $localize`:kebab-case@@routes.resources:resources`,
$localize`:kebab-case:markets`
],
title: $localize`Markets`
},
personalFinanceTools: {
path: 'personal-finance-tools',
path: $localize`:kebab-case@@routes.resources.personalFinanceTools:personal-finance-tools`,
routerLink: [
'/' + $localize`:kebab-case:resources`,
'personal-finance-tools'
'/' + $localize`:kebab-case@@routes.resources:resources`,
$localize`:kebab-case@@routes.resources.personalFinanceTools:personal-finance-tools`
],
subRoutes: {
product: {
path: $localize`:kebab-case:open-source-alternative-to`,
path: $localize`:kebab-case@@routes.resources.personalFinanceTools.openSourceAlternativeTo:open-source-alternative-to`,
title: $localize`Open Source Alternative to`
}
},

Loading…
Cancel
Save