public Contest?Find(string contestId)
    {
        lock (_lock)
        {
            if (_cache.ContainsKey(contestId))
            {
                return(Contest.FromData(_cache[contestId]));
            }

            return(null);
        }
    }
    public Contest?FindActiveByContestantId(string contestantId)
    {
        lock (_lock)
        {
            var data = _cache.Values.FirstOrDefault(
                c => !c.HasEnded && c.Contestants.Values.Any(
                    x => x.Contains(contestantId)));

            if (data == null)
            {
                return(null);
            }

            return(Contest.FromData(data));
        }
    }