private async Task <ServiceResponse> AddResolveGymAsync(Type textResource, ZonedDateTime requestStartInUtc, DateTimeZone userZone, string gymName, byte level, IPokemon pokemon, IRaidboss raidboss, TimeSpan timeSpan, int interactiveLimit, FenceConfiguration[] fences)
        {
            var gymResponse = await GymService.GetGymAsync(textResource, gymName, interactiveLimit, (selectedGymId) => AddResolveGymAsync(textResource, requestStartInUtc, userZone, selectedGymId, level, pokemon, raidboss, timeSpan, interactiveLimit, fences), fences);

            if (!gymResponse.IsSuccess)
            {
                return(gymResponse);
            }

            return(await AddSaveAsync(textResource, requestStartInUtc, userZone, gymResponse.Result, level, pokemon, raidboss, timeSpan));
        }
        public async Task <ServiceResponse> HatchResolveGymAsync(Type textResource, string gymName, IPokemon pokemon, IRaidboss raidboss, int interactiveLimit, FenceConfiguration[] fences)
        {
            var gymResponse = await GymService.GetGymAsync(textResource, gymName, interactiveLimit, (selectedGymId) => HatchResolveGymWithIdAsync(textResource, selectedGymId, pokemon, raidboss, interactiveLimit), fences);

            if (!gymResponse.IsSuccess)
            {
                return(gymResponse);
            }

            return(await HatchSaveAsync(textResource, gymResponse.Result, pokemon, raidboss, interactiveLimit));
        }