| 
						
						
							
								
							
						
						
					 | 
					@ -212,19 +212,29 @@ export class MarketDataService { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					    symbol | 
					 | 
					 | 
					    symbol | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					  }: AssetProfileIdentifier & { data: Prisma.MarketDataUpdateInput[] }) { | 
					 | 
					 | 
					  }: AssetProfileIdentifier & { data: Prisma.MarketDataUpdateInput[] }) { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					    /** | 
					 | 
					 | 
					    /** | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					     * Atomically replace all market data for a symbol. | 
					 | 
					 | 
					     * Atomically replace market data for a symbol within a date range. | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					     * Deletes existing data and inserts new data within a single transaction | 
					 | 
					 | 
					     * Deletes existing data in the range and inserts new data within a single | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					     * to prevent data loss if the operation fails. | 
					 | 
					 | 
					     * transaction to prevent data loss if the operation fails. | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					     */ | 
					 | 
					 | 
					     */ | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					    await this.prismaService.$transaction(async (prisma) => { | 
					 | 
					 | 
					    await this.prismaService.$transaction(async (prisma) => { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					      if (data.length > 0) { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        // Find the earliest and latest dates in the incoming data
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        const dates = data.map(({ date }) => date as Date); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        const minDate = new Date(Math.min(...dates.map((d) => d.getTime()))); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        const maxDate = new Date(Math.max(...dates.map((d) => d.getTime()))); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        // Only delete data within the date range that will be replaced
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        await prisma.marketData.deleteMany({ | 
					 | 
					 | 
					        await prisma.marketData.deleteMany({ | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					          where: { | 
					 | 
					 | 
					          where: { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					            dataSource, | 
					 | 
					 | 
					            dataSource, | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					          symbol | 
					 | 
					 | 
					            symbol, | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					            date: { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					              gte: minDate, | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					              lte: maxDate | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					            } | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					          } | 
					 | 
					 | 
					          } | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        }); | 
					 | 
					 | 
					        }); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					
 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					      if (data.length > 0) { | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        await prisma.marketData.createMany({ | 
					 | 
					 | 
					        await prisma.marketData.createMany({ | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					          data: data.map(({ dataSource, date, marketPrice, state }) => ({ | 
					 | 
					 | 
					          data: data.map(({ dataSource, date, marketPrice, state }) => ({ | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					            dataSource: dataSource as DataSource, | 
					 | 
					 | 
					            dataSource: dataSource as DataSource, | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
					
  |