puoi usare i set di redis per questo caso d'uso:
Se le fasce orarie sono sempre in multipli di 15 minuti puoi fare così:
1) Avere un set universale contenente tutte le fasce orarie. Qui multipli di 15.
sadd universal 08:00 08:15 08:30 08:45 09:00 ...
2) Per ogni membro della squadra avere un set separato per gli slot prenotati per loro. Per il membro1 08:15-08:50 devi farlo fidanzare fino alle 09:00 .
sadd member_1 08:15 08:30 08:45 09:00
3) Allo stesso modo anche per gli altri membri. membro2 08:30-09:30
sadd member_2 08:30 08:45 09:00 09:30
4) Ora per ogni membro puoi ottenere gli slot gratuiti utilizzando
sdiff universal member_1
5) Per gli slot complessivi gratuiti. Devi fare due operazioni.
result = sinter member_1 member_2 ...
sdiff universal result
l'intersezione di tutto il set dei membri darà le fasce orarie in cui tutti gli utenti sono occupati. Quindi non puoi assegnare quegli slot.
Eseguendo un'operazione di sottrazione (diff) con il set universale otterrai gli slot complessivi liberi di essere occupati.
Spero questo sia di aiuto.