Fix db and fix endpoints
This commit is contained in:
@@ -40,6 +40,7 @@ public class PostgreSqlTradingRepository : ITradingRepository
|
||||
{
|
||||
var scenario = await _context.Scenarios
|
||||
.AsNoTracking()
|
||||
.Include(s => s.User)
|
||||
.Include(s => s.ScenarioIndicators)
|
||||
.ThenInclude(si => si.Indicator)
|
||||
.FirstOrDefaultAsync(s => s.Name == name)
|
||||
@@ -80,14 +81,36 @@ public class PostgreSqlTradingRepository : ITradingRepository
|
||||
});
|
||||
}
|
||||
|
||||
public async Task<IEnumerable<Scenario>> GetScenariosByUserAsync(User user)
|
||||
{
|
||||
var userId = user?.Id ?? 0;
|
||||
var scenarios = await _context.Scenarios
|
||||
.AsNoTracking()
|
||||
.Include(s => s.User)
|
||||
.Include(s => s.ScenarioIndicators)
|
||||
.ThenInclude(si => si.Indicator)
|
||||
.Where(s => s.UserId == userId)
|
||||
.ToListAsync()
|
||||
.ConfigureAwait(false);
|
||||
|
||||
return scenarios.Select(scenario =>
|
||||
{
|
||||
var mappedScenario = PostgreSqlMappers.Map(scenario);
|
||||
mappedScenario.Indicators = scenario.ScenarioIndicators
|
||||
.Select(si => PostgreSqlMappers.Map(si.Indicator))
|
||||
.ToList();
|
||||
return mappedScenario;
|
||||
});
|
||||
}
|
||||
|
||||
public async Task InsertScenarioAsync(Scenario scenario)
|
||||
{
|
||||
var userId = scenario.User?.Id ?? 0;
|
||||
|
||||
// Check if scenario already exists for the same user
|
||||
var existingScenario = await _context.Scenarios
|
||||
.AsNoTracking()
|
||||
.FirstOrDefaultAsync(s => s.Name == scenario.Name &&
|
||||
((scenario.User == null && s.UserName == null) ||
|
||||
(scenario.User != null && s.UserName == scenario.User.Name)));
|
||||
.FirstOrDefaultAsync(s => s.Name == scenario.Name && s.UserId == userId);
|
||||
|
||||
if (existingScenario != null)
|
||||
{
|
||||
@@ -104,11 +127,10 @@ public class PostgreSqlTradingRepository : ITradingRepository
|
||||
{
|
||||
foreach (var indicator in scenario.Indicators)
|
||||
{
|
||||
var indicatorUserId = indicator.User?.Id ?? 0;
|
||||
var indicatorEntity = await _context.Indicators
|
||||
.AsNoTracking()
|
||||
.FirstOrDefaultAsync(i => i.Name == indicator.Name &&
|
||||
((indicator.User == null && i.UserName == null) ||
|
||||
(indicator.User != null && i.UserName == indicator.User.Name)));
|
||||
.FirstOrDefaultAsync(i => i.Name == indicator.Name && i.UserId == indicatorUserId);
|
||||
|
||||
if (indicatorEntity != null)
|
||||
{
|
||||
@@ -134,7 +156,7 @@ public class PostgreSqlTradingRepository : ITradingRepository
|
||||
if (entity != null)
|
||||
{
|
||||
entity.LoopbackPeriod = scenario.LoopbackPeriod ?? 1;
|
||||
entity.UserName = scenario.User?.Name;
|
||||
entity.UserId = scenario.User?.Id ?? 0;
|
||||
entity.UpdatedAt = DateTime.UtcNow;
|
||||
|
||||
await _context.SaveChangesAsync();
|
||||
@@ -196,12 +218,11 @@ public class PostgreSqlTradingRepository : ITradingRepository
|
||||
|
||||
public async Task InsertIndicatorAsync(IndicatorBase indicatorBase)
|
||||
{
|
||||
var indicatorUserId = indicatorBase.User?.Id ?? 0;
|
||||
// Check if indicator already exists for the same user
|
||||
var existingIndicator = await _context.Indicators
|
||||
.AsNoTracking()
|
||||
.FirstOrDefaultAsync(i => i.Name == indicatorBase.Name &&
|
||||
((indicatorBase.User == null && i.UserName == null) ||
|
||||
(indicatorBase.User != null && i.UserName == indicatorBase.User.Name)));
|
||||
.FirstOrDefaultAsync(i => i.Name == indicatorBase.Name && i.UserId == indicatorUserId);
|
||||
|
||||
if (existingIndicator != null)
|
||||
{
|
||||
@@ -233,7 +254,7 @@ public class PostgreSqlTradingRepository : ITradingRepository
|
||||
entity.SmoothPeriods = indicatorBase.SmoothPeriods;
|
||||
entity.StochPeriods = indicatorBase.StochPeriods;
|
||||
entity.CyclePeriods = indicatorBase.CyclePeriods;
|
||||
entity.UserName = indicatorBase.User?.Name;
|
||||
entity.UserId = indicatorBase.User?.Id ?? 0;
|
||||
entity.UpdatedAt = DateTime.UtcNow;
|
||||
|
||||
await _context.SaveChangesAsync();
|
||||
@@ -249,6 +270,7 @@ public class PostgreSqlTradingRepository : ITradingRepository
|
||||
{
|
||||
var position = await _context.Positions
|
||||
.AsNoTracking()
|
||||
.Include(p => p.User)
|
||||
.Include(p => p.OpenTrade)
|
||||
.Include(p => p.StopLossTrade)
|
||||
.Include(p => p.TakeProfit1Trade)
|
||||
@@ -268,6 +290,7 @@ public class PostgreSqlTradingRepository : ITradingRepository
|
||||
{
|
||||
var positions = await _context.Positions
|
||||
.AsNoTracking()
|
||||
.Include(p => p.User)
|
||||
.Include(p => p.OpenTrade)
|
||||
.Include(p => p.StopLossTrade)
|
||||
.Include(p => p.TakeProfit1Trade)
|
||||
@@ -288,6 +311,7 @@ public class PostgreSqlTradingRepository : ITradingRepository
|
||||
{
|
||||
var positions = await _context.Positions
|
||||
.AsNoTracking()
|
||||
.Include(p => p.User)
|
||||
.Include(p => p.OpenTrade)
|
||||
.Include(p => p.StopLossTrade)
|
||||
.Include(p => p.TakeProfit1Trade)
|
||||
@@ -301,12 +325,11 @@ public class PostgreSqlTradingRepository : ITradingRepository
|
||||
|
||||
public async Task InsertPositionAsync(Position position)
|
||||
{
|
||||
var positionUserId = position.User?.Id ?? 0;
|
||||
// Check if position already exists for the same user
|
||||
var existingPosition = await _context.Positions
|
||||
.AsNoTracking()
|
||||
.FirstOrDefaultAsync(p => p.Identifier == position.Identifier &&
|
||||
((position.User == null && p.UserName == null) ||
|
||||
(position.User != null && p.UserName == position.User.Name)));
|
||||
.FirstOrDefaultAsync(p => p.Identifier == position.Identifier && p.UserId == positionUserId);
|
||||
|
||||
if (existingPosition != null)
|
||||
{
|
||||
@@ -385,10 +408,11 @@ public class PostgreSqlTradingRepository : ITradingRepository
|
||||
|
||||
public async Task<IEnumerable<Signal>> GetSignalsByUserAsync(User user)
|
||||
{
|
||||
var userId = user?.Id ?? 0;
|
||||
var signals = await _context.Signals
|
||||
.AsNoTracking()
|
||||
.Where(s => (user == null && s.UserName == null) ||
|
||||
(user != null && s.UserName == user.Name))
|
||||
.Include(s => s.User)
|
||||
.Where(s => s.UserId == userId)
|
||||
.ToListAsync()
|
||||
.ConfigureAwait(false);
|
||||
|
||||
@@ -402,11 +426,11 @@ public class PostgreSqlTradingRepository : ITradingRepository
|
||||
|
||||
public async Task<Signal> GetSignalByIdentifierAsync(string identifier, User user = null)
|
||||
{
|
||||
var userId = user?.Id ?? 0;
|
||||
var signal = await _context.Signals
|
||||
.AsNoTracking()
|
||||
.FirstOrDefaultAsync(s => s.Identifier == identifier &&
|
||||
((user == null && s.UserName == null) ||
|
||||
(user != null && s.UserName == user.Name)))
|
||||
.Include(s => s.User)
|
||||
.FirstOrDefaultAsync(s => s.Identifier == identifier && s.UserId == userId)
|
||||
.ConfigureAwait(false);
|
||||
|
||||
return PostgreSqlMappers.Map(signal);
|
||||
@@ -414,13 +438,13 @@ public class PostgreSqlTradingRepository : ITradingRepository
|
||||
|
||||
public async Task InsertSignalAsync(Signal signal)
|
||||
{
|
||||
var signalUserId = signal.User?.Id ?? 0;
|
||||
// Check if signal already exists with the same identifier, date, and user
|
||||
var existingSignal = _context.Signals
|
||||
.AsNoTracking()
|
||||
.FirstOrDefault(s => s.Identifier == signal.Identifier &&
|
||||
s.Date == signal.Date &&
|
||||
((s.UserName == null && signal.User == null) ||
|
||||
(s.UserName != null && signal.User != null && s.UserName == signal.User.Name)));
|
||||
s.UserId == signalUserId);
|
||||
|
||||
if (existingSignal != null)
|
||||
{
|
||||
@@ -435,21 +459,21 @@ public class PostgreSqlTradingRepository : ITradingRepository
|
||||
|
||||
public async Task<IndicatorBase> GetStrategyByNameUserAsync(string name, User user)
|
||||
{
|
||||
var userId = user?.Id ?? 0;
|
||||
var indicator = await _context.Indicators
|
||||
.AsNoTracking()
|
||||
.FirstOrDefaultAsync(i => i.Name == name &&
|
||||
((user == null && i.UserName == null) ||
|
||||
(user != null && i.UserName == user.Name)));
|
||||
.Include(i => i.User)
|
||||
.FirstOrDefaultAsync(i => i.Name == name && i.UserId == userId);
|
||||
return PostgreSqlMappers.Map(indicator);
|
||||
}
|
||||
|
||||
public async Task<Scenario> GetScenarioByNameUserAsync(string scenarioName, User user)
|
||||
{
|
||||
var userId = user?.Id ?? 0;
|
||||
var scenario = await _context.Scenarios
|
||||
.AsNoTracking()
|
||||
.FirstOrDefaultAsync(s => s.Name == scenarioName &&
|
||||
((user == null && s.UserName == null) ||
|
||||
(user != null && s.UserName == user.Name)));
|
||||
.Include(s => s.User)
|
||||
.FirstOrDefaultAsync(s => s.Name == scenarioName && s.UserId == userId);
|
||||
return PostgreSqlMappers.Map(scenario);
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user