Sono sempre più vicino al risultato, nello specifico ho potuto pensare ad una gestione migliore usando dei blocchi per inserire le condizioni in AND (quindi condizioni tutte valide tra di loro) e in OR (almeno una valida).
Per esempio qualcosa del genere:
Screenshot from 2023-01-15 09-46-55.png
Screenshot from 2023-01-15 09-49-39.png
Non sono ancora ad un punto finale perchè questo tipo di gestione "rompe" completamente gli schemi di oggi, ossia sono costretto a non usare più i parametri che usavo prima e così dovrò in qualche modo gestire ugualmente la compatibilità con il passato e la gestione lato browser.
In pratica gestire link del tipo /mame-search?game_year=1980&genre=100
In realtà non potranno essere composti in quel modo perchè non riuscirei a gestire tutte le casistiche, e la rottura sta proprio qui.
Per spiegarla a chi non è tecnico, diciamo che quando viene servita una pagina web esiste la lista dei parametri in ingresso (es. 'game_year' con valore '1980' e 'genre' con valore '100') ed oggi da quella lista genero una ricerca sul database. Il problema sta proprio nel fatto che la lista nel mio caso potrebbe avere più valori uguali e per ciascun valore potrebbe avere una diversa operazione sul dato (uguale, maggiore, ecc).
Fino a questo momento ho gestito la cosa cambiando il nome, nella maniera standard in cui fanno tutti i siti, ovvero gestire fino a 10 nomi diversi per ciascun parametro (game_year_maggiore, game_year_maggiore_uguale, game_year_diverso, genre_diverso, ecc.)
Questo però porta alla moltiplicazione di tutti i filtri (150 oggi, 200 domani) per le 10 operazioni, ovvero 2000 variabili diverse. Troppe da gestire senza incontrare problemi.
La strada che sto percorrendo ora è che la lista dei parametri viene processata da una routine che la trasforma nei nuovi, passati poi al client (quindi la pagina è vuota) che a sua volta richiama il server con i parametri corretti per poter effettuare la ricerca (contenuto dinamico).
Così facendo avrei una pagina di ricerca molto pulita e leggera a prescindere dal numero di filtri (poche migliaia di byte rispetto al quasi milione di byte di oggi), un preprocessore che si occupa di trattare i dati e trasformarli in parametri corretti (solo la prima volta che la pagina viene aperta) ed una richiesta dati che potrebbe mettere in cache la composizione finale.
In altre parole, la richiesta delle pagine 2 e 3 non andrebbe a riprocessare tutti i parametri (lavoro inutile se sono uguali a prima) e avrei una risposta molto più rapida (come succede oggi che ho milioni di richieste).
Sono entrato nel tecnico ma si rende necessario per capire e spiegare le varie scelte che sto effettuando.
La grafica non mi piace ancora comunque, sto cercando di gestire il multivalore in maniera più chiara.
Se questo tipo di rappresentazione funziona bene, potrei gestire per qualsiasi filtri supportato un elenco di operazioni e valori multipli senza alcuno sforzo aggiuntivo rispetto alla gestione singola, e tutto ciò consentirebbe in pratica di farsi le proprie ricerche con la massima libertà possibile.
Che poi è lo scopo primario di questa riscrittura, quello secondario è ridurre il carico sul server che già oggi fa fatica a rispondere a tutti.