Aggiunta scheda "Storia Puntate" con aggiornamento live

Introdotta una nuova scheda "Storia Puntate" nel pannello
dell'asta selezionata, che mostra la cronologia delle ultime
puntate in tempo reale. La scheda utilizza un `TabControl`
con due `TabItem`: uno per gli utenti e uno per la storia
delle puntate.

- Creata la classe `BidHistoryEntry` per rappresentare una
  singola puntata, con proprietà come `Price`, `BidType`,
  `Timestamp`, e calcoli formattati.
- Aggiunte proprietà `RecentBids` in `AuctionInfo` e
  `RecentBidsHistory` in `AuctionState` per gestire i dati
  della cronologia.
- Modificato il parsing API in `BidooApiClient` per includere
  la cronologia delle puntate.
- Aggiornato il monitor delle aste (`AuctionMonitor.cs`) per
  sincronizzare i dati della cronologia con il backend.
- Aggiunta la proprietà `BidHistoryEntries` in
  `AuctionViewModel` per il binding della griglia.
- Modificata la UI (`AuctionMonitorControl.xaml`) per
  includere la nuova scheda e personalizzare gli stili.
- Aggiornata la logica di aggiornamento UI in
  `MainWindow.xaml.cs` per gestire i dati della cronologia.
- Documentata la funzionalità in `FEATURE_BID_HISTORY_TAB.md`.
- Aggiunto uno screenshot (`Screenshot 2025-11-25 113552.png`).

Questa funzionalità migliora la trasparenza e fornisce agli
utenti informazioni dettagliate sulle attività recenti,
aiutandoli a prendere decisioni strategiche durante le aste.
This commit is contained in:
2025-11-25 14:35:09 +01:00
parent 6795282993
commit d99b5ec923
11 changed files with 960 additions and 58 deletions

View File

@@ -67,6 +67,12 @@ namespace AutoBidder.Models
public List<BidHistory> BidHistory { get; set; } = new List<BidHistory>();
public Dictionary<string, BidderInfo> BidderStats { get; set; } = new(StringComparer.OrdinalIgnoreCase);
/// <summary>
/// Storia delle ultime puntate effettuate sull'asta (da API)
/// </summary>
[JsonIgnore]
public List<BidHistoryEntry> RecentBids { get; set; } = new List<BidHistoryEntry>();
// Log per-asta (non serializzato)
[System.Text.Json.Serialization.JsonIgnore]
public List<string> AuctionLog { get; set; } = new();

View File

@@ -1,4 +1,5 @@
using System;
using System.Collections.Generic;
namespace AutoBidder.Models
{
@@ -28,6 +29,11 @@ namespace AutoBidder.Models
// Dati estratti HTML
public string RawHtml { get; set; } = "";
public bool ParsingSuccess { get; set; } = true;
/// <summary>
/// Storia delle ultime puntate (dal polling API)
/// </summary>
public List<BidHistoryEntry>? RecentBidsHistory { get; set; }
}
/// <summary>

View File

@@ -0,0 +1,55 @@
using System;
namespace AutoBidder.Models
{
/// <summary>
/// Rappresenta una singola puntata nella storia dell'asta
/// </summary>
public class BidHistoryEntry
{
/// <summary>
/// Prezzo dell'asta al momento della puntata
/// </summary>
public decimal Price { get; set; }
/// <summary>
/// Tipo di puntata (Auto/Manuale)
/// </summary>
public string BidType { get; set; }
/// <summary>
/// Timestamp della puntata (Unix timestamp)
/// </summary>
public long Timestamp { get; set; }
/// <summary>
/// Nome utente che ha fatto la puntata
/// </summary>
public string Username { get; set; }
/// <summary>
/// Orario formattato della puntata (HH:mm:ss)
/// </summary>
public string TimeFormatted
{
get
{
var dateTime = DateTimeOffset.FromUnixTimeSeconds(Timestamp).ToLocalTime();
return dateTime.ToString("HH:mm:ss");
}
}
/// <summary>
/// Prezzo formattato con 2 decimali
/// </summary>
public string PriceFormatted
{
get => Price.ToString("0.00");
}
/// <summary>
/// Indica se la puntata è stata fatta dall'utente corrente
/// </summary>
public bool IsMyBid { get; set; }
}
}