Aggiunto limite configurabile storia puntate

Introdotta la possibilità di configurare un limite massimo di puntate visualizzabili nella scheda "Storia Puntate" tramite l'interfaccia utente. La nuova proprietà `MaxBidHistoryEntries` è stata aggiunta alle impostazioni e salvata in modo persistente.

- Aggiunti controlli UI per configurare il limite.
- Implementata persistenza della lista `RecentBids` con serializzazione JSON.
- Introdotto il metodo `MergeBidHistory` per unire puntate evitando duplicati e mantenendo ordine cronologico decrescente.
- Sincronizzate le statistiche utenti (`BidderStats`) con la lista `RecentBids`.
- Ripristinata la proprietà `IsMyBid` al caricamento delle aste salvate.
- Ottimizzate le performance con `HashSet` per deduplicazione e limite configurabile.
- Creato il file `FIX_BID_HISTORY_PERSISTENCE.md` per documentare il problema e la soluzione.
- Garantita compatibilità retroattiva con aste salvate.

Questi aggiornamenti migliorano la gestione, la visualizzazione e la persistenza della storia delle puntate, offrendo un'esperienza utente più robusta e intuitiva.
This commit is contained in:
2025-11-26 10:44:04 +01:00
parent d99b5ec923
commit c199e542ba
12 changed files with 622 additions and 7 deletions

View File

@@ -69,8 +69,9 @@ namespace AutoBidder.Models
/// <summary>
/// Storia delle ultime puntate effettuate sull'asta (da API)
/// Questa è la fonte UFFICIALE per il conteggio puntate per utente
/// </summary>
[JsonIgnore]
[JsonPropertyName("RecentBids")]
public List<BidHistoryEntry> RecentBids { get; set; } = new List<BidHistoryEntry>();
// Log per-asta (non serializzato)

View File

@@ -1,4 +1,5 @@
using System;
using System.Text.Json.Serialization;
namespace AutoBidder.Models
{
@@ -10,26 +11,31 @@ namespace AutoBidder.Models
/// <summary>
/// Prezzo dell'asta al momento della puntata
/// </summary>
[JsonPropertyName("Price")]
public decimal Price { get; set; }
/// <summary>
/// Tipo di puntata (Auto/Manuale)
/// </summary>
[JsonPropertyName("BidType")]
public string BidType { get; set; }
/// <summary>
/// Timestamp della puntata (Unix timestamp)
/// </summary>
[JsonPropertyName("Timestamp")]
public long Timestamp { get; set; }
/// <summary>
/// Nome utente che ha fatto la puntata
/// </summary>
[JsonPropertyName("Username")]
public string Username { get; set; }
/// <summary>
/// Orario formattato della puntata (HH:mm:ss)
/// </summary>
[JsonIgnore]
public string TimeFormatted
{
get
@@ -42,6 +48,7 @@ namespace AutoBidder.Models
/// <summary>
/// Prezzo formattato con 2 decimali
/// </summary>
[JsonIgnore]
public string PriceFormatted
{
get => Price.ToString("0.00");
@@ -50,6 +57,7 @@ namespace AutoBidder.Models
/// <summary>
/// Indica se la puntata è stata fatta dall'utente corrente
/// </summary>
[JsonIgnore]
public bool IsMyBid { get; set; }
}
}