Browse Source

resolve comments

pull/4570/head
KenTandrian 4 months ago
committed by Thomas Kaul
parent
commit
260e6f00f6
  1. 2
      apps/api/src/app/app.module.ts
  2. 2
      apps/api/src/app/endpoints/watchlist/create-watchlist-item.dto.ts
  3. 16
      apps/api/src/app/endpoints/watchlist/watchlist.controller.ts
  4. 0
      apps/api/src/app/endpoints/watchlist/watchlist.module.ts
  5. 81
      apps/api/src/app/endpoints/watchlist/watchlist.service.ts

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

@ -38,7 +38,7 @@ import { GhostfolioModule } from './endpoints/data-providers/ghostfolio/ghostfol
import { MarketDataModule } from './endpoints/market-data/market-data.module'; import { MarketDataModule } from './endpoints/market-data/market-data.module';
import { PublicModule } from './endpoints/public/public.module'; import { PublicModule } from './endpoints/public/public.module';
import { TagsModule } from './endpoints/tags/tags.module'; import { TagsModule } from './endpoints/tags/tags.module';
import { WatchlistModule } from './endpoints/watchlists/watchlist.module'; import { WatchlistModule } from './endpoints/watchlist/watchlist.module';
import { ExchangeRateModule } from './exchange-rate/exchange-rate.module'; import { ExchangeRateModule } from './exchange-rate/exchange-rate.module';
import { ExportModule } from './export/export.module'; import { ExportModule } from './export/export.module';
import { HealthModule } from './health/health.module'; import { HealthModule } from './health/health.module';

2
apps/api/src/app/endpoints/watchlists/create-watchlist-item.dto.ts → apps/api/src/app/endpoints/watchlist/create-watchlist-item.dto.ts

@ -2,7 +2,7 @@ import { DataSource } from '@prisma/client';
import { IsEnum, IsString } from 'class-validator'; import { IsEnum, IsString } from 'class-validator';
export class CreateWatchlistItemDto { export class CreateWatchlistItemDto {
@IsEnum(DataSource) @IsEnum(DataSource, { each: true })
dataSource: DataSource; dataSource: DataSource;
@IsString() @IsString()

16
apps/api/src/app/endpoints/watchlists/watchlist.controller.ts → apps/api/src/app/endpoints/watchlist/watchlist.controller.ts

@ -29,13 +29,6 @@ export class WatchlistController {
private readonly watchlistService: WatchlistService private readonly watchlistService: WatchlistService
) {} ) {}
@Get()
@HasPermission(permissions.readWatchlistItems)
@UseGuards(AuthGuard('jwt'), HasPermissionGuard)
public async getWatchlistItems(): Promise<AssetProfileIdentifier[]> {
return this.watchlistService.getWatchlistItems(this.request.user.id);
}
@Post() @Post()
@HasPermission(permissions.createWatchlistItem) @HasPermission(permissions.createWatchlistItem)
@UseGuards(AuthGuard('jwt')) @UseGuards(AuthGuard('jwt'))
@ -70,9 +63,16 @@ export class WatchlistController {
} }
return this.watchlistService.deleteWatchlistItem({ return this.watchlistService.deleteWatchlistItem({
dataSource: watchlistItem.dataSource,
symbol, symbol,
dataSource: watchlistItem.dataSource,
userId: this.request.user.id userId: this.request.user.id
}); });
} }
@Get()
@HasPermission(permissions.readWatchlistItems)
@UseGuards(AuthGuard('jwt'), HasPermissionGuard)
public async getWatchlistItems(): Promise<AssetProfileIdentifier[]> {
return this.watchlistService.getWatchlistItems(this.request.user.id);
}
} }

0
apps/api/src/app/endpoints/watchlists/watchlist.module.ts → apps/api/src/app/endpoints/watchlist/watchlist.module.ts

81
apps/api/src/app/endpoints/watchlists/watchlist.service.ts → apps/api/src/app/endpoints/watchlist/watchlist.service.ts

@ -8,83 +8,72 @@ import { DataSource } from '@prisma/client';
export class WatchlistService { export class WatchlistService {
public constructor(private readonly prismaService: PrismaService) {} public constructor(private readonly prismaService: PrismaService) {}
public async getWatchlistItems(
userId: string
): Promise<AssetProfileIdentifier[]> {
const user = await this.prismaService.user.findUnique({
where: {
id: userId
},
select: {
watchlist: {
select: {
dataSource: true,
symbol: true
}
}
}
});
if (!user) {
throw new NotFoundException(
`User watchlist with ID ${userId} not found.`
);
}
return user.watchlist ?? [];
}
public async createWatchlistItem({ public async createWatchlistItem({
userId,
dataSource, dataSource,
symbol symbol,
userId
}: { }: {
userId: string;
dataSource: DataSource; dataSource: DataSource;
symbol: string; symbol: string;
userId: string;
}): Promise<void> { }): Promise<void> {
const symbolProfile = await this.prismaService.symbolProfile.findUnique({ const symbolProfile = await this.prismaService.symbolProfile.findUnique({
where: { dataSource_symbol: { dataSource, symbol } } where: {
dataSource_symbol: { dataSource, symbol }
}
}); });
if (!symbolProfile) { if (!symbolProfile) {
throw new NotFoundException(`Symbol ${symbol} not found.`); throw new NotFoundException(
`Asset profile not found for ${symbol} (${dataSource}).`
);
} }
await this.prismaService.user.update({ await this.prismaService.user.update({
where: { id: userId },
data: { data: {
watchlist: { watchlist: {
connect: { connect: {
dataSource_symbol: { dataSource_symbol: { dataSource, symbol }
dataSource,
symbol
}
} }
} }
} },
where: { id: userId }
}); });
} }
public async deleteWatchlistItem({ public async deleteWatchlistItem({
userId,
dataSource, dataSource,
symbol symbol,
userId
}: { }: {
userId: string;
dataSource: DataSource; dataSource: DataSource;
symbol: string; symbol: string;
userId: string;
}) { }) {
await this.prismaService.user.update({ await this.prismaService.user.update({
where: { id: userId },
data: { data: {
watchlist: { watchlist: {
disconnect: { disconnect: {
dataSource_symbol: { dataSource_symbol: { dataSource, symbol }
dataSource,
symbol
}
} }
} }
} },
where: { id: userId }
}); });
} }
public async getWatchlistItems(
userId: string
): Promise<AssetProfileIdentifier[]> {
const user = await this.prismaService.user.findUnique({
select: {
watchlist: {
select: { dataSource: true, symbol: true }
}
},
where: { id: userId }
});
return user.watchlist ?? [];
}
} }
Loading…
Cancel
Save