Browse Source

Feature/create endpoint to get all platforms (#6096)

Add new endpoint GET api/v1/platforms to retrieve all platforms with
readPlatforms permission. This provides a simpler alternative to the
existing platform endpoint that includes account counts.

- Create PlatformsController with GET endpoint using readPlatforms permission
- Create PlatformsModule importing PlatformModule for service reuse
- Register PlatformsModule in app.module.ts
- Add readPlatforms permission to USER role

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
pull/6097/head
0pilatos0 2 months ago
parent
commit
0879fede39
  1. 2
      apps/api/src/app/app.module.ts
  2. 20
      apps/api/src/app/endpoints/platforms/platforms.controller.ts
  3. 11
      apps/api/src/app/endpoints/platforms/platforms.module.ts
  4. 1
      libs/common/src/lib/permissions.ts

2
apps/api/src/app/app.module.ts

@ -37,6 +37,7 @@ import { AssetsModule } from './endpoints/assets/assets.module';
import { BenchmarksModule } from './endpoints/benchmarks/benchmarks.module';
import { GhostfolioModule } from './endpoints/data-providers/ghostfolio/ghostfolio.module';
import { MarketDataModule } from './endpoints/market-data/market-data.module';
import { PlatformsModule } from './endpoints/platforms/platforms.module';
import { PublicModule } from './endpoints/public/public.module';
import { SitemapModule } from './endpoints/sitemap/sitemap.module';
import { TagsModule } from './endpoints/tags/tags.module';
@ -95,6 +96,7 @@ import { UserModule } from './user/user.module';
MarketDataModule,
OrderModule,
PlatformModule,
PlatformsModule,
PortfolioModule,
PortfolioSnapshotQueueModule,
PrismaModule,

20
apps/api/src/app/endpoints/platforms/platforms.controller.ts

@ -0,0 +1,20 @@
import { HasPermission } from '@ghostfolio/api/decorators/has-permission.decorator';
import { HasPermissionGuard } from '@ghostfolio/api/guards/has-permission.guard';
import { PlatformService } from '@ghostfolio/api/app/platform/platform.service';
import { permissions } from '@ghostfolio/common/permissions';
import { Controller, Get, UseGuards } from '@nestjs/common';
import { AuthGuard } from '@nestjs/passport';
import { Platform } from '@prisma/client';
@Controller('platforms')
export class PlatformsController {
public constructor(private readonly platformService: PlatformService) {}
@Get()
@HasPermission(permissions.readPlatforms)
@UseGuards(AuthGuard('jwt'), HasPermissionGuard)
public async getPlatforms(): Promise<Platform[]> {
return this.platformService.getPlatforms();
}
}

11
apps/api/src/app/endpoints/platforms/platforms.module.ts

@ -0,0 +1,11 @@
import { PlatformModule } from '@ghostfolio/api/app/platform/platform.module';
import { Module } from '@nestjs/common';
import { PlatformsController } from './platforms.controller';
@Module({
controllers: [PlatformsController],
imports: [PlatformModule]
})
export class PlatformsModule {}

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

@ -136,6 +136,7 @@ export function getPermissions(aRole: Role): string[] {
permissions.deleteWatchlistItem,
permissions.readAiPrompt,
permissions.readMarketDataOfOwnAssetProfile,
permissions.readPlatforms,
permissions.readWatchlist,
permissions.updateAccount,
permissions.updateAccess,

Loading…
Cancel
Save