Semplifica timing puntata, logging e controllo convenienza

- Timing di puntata ora gestito solo da offset fisso configurabile, rimosse strategie di compensazione latenza/jitter/offset dinamico
- Aggiunto controllo convenienza: blocca puntate se il costo supera il "Compra Subito" oltre una soglia configurabile
- Logging granulare: nuove opzioni per log selettivo (puntate, strategie, valore, competizione, timing, errori, stato, profiling avversari)
- Persistenza stato browser aste (categoria, ricerca) tramite ApplicationStateService
- Fix conteggio puntate per bidder, rimosso rilevamento "Last Second Sniper", aggiunta strategia "Price Momentum"
- Refactoring e pulizia: rimozione codice obsoleto, migliorata documentazione e thread-safety
This commit is contained in:
2026-02-05 09:28:58 +01:00
parent 8befcb8abf
commit 0764b0b625
8 changed files with 594 additions and 446 deletions

View File

@@ -65,10 +65,40 @@ namespace AutoBidder.Models
[JsonPropertyName("BidsUsedOnThisAuction")]
public int? BidsUsedOnThisAuction { get; set; }
// Timestamp
public DateTime AddedAt { get; set; } = DateTime.UtcNow;
public DateTime? LastClickAt { get; set; }
// ?? NUOVO: Sistema timing basato su deadline
/// <summary>
/// Timestamp UTC preciso della scadenza dell'asta.
/// Calcolato come: DateTime.UtcNow + Timer (quando riceviamo lo stato)
/// </summary>
[JsonIgnore]
public DateTime? DeadlineUtc { get; set; }
/// <summary>
/// Timestamp UTC dell'ultimo aggiornamento della deadline.
/// Usato per rilevare reset del timer.
/// </summary>
[JsonIgnore]
public DateTime? LastDeadlineUpdateUtc { get; set; }
/// <summary>
/// Timer raw dell'ultimo stato ricevuto (in secondi).
/// Usato per rilevare cambiamenti nel timer.
/// </summary>
[JsonIgnore]
public double LastRawTimer { get; set; }
/// <summary>
/// True se la puntata è già stata schedulata per questo ciclo.
/// Resettato quando il timer si resetta.
/// </summary>
[JsonIgnore]
public bool BidScheduled { get; set; }
// Storico
public List<BidHistory> BidHistory { get; set; } = new List<BidHistory>();
public Dictionary<string, BidderInfo> BidderStats { get; set; } = new(StringComparer.OrdinalIgnoreCase);