Add cache for position
This commit is contained in:
@@ -273,17 +273,33 @@ public class PostgreSqlTradingRepository : BaseRepositoryWithLogging, ITradingRe
|
||||
{
|
||||
await PostgreSqlConnectionHelper.EnsureConnectionOpenAsync(_context);
|
||||
|
||||
// Optimized query with explicit JOINs to avoid N+1 queries
|
||||
var position = await _context.Positions
|
||||
.AsNoTracking()
|
||||
.Include(p => p.User)
|
||||
.Include(p => p.OpenTrade)
|
||||
.Include(p => p.StopLossTrade)
|
||||
.Include(p => p.TakeProfit1Trade)
|
||||
.Include(p => p.TakeProfit2Trade)
|
||||
.FirstOrDefaultAsync(p => p.Identifier == identifier)
|
||||
.Where(p => p.Identifier == identifier)
|
||||
.Select(p => new
|
||||
{
|
||||
Position = p,
|
||||
User = p.User,
|
||||
OpenTrade = p.OpenTrade,
|
||||
StopLossTrade = p.StopLossTrade,
|
||||
TakeProfit1Trade = p.TakeProfit1Trade,
|
||||
TakeProfit2Trade = p.TakeProfit2Trade
|
||||
})
|
||||
.FirstOrDefaultAsync()
|
||||
.ConfigureAwait(false);
|
||||
|
||||
return PostgreSqlMappers.Map(position ?? throw new InvalidOperationException("Position not found"));
|
||||
if (position == null)
|
||||
throw new InvalidOperationException("Position not found");
|
||||
|
||||
// Manually assign navigation properties to avoid lazy loading
|
||||
position.Position.User = position.User;
|
||||
position.Position.OpenTrade = position.OpenTrade;
|
||||
position.Position.StopLossTrade = position.StopLossTrade;
|
||||
position.Position.TakeProfit1Trade = position.TakeProfit1Trade;
|
||||
position.Position.TakeProfit2Trade = position.TakeProfit2Trade;
|
||||
|
||||
return PostgreSqlMappers.Map(position.Position);
|
||||
}
|
||||
finally
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user