/// <summary> /// Cria um novo jogador com o Nickname e a senha passadas no corpo da chamada /// </summary> /// <param name="player">Dados para criação do novo jogador, incluindo identificação do caller</param> /// <returns>HttpResponseMessage indicando se houve algum problema ou se o jogador foi criado</returns> // POST: api/NewPlayer public HttpResponseMessage Post([FromBody] NewPlayer player) { string DBResponse; if (player == null) { DBResponse = "Formato de dados inválido, faça um Get para receber um exemplo."; return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, DBResponse)); } if ((player.CallerID == null) || (player.CallerPW == null) || (player.Nickname == null) || (player.Password == null)) { DBResponse = "Estão faltando dados, faça um Get para receber um exemplo e envie todas as informações."; return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, DBResponse)); } if ((player.Nickname.Length == 0) || (player.Password.Length == 0)) { DBResponse = "Dados inválidos, Nick e senha não podem estar vazios"; return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, DBResponse)); } if ((player.Nickname.Length > 20) || (player.Password.Length > 20)) { DBResponse = "Sinto muito, para testes, o Nick e a senha estão limitados a 20 caracteres"; return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, DBResponse)); } //Só pra evitar que qualquer um crie novas usuários, fiz um ID/Senha //Inicialmente as variáveis de ambiente estão setadas para JMF e JMF string CallerPW = Environment.GetEnvironmentVariable("CPW"); string CallerID = Environment.GetEnvironmentVariable("CID"); if ((!player.CallerID.Equals(CallerID)) || (!player.CallerPW.Equals(CallerPW))) { //Podia pegar do ambiente também... na próxima vou fazer isso, usar variáveis do ambiente DBResponse = $"Credenciais inválidas, você não pode criar novos usuários"; return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, DBResponse)); } DBResponse = Database.UpdateDB.CreateNewPlayer(player.Nickname, player.Password); if (DBResponse.Equals("OK")) { player.CallerID = ""; player.CallerPW = ""; player.Password = ""; HttpResponseMessage response = Request.CreateResponse <NewPlayer>(HttpStatusCode.Created, player); string uri = Url.Link("DefaultApi", new { id = player.Nickname }); response.Headers.Location = new Uri(uri); return(response); } return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, DBResponse)); }
/// <summary> /// Atualiza dados do Jogador /// </summary> /// <param name="id">Código para atualização</param> /// <param name="player">Dados de atualização</param> /// <returns> Mensagem com OK ou descrição do erro </returns> // PUT: api/UpdScores/5 public HttpResponseMessage Put(int id, [FromBody] PlayerStatus player) { string DBResponse; if (id != 42) //Just an easy check, if you don't know why 42, I do not want to work with you :-) { DBResponse = "PUT inválido."; return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, DBResponse)); } if (player == null) { DBResponse = "Formato de dados inválido, faça um Get para receber um exemplo."; return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, DBResponse)); } if ((player.CallerID == null) || (player.CallerPW == null) || (player.Nickname == null) || (player.Password == null) || (player.NewStats == null)) { DBResponse = "Estão faltando dados, faça um Get para receber um exemplo e envie todas as informações."; return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, DBResponse)); } if (player.NewStats.Count == 0) { DBResponse = "Você deve enviar pelo menos um valor no NewStat"; return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, DBResponse)); } if ((player.Nickname.Length == 0) || (player.Password.Length == 0)) { DBResponse = "Dados inválidos, Nick e senha não podem estar vazios"; return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, DBResponse)); } int NScores = Math.Min(6, player.NewStats.Count); int[] NewScores = new int[NScores]; int total = player.NewStats[0]; int parcial = 0; for (int i = 0; i < NewScores.Length; i++) { if (player.NewStats[i] < 0) { DBResponse = "Não são permitidos dados negativos."; return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, DBResponse)); } NewScores[i] = player.NewStats[i]; if (i % 3 != 0) { parcial += player.NewStats[i]; } if (i == 3) { if (parcial > total) { DBResponse = "Dados parciais maiores que o total."; return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, DBResponse)); } if (player.NewStats.Count > 3) { total = player.NewStats[3]; parcial = 0; } } if ((i > 2) && (player.NewStats[i] > player.NewStats[i - 3])) { DBResponse = "Dados semanais maiores que os totais."; return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, DBResponse)); } } if (parcial > total) { DBResponse = "Dados parciais maiores que o total."; return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, DBResponse)); } //Só pra evitar que qualquer um atualize os dados, fiz um ID/Senha //Inicialmente as variáveis de ambiente estão setadas para JMF e JMF //Podia ter usado credenciais deferentes para create e update... string CallerPW = Environment.GetEnvironmentVariable("CPW"); string CallerID = Environment.GetEnvironmentVariable("CID"); if ((!player.CallerID.Equals(CallerID)) || (!player.CallerPW.Equals(CallerPW))) { DBResponse = "Credenciais inválidas, você não pode atualizar o status"; return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, DBResponse)); } DBResponse = Database.UpdateDB.UpdatePlayerStats(player.Nickname, player.Password, NewScores); if (DBResponse.Equals("OK")) { player.CallerID = ""; player.CallerPW = ""; player.Password = ""; player.NewStats.Clear(); for (int i = 0; i < NewScores.Length; i++) { player.NewStats.Add(NewScores[i]); } HttpResponseMessage response = Request.CreateResponse <PlayerStatus>(HttpStatusCode.Created, player); string uri = Url.Link("DefaultApi", new { id = player.Nickname }); response.Headers.Location = new Uri(uri); return(response); } return(Request.CreateErrorResponse(HttpStatusCode.BadRequest, DBResponse)); }