Ciao a tutti! Sto facendo ricerche su diverse piattaforme forum per costruire una community per programmatori competitivi (CP) brasiliani, ma sembra che l’abbia trovata!
Una funzionalità che vorrei avere su questo forum è l’integrazione con Codeforces, una piattaforma online che ospita gare e discussioni su CP. All’interno di Codeforces, i partecipanti hanno un rating che cambia in base alla loro performance nelle gare classificate. Vorrei dare ai miei utenti la possibilità di visualizzare i loro faticosamente guadagnati rating sul profilo del forum.
La prima cosa che questo plugin che voglio sviluppare dovrebbe fare, quindi, è permettere all’utente di inserire il proprio handle Codeforces e poi autenticare in qualche modo che l’handle appartenga all’utente del forum. Per farlo, sto pensando di utilizzare il plugin Custom Wizard per chiedere l’handle, quindi inviare una stringa casuale tramite l’API Codeforces Talks che l’utente dovrà reinserire correttamente e, se tutto è ok, salvare l’handle in un campo utente personalizzato. Ti sembra ragionevole? Lo faresti diversamente?
Ora, conosco i miei utenti [futuri], dopotutto sono anch’io un CPer! Apprezzerebbero visualizzare il proprio rating attraverso il colore dell’handle del forum. Cioè, se hai un rating superiore a 1400, l’handle sarà ciano; se è superiore a 1600, sarà blu, e così via.
La mia rapida ricerca su come personalizzare i colori degli handle su Discourse mi ha portato alla seguente soluzione. Dovrei creare un gruppo utente per ogni fascia di rating e poi assegnare dinamicamente i miei utenti al gruppo corretto. (C’è un modo migliore o più semplice?)
Quindi, quando l’utente collega inizialmente il proprio account Codeforces al proprio profilo, potrei recuperare il suo rating e assegnargli il gruppo corretto (specialist, expert, candidate master, …, international grandmaster). Tuttavia, il rating potrebbe cambiare presto e vorrei aggiornare automaticamente il gruppo dell’utente quando il suo rating cambia.
Ora, ho pensato a diversi modi per raggiungere questo obiettivo e vorrei suggerimenti su quale seguire e, se possibile, alcune indicazioni sulle specificità di Discourse:
- Avere un Job in esecuzione regolare che aggiorna il rating e il gruppo di ogni utente (molte richieste esterne all’API di Codeforces)
- Avere un Job in esecuzione regolare che elabora le gare man mano che accadono. Poiché i rating possono cambiare solo durante una gara, se i rating degli utenti sono inizialmente coerenti, elaborando le variazioni di rating man mano che accadono posso aggiornare solo i rating cambiati e mantenere la coerenza con una singola chiamata all’API esterna
- Avere un risolutore personalizzato per rating e gruppi. Dovrei quindi memorizzare l’ultima acquisizione del rating e, alla prossima richiesta
GET rating/groups, se il rating è obsoleto, chiamerei l’API di Codeforces e aggiornerrei il rating/gruppo dell’utente. Questa è la mia soluzione preferita perché sembra semplice e sarà sempre eventualmente coerente. Tuttavia, non sono così sicuro di come implementarla o delle conseguenze dell’aggiunta e rimozione dinamica di un gruppo a un utente. O anche se è possibile affatto come plugin.
Beh, mi scuso per il muro di testo! Mi farebbe piacere ricevere qualsiasi tipo di feedback su tutto questo. Grazie per l’attenzione.