|  |  | @ -8,7 +8,7 @@ import { | 
			
		
	
		
			
				
					|  |  |  | } from '@ghostfolio/api/services/interfaces/interfaces'; | 
			
		
	
		
			
				
					|  |  |  | import { PrismaService } from '@ghostfolio/api/services/prisma.service'; | 
			
		
	
		
			
				
					|  |  |  | import { SymbolProfileService } from '@ghostfolio/api/services/symbol-profile.service'; | 
			
		
	
		
			
				
					|  |  |  | import { DATE_FORMAT } from '@ghostfolio/common/helper'; | 
			
		
	
		
			
				
					|  |  |  | import { DATE_FORMAT, parseDate } from '@ghostfolio/common/helper'; | 
			
		
	
		
			
				
					|  |  |  | import { Granularity } from '@ghostfolio/common/types'; | 
			
		
	
		
			
				
					|  |  |  | import { Injectable, Logger } from '@nestjs/common'; | 
			
		
	
		
			
				
					|  |  |  | import { DataSource } from '@prisma/client'; | 
			
		
	
	
		
			
				
					|  |  | @ -35,27 +35,36 @@ export class GoogleSheetsService implements DataProviderInterface { | 
			
		
	
		
			
				
					|  |  |  |     } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |     try { | 
			
		
	
		
			
				
					|  |  |  |       const [symbol] = aSymbols; | 
			
		
	
		
			
				
					|  |  |  |       const [symbolProfile] = await this.symbolProfileService.getSymbolProfiles( | 
			
		
	
		
			
				
					|  |  |  |         [symbol] | 
			
		
	
		
			
				
					|  |  |  |       const response: { [symbol: string]: IDataProviderResponse } = {}; | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |       const symbolProfiles = await this.symbolProfileService.getSymbolProfiles( | 
			
		
	
		
			
				
					|  |  |  |         aSymbols | 
			
		
	
		
			
				
					|  |  |  |       ); | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |       const sheet = await this.getSheet({ | 
			
		
	
		
			
				
					|  |  |  |         sheetId: this.configurationService.get('GOOGLE_SHEETS_ID'), | 
			
		
	
		
			
				
					|  |  |  |         symbol | 
			
		
	
		
			
				
					|  |  |  |         symbol: 'Overview' | 
			
		
	
		
			
				
					|  |  |  |       }); | 
			
		
	
		
			
				
					|  |  |  |       const marketPrice = parseFloat( | 
			
		
	
		
			
				
					|  |  |  |         (await sheet.getCellByA1('B1').value) as string | 
			
		
	
		
			
				
					|  |  |  |       ); | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |       return { | 
			
		
	
		
			
				
					|  |  |  |         [symbol]: { | 
			
		
	
		
			
				
					|  |  |  |           marketPrice, | 
			
		
	
		
			
				
					|  |  |  |           currency: symbolProfile?.currency, | 
			
		
	
		
			
				
					|  |  |  |           dataSource: this.getName(), | 
			
		
	
		
			
				
					|  |  |  |           marketState: MarketState.delayed | 
			
		
	
		
			
				
					|  |  |  |       const rows = await sheet.getRows(); | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |       for (const row of rows) { | 
			
		
	
		
			
				
					|  |  |  |         const marketPrice = parseFloat(row['marketPrice']); | 
			
		
	
		
			
				
					|  |  |  |         const symbol = row['symbol']; | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |         if (aSymbols.includes(symbol)) { | 
			
		
	
		
			
				
					|  |  |  |           response[symbol] = { | 
			
		
	
		
			
				
					|  |  |  |             marketPrice, | 
			
		
	
		
			
				
					|  |  |  |             currency: symbolProfiles.find((symbolProfile) => { | 
			
		
	
		
			
				
					|  |  |  |               return symbolProfile.symbol === symbol; | 
			
		
	
		
			
				
					|  |  |  |             })?.currency, | 
			
		
	
		
			
				
					|  |  |  |             dataSource: this.getName(), | 
			
		
	
		
			
				
					|  |  |  |             marketState: MarketState.delayed | 
			
		
	
		
			
				
					|  |  |  |           }; | 
			
		
	
		
			
				
					|  |  |  |         } | 
			
		
	
		
			
				
					|  |  |  |       }; | 
			
		
	
		
			
				
					|  |  |  |       } | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |       return response; | 
			
		
	
		
			
				
					|  |  |  |     } catch (error) { | 
			
		
	
		
			
				
					|  |  |  |       Logger.error(error); | 
			
		
	
		
			
				
					|  |  |  |     } | 
			
		
	
	
		
			
				
					|  |  | @ -94,7 +103,7 @@ export class GoogleSheetsService implements DataProviderInterface { | 
			
		
	
		
			
				
					|  |  |  |           return index >= 1; | 
			
		
	
		
			
				
					|  |  |  |         }) | 
			
		
	
		
			
				
					|  |  |  |         .forEach((row) => { | 
			
		
	
		
			
				
					|  |  |  |           const date = new Date(row._rawData[0]); | 
			
		
	
		
			
				
					|  |  |  |           const date = parseDate(row._rawData[0]); | 
			
		
	
		
			
				
					|  |  |  |           const close = parseFloat(row._rawData[1]); | 
			
		
	
		
			
				
					|  |  |  | 
 | 
			
		
	
		
			
				
					|  |  |  |           historicalData[format(date, DATE_FORMAT)] = { marketPrice: close }; | 
			
		
	
	
		
			
				
					|  |  | 
 |