Aún no tienes acceso a esta clase

Crea una cuenta y continúa viendo este curso

Curso de Google App Engine

Curso de Google App Engine

Adriana Fernanda Moya Forero

Adriana Fernanda Moya Forero

Reto de DataStore, crea tu primer query

11/29
Recursos

Crea tu primer Query a una tabla del proyecto, donde utilices por lo menos 1 filtro de consulta.

Te dejo la lista de los comandos usados en esta clase:

git clone https://github.com/xertica-cloud/platzi-hello-gae.git
cd platzi-hello-gae
dev_appserver.py $PWD
gcloud app deploy app.yaml —project platzi-test-001 --version 1

Aportes 5

Preguntas 0

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad? Crea una cuenta o inicia sesión.

Interesante reto, aquí mi solución:

models.py

# RETO
class Reglas(EndpointsModel):
    # Crear propiedades
    rango_minimo = ndb.IntegerProperty()
    status = ndb.StringProperty()
    valor_aprobado = ndb.IntegerProperty()

    @staticmethod
    def insertar_regla(rango_minimo, status, valor_aprobado):
        return Reglas(
            rango_minimo=rango_minimo,
            status=status,
            valor_aprobado=valor_aprobado
        ).put().get()

    @staticmethod
    def listar_reglas():
        return Reglas.query().order(-Reglas.rango_minimo)

views.py

@app.route('/solicitar', methods=['GET', 'POST'])
def solicitar_prestamo():
    if request.method == "POST":
        json_request = request.get_json(force=True)
        logging.info(json_request)
        response = {}

        status = ''
        valor_aprobado = 0

        reglas = Reglas.listar_reglas()
        for regla in reglas:
            if int(json_request['salario']) >= regla.rango_minimo:
                status = regla.status.upper()
                valor_aprobado = regla.valor_aprobado
                break

        solicitud = Solicitud.registrar_solicitud(
            id_usuario=int(json_request['id']),
            salario=int(json_request['salario']),
            status=status,
            nit=int(json_request['nit']),
            valor_aprobado=valor_aprobado
        )

        response['status'] = '200'
        response['status_solicitud'] = status
        response['valor_aprobado'] = valor_aprobado

        return json.dumps(response)

    return "error"

@app.route('/insertar_reglas')
def insertar_reglas():
    """
    Regla 1: Si el salario es menor a 800000 el credito es RECHAZADO
    Regla 2: Si el salario es mayor a 800000 y menor a 1000000 es aprobado por 5000000
    Regla 3: Si el salario es mayor a 1000000 y menor a 4000000 es aprobado por 2000000
    Regla 4: Si el salario es mayor a 4000000 es aprobado por 50000000
    :return:
    """
    if request.method == "GET":
        Reglas.insertar_regla(4000000, "aprobado", 50000000)
        Reglas.insertar_regla(1000000, "aprobado", 2000000)
        Reglas.insertar_regla(800000, "aprobado",  500000)
        Reglas.insertar_regla(0, "RECHAZADO", 0)
    return "Reglas Insertadas"

Listo, reto resuelto, comparto mi solución, con algunas modificaciones:

Cambié el atributo status por un atributo booleano llamado “aprobado”, el cual indica si se aprobó el préstamo o no.

models.py

class Solicitud(EndpointsModel):
	...
	aprobado = ndb.BooleanProperty() #Reemplazar status por aprobado donde corresponda
	...

class Regla(EndpointsModel):
    rango_minimo = ndb.IntegerProperty()
    aprobado = ndb.BooleanProperty()
    monto_aprobado = ndb.IntegerProperty()

    @staticmethod
    def insertar_regla(rango_minimo, aprobado, monto_aprobado):
        return Regla(
            rango_minimo=rango_minimo,
            aprobado=aprobado,
            monto_aprobado=monto_aprobado
        ).put().get()

    @staticmethod
    def listar_reglas():
        return Regla.query().order(-Regla.rango_minimo)

views.py

Recuerda cambiar status por aprobado en solicitar_prestamo()

@app.route(’/insertar_reglas’)
def insertar_reglas():
	if request.method == ‘GET’:
		reglas = [
			(0, False, 0),
			(800000, True, 5000000),
			(1000000, True, 2000000),
			(4000000, True, 50000000),
		]
		for i in range(0, len(reglas)):
			Regla.insertar_regla(reglas[i][0], reglas[i][1], reglas[i][2])
		return 'Reglas Insertadas’
	else:
		return ‘Error’

En el archivo controller.js ubicado en my_app/static/js/angular/ cambié la linea 142:

if(json.status == 'RECHAZADO')

por

if(!json.status_solicitud)

Dado que en la view solicitar_prestamo(), la variable status que se pasa por el response corresponde al código de respuesta del servidor, que es 200 en caso que todo esté bien y status_solicitud, indica si esta fue o no aprobada.

Pueden probarlo en este enlace

genial

Reto cumplido ! code /datastore