2021-05-16 22:11:14 +02:00
|
|
|
import { RequestWithUser } from '@ghostfolio/common/types';
|
2021-04-13 21:53:58 +02:00
|
|
|
import {
|
|
|
|
Controller,
|
|
|
|
Get,
|
|
|
|
HttpException,
|
|
|
|
Inject,
|
|
|
|
Param,
|
|
|
|
Query,
|
|
|
|
UseGuards
|
|
|
|
} from '@nestjs/common';
|
|
|
|
import { REQUEST } from '@nestjs/core';
|
|
|
|
import { AuthGuard } from '@nestjs/passport';
|
|
|
|
import { StatusCodes, getReasonPhrase } from 'http-status-codes';
|
|
|
|
|
|
|
|
import { LookupItem } from './interfaces/lookup-item.interface';
|
|
|
|
import { SymbolItem } from './interfaces/symbol-item.interface';
|
|
|
|
import { SymbolService } from './symbol.service';
|
|
|
|
|
|
|
|
@Controller('symbol')
|
|
|
|
export class SymbolController {
|
|
|
|
public constructor(
|
|
|
|
private readonly symbolService: SymbolService,
|
|
|
|
@Inject(REQUEST) private readonly request: RequestWithUser
|
|
|
|
) {}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Must be before /:symbol
|
|
|
|
*/
|
|
|
|
@Get('lookup')
|
|
|
|
@UseGuards(AuthGuard('jwt'))
|
2021-05-20 20:36:08 +02:00
|
|
|
public async lookupSymbol(
|
|
|
|
@Query() { query = '' }
|
|
|
|
): Promise<{ items: LookupItem[] }> {
|
2021-04-13 21:53:58 +02:00
|
|
|
try {
|
2021-05-20 20:36:08 +02:00
|
|
|
const encodedQuery = encodeURIComponent(query.toLowerCase());
|
|
|
|
return this.symbolService.lookup(encodedQuery);
|
2021-04-13 21:53:58 +02:00
|
|
|
} catch {
|
|
|
|
throw new HttpException(
|
|
|
|
getReasonPhrase(StatusCodes.INTERNAL_SERVER_ERROR),
|
|
|
|
StatusCodes.INTERNAL_SERVER_ERROR
|
|
|
|
);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Must be after /lookup
|
|
|
|
*/
|
|
|
|
@Get(':symbol')
|
|
|
|
@UseGuards(AuthGuard('jwt'))
|
|
|
|
public async getPosition(@Param('symbol') symbol): Promise<SymbolItem> {
|
|
|
|
return this.symbolService.get(symbol);
|
|
|
|
}
|
|
|
|
}
|