/// <summary>
        /// Returns <see cref="ApiResponse"/> with string representation of <see cref="ServerInfoJson"/> in body.
        /// </summary>
        /// <param name="endpoint"></param>
        /// <returns></returns>
        public ApiResponse GetInfo(string endpoint)
        {
            using (var context = new GameStatsDbDataContext())
            {
                var server = context.Servers.FirstOrDefault(s => s.endpoint == endpoint);
                if (server == null)
                {
                    return(new ApiResponse(System.Net.HttpStatusCode.NotFound));
                }

                int serverId  = server.id;
                var gameModes = (from gmOnServer in context.GameModesOnServers
                                 where gmOnServer.server_id == serverId
                                 join gameMode in context.GameModes
                                 on gmOnServer.gm_id equals gameMode.id
                                 select gameMode.name).ToList();
                ServerInfoJson serverInfo = new ServerInfoJson
                {
                    Name      = server.name,
                    GameModes = gameModes.ToList()
                };
                return(new ApiResponse(
                           body: JsonConvert.SerializeObject(serverInfo, Formatting.Indented)));
            }
        }
        /// <summary>
        /// Returns <see cref="ApiResponse"/> with string representation of List&lt;<see cref="ServersInfoRecordJson"/>&gt; in body.
        /// </summary>
        /// <returns></returns>
        public ApiResponse GetInfo()
        {
            using (var context = new GameStatsDbDataContext())
            {
                var servers = context.Servers;
                List <ServersInfoRecordJson> results = new List <ServersInfoRecordJson>();
                foreach (var server in servers)
                {
                    int serverId  = server.id;
                    var gameModes = (from gmOnServer in context.GameModesOnServers
                                     where gmOnServer.server_id == serverId
                                     join gameMode in context.GameModes
                                     on gmOnServer.gm_id equals gameMode.id
                                     select gameMode.name).ToList();
                    ServerInfoJson serverInfo = new ServerInfoJson
                    {
                        Name      = server.name,
                        GameModes = gameModes
                    };

                    results.Add(new ServersInfoRecordJson
                    {
                        Endpoint = server.endpoint,
                        Info     = serverInfo
                    });
                }
                return(new ApiResponse(
                           body: JsonConvert.SerializeObject(results)));
            }
        }
            public override bool Equals(object obj)
            {
                if (obj == null)
                {
                    return(false);
                }
                ServerInfoJson objAsServerInfoJson = obj as ServerInfoJson;

                if (objAsServerInfoJson == null)
                {
                    return(false);
                }
                return(this.Name == objAsServerInfoJson.Name &&
                       this.GameModes.Count == objAsServerInfoJson.GameModes.Count &&
                       this.GameModes.OrderBy(s => s)
                       .SequenceEqual
                           (objAsServerInfoJson
                           .GameModes.OrderBy(s => s)));
            }
 public ApiResponse PutInfo(string endpoint, ServerInfoJson serverInfoJson)
 {
     return(PutInfo(endpoint, serverInfoJson.Name, serverInfoJson.GameModes));
 }