Class JDBCGameReportDAO

java.lang.Object
it.unisa.diem.wordageddon_g16.db.JdbcDAO<GameReport>
it.unisa.diem.wordageddon_g16.db.JDBCGameReportDAO
All Implemented Interfaces:
DAO<GameReport>, GameReportDAO

public class JDBCGameReportDAO extends JdbcDAO<GameReport> implements GameReportDAO
Implementazione JDBC del DocumentDAO, che gestisce le operazioni sui report.

I report sono salvati nella tabella GameReport e rappresentati tramite il model GameReport. Tutte le interazioni con il database sono gestite tramite JdbcDAO, con logging automatico via SystemLogger.

  • Field Details

    • userDAO

      private final UserDAO userDAO
      DAO utilizzato per la gestione degli utenti associati ai report di gioco.
    • documentDAO

      private final DocumentDAO documentDAO
      DAO utilizzato per la gestione dei documenti associati ai report di gioco.
  • Constructor Details

    • JDBCGameReportDAO

      public JDBCGameReportDAO(Connection conn, DAO<Document> documentDAO, DAO<User> userDAO)
      Costruisce un nuovo JDBCGameReportDAO utilizzando la connessione e i DAO specificati.
      Parameters:
      conn - la connessione al database da utilizzare per le operazioni
      documentDAO - il DAO per la gestione dei documenti
      userDAO - il DAO per la gestione degli utenti
  • Method Details

    • selectBy

      public Optional<GameReport> selectBy(User user, Timestamp timestamp)
      Recupera un report di gioco dal database sulla base dell'utente e del timestamp.
      Specified by:
      selectBy in interface GameReportDAO
      Parameters:
      user - l'utente autore del report
      timestamp - il timestamp univoco della partita
      Returns:
      un Optional contenente il report trovato, o vuoto se non esiste
      Throws:
      QueryFailedException - se si verifica un errore durante la query
    • selectAll

      public List<GameReport> selectAll()
      Recupera tutti i report di gioco presenti nella tabella GameReport.
      Specified by:
      selectAll in interface DAO<GameReport>
      Returns:
      una lista di tutti i report presenti nel database
      Throws:
      QueryFailedException - se si verifica un errore durante la query
    • selectWhere

      public List<GameReport> selectWhere(String sqlClause, Object... params)
      Recupera i report di gioco che soddisfano una specifica clausola SQL.
      Parameters:
      sqlClause - la clausola WHERE da applicare (senza la parola chiave WHERE)
      params - i parametri da sostituire nella query
      Returns:
      una lista di report che corrispondono ai criteri specificati
      Throws:
      QueryFailedException - se si verifica un errore durante la query
    • selectBase

      private List<GameReport> selectBase(String query, Object... params)
      Metodo interno di utilità per eseguire una query di selezione e mappare i risultati in oggetti GameReport. Recupera anche i documenti associati tramite la tabella Content.
      Parameters:
      query - la query SQL completa da eseguire
      params - i parametri da usare nella query
      Returns:
      una lista di GameReport risultanti
      Throws:
      QueryFailedException - se si verifica un errore durante l'elaborazione dei risultati
    • insert

      public void insert(GameReport gameReport)
      Inserisce un nuovo GameReport nel database e associa i documenti tramite la tabella Content.
      Specified by:
      insert in interface DAO<GameReport>
      Parameters:
      gameReport - il report da salvare
      Throws:
      QueryFailedException - se si verifica un errore durante l'inserimento
    • preFormatTime

      private String preFormatTime(long time)
      Formatta un valore temporale (in secondi) in una stringa nel formato MM:SS. Garantisce che il tempo formattato rispetti i vincoli del database:
      Parameters:
      time - il tempo da formattare
      Returns:
      una String nel formato "MM:SS" che rappresenta il tempo normalizzato
    • update

      public void update(GameReport gameReport)
      Aggiorna un GameReport esistente nel database.

      Nota: questa operazione modifica solo la tabella GameReport, non la tabella Content.

      Specified by:
      update in interface DAO<GameReport>
      Parameters:
      gameReport - il report aggiornato
      Throws:
      UpdateFailedException - se si verifica un errore durante l'aggiornamento
    • delete

      public void delete(GameReport gameReport)
      Elimina un GameReport dal database.

      Grazie al vincolo ON DELETE CASCADE, i documenti associati nella tabella Content vengono eliminati automaticamente.

      Specified by:
      delete in interface DAO<GameReport>
      Parameters:
      gameReport - il report da eliminare
      Throws:
      UpdateFailedException - se si verifica un errore durante la rimozione