예제 #1
0
        /// <summary>
        /// Make a bet on an open roulette
        /// </summary>
        /// <param name="apuestaRequest"></param>
        /// <returns></returns>
        public ModeloResponse <int> PlaceBet(ApuestaRequest apuestaRequest)
        {
            try
            {
                using (DataConnectionFactory <int> dapper = new ConnectionFactory <int>(AppConfiguration.Instance.MasivianBD).GetConnectionMananager())
                {
                    dapper.AddParameter("Numero", apuestaRequest.Numero);
                    dapper.AddParameter("Color", apuestaRequest.Color);
                    dapper.AddParameter("Dinero", apuestaRequest.Dinero);
                    dapper.AddParameter("ID_Ruleta", apuestaRequest.IdRuleta);
                    dapper.AddParameter("ID_Usuario", apuestaRequest.IdUsuario);
                    var list = dapper.GetList(StoreProcedures.SP_PlaceBet);
                    if (list != null && list.Any())
                    {
                        return(ResponseManager <int> .ResponseOK(0, list));
                    }

                    return(ResponseManager <int> .ResponseInternalServerError("Error al realizar apuesta"));
                }
            }
            catch (System.Exception ex)
            {
                Log.Error(ex, ex.Message);
                return(ResponseManager <int> .ResponseInternalServerError(ex.Message));
            }
        }
        /// <summary>
        /// Make a bet on an open roulette
        /// </summary>
        /// <param name="apuestaRequest"></param>
        /// <returns></returns>
        public ModeloResponse <string> PlaceBet(ApuestaRequest apuestaRequest)
        {
            try
            {
                var authenticationClient = managerRepository.LoginClient(apuestaRequest.AuthorizeClient);
                if (authenticationClient.CodigoRespuesta != System.Net.HttpStatusCode.OK)
                {
                    return(ResponseManager <string> .ResponseConflict(authenticationClient.Mensaje));
                }
                apuestaRequest.IdUsuario = authenticationClient.Data[0].Id;
                var responseValidateBet = ValidateBet(apuestaRequest, authenticationClient);
                if (responseValidateBet.CodigoRespuesta != System.Net.HttpStatusCode.OK)
                {
                    return(ResponseManager <string> .ResponseConflict(responseValidateBet.Mensaje));
                }
                var responseValidateRoulette = ValidateRoulette(apuestaRequest.IdRuleta);
                if (responseValidateRoulette.CodigoRespuesta != System.Net.HttpStatusCode.OK)
                {
                    return(ResponseManager <string> .ResponseConflict(responseValidateRoulette.Mensaje));
                }
                var response = managerRepository.PlaceBet(apuestaRequest);
                if (response.CodigoRespuesta != System.Net.HttpStatusCode.OK)
                {
                    return(ResponseManager <string> .ResponseConflict(response.Mensaje));
                }

                return(ResponseManager <string> .ResponseOK());
            }
            catch (Exception ex)
            {
                Log.Error(ex, ex.Message);
                return(ResponseManager <string> .ResponseInternalServerError(ex.Message));
            }
        }
        /// <summary>
        /// Validate the bet restrictions
        /// </summary>
        /// <param name="apuestaRequest"></param>
        private ModeloResponse <string> ValidateBet(ApuestaRequest apuestaRequest, ModeloResponse <ClienteResponse> authorizeClient)
        {
            if (authorizeClient.Data[0].Dinero < apuestaRequest.Dinero)
            {
                return(ResponseManager <string> .ResponseConflict("No posee el dinero suficiente, para realizar la apuesta"));
            }
            if (apuestaRequest.Numero != null)
            {
                if (apuestaRequest.Numero < minNumber || apuestaRequest.Numero > maxNumber)
                {
                    return(ResponseManager <string> .ResponseConflict($"El rango de apuesta es entre {minNumber} y {maxNumber}"));
                }
            }
            if (apuestaRequest.Color != "" && (apuestaRequest.Color.ToLower() != "negro" && apuestaRequest.Color.ToLower() != "rojo"))
            {
                return(ResponseManager <string> .ResponseConflict("Solo puede seleccionar rojo o negro"));
            }
            if (apuestaRequest.Dinero > maxBet)
            {
                return(ResponseManager <string> .ResponseConflict($"La apuesta no puede superar el monto maximo: {maxBet}"));
            }

            return(ResponseManager <string> .ResponseOK());
        }
        public IActionResult PlaceBet([FromBody] ApuestaRequest apuestaRequest)
        {
            var response = managerBusiness.PlaceBet(apuestaRequest);

            return(Ok(response));
        }