/// <summary>
        /// Executes the scraping code and returns the response of the scrape.
        /// </summary>
        /// <typeparam name="T">The response type. This must be derived from the RealmEyeResponse class.</typeparam>
        /// <param name="task">The task to perform.</param>
        /// <param name="method">The name of the method.</param>
        /// <param name="name">The person's name.</param>
        /// <returns>The response.</returns>
        private async Task <RealmEyePlayerResponse> GetRealmSharperResponse <T>(Task <T> task, string method, string name)
            where T : notnull, RealmEyePlayerResponse
        {
            var sw = new Stopwatch();

            try
            {
                sw.Start();

                var data = await task;
                sw.Stop();

                _logger.Log(LogLevel.Information,
                            $"[{method}] Scraped Data for {data.Name} in {sw.Elapsed.Milliseconds} MS.");

                // We are doing this instead of just returning "data" because we don't want to send junk data back
                // to the end user.
                return(data.ProfileIsPrivate
                                        ? RealmEyePlayerResponse.GenerateGenericResponse(name, data)
                                        : data);
            }
            catch (Exception e)
            {
                sw.Stop();
                _logger.Log(LogLevel.Error, e,
                            $"[{method}] Error Occurred When Getting Profile Data. Name: {name}");

                return(RealmEyePlayerResponse.GenerateGenericResponse(name));
            }
        }
        public async Task <IActionResult> GetGraveyardAsync()
        {
            var name = GetNameFromQuery(HttpContext.Request.Query);

            if (string.IsNullOrEmpty(name))
            {
                return(BadRequest(ProcessJsonSerialization(
                                      HttpContext.Request.Query,
                                      RealmEyePlayerResponse.GenerateGenericResponse(ResultCode.NotFound)
                                      )));
            }

            var amt = HttpContext.Request.Query.TryGetValue("amt", out var unparsedNum)
                                ? int.TryParse(unparsedNum, out var parsedNum)
                                        ? parsedNum
                                        : 70
                                : 70;

            var resp = await GetRealmSharperResponse(
                PlayerScraper.ScrapeGraveyardAsync(name, amt),
                "ScrapeGraveyardAsync+",
                name
                );

            return(resp is GraveyardData r
                                ? Ok(ProcessJsonSerialization(HttpContext.Request.Query, r))
                                : GetActionResult(resp, ProcessJsonSerialization(HttpContext.Request.Query, resp)));
        }
        public async Task <IActionResult> GetBasicDataAsync()
        {
            var name = GetNameFromQuery(HttpContext.Request.Query);

            if (string.IsNullOrEmpty(name))
            {
                return(BadRequest(ProcessJsonSerialization(
                                      HttpContext.Request.Query,
                                      RealmEyePlayerResponse.GenerateGenericResponse(ResultCode.NotFound)
                                      )));
            }

            var resp = await GetRealmSharperResponse(
                PlayerScraper.ScrapePlayerProfileAsync(name), "GetBasicDataAsync+",
                name
                );

            return(resp is PlayerData r
                                ? Ok(ProcessJsonSerialization(HttpContext.Request.Query, r))
                                : GetActionResult(resp, ProcessJsonSerialization(HttpContext.Request.Query, resp)));
        }