Skip to content

Commit a75b0c0

Browse files
authored
Merge pull request #9 from 4GeeksAcademy/ft001-base-de-datos
Ft001 base de datos
2 parents 85fa4b2 + 865bc89 commit a75b0c0

File tree

6 files changed

+108
-23
lines changed

6 files changed

+108
-23
lines changed

Pipfile

+1-1
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ gunicorn = "*"
1818
cloudinary = "*"
1919
flask-admin = "*"
2020
typing-extensions = "*"
21-
flask-jwt-extended = "==4.6.0"
21+
flask-jwt-extended = "*"
2222
wtforms = "==3.1.2"
2323

2424
[requires]

Pipfile.lock

+11-11
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/api/commands.py

+36-5
Original file line numberDiff line numberDiff line change
@@ -42,8 +42,26 @@ def insert_data_catfood():
4242
catfood.weight = 1.
4343
catfood.price = 1.
4444
catfood.animal_type = "gato"
45+
46+
catfood.age = "cachorro"
47+
catfood.pathologies = "renal"
48+
db.session.add(catfood)
49+
db.session.commit()
50+
51+
catfood = Food()
52+
catfood.name = "Farmina Vet Life Diabetic Gato"
53+
catfood.brand="Farmina"
54+
catfood.description = "Alimento para gatos adultos que facilita el control del aporte de glucosa en los casos de diabetes mellitus."
55+
catfood.ingredients = "Proteína de pollo deshidratada, gluten de maíz, avena, espelta, proteína de pescado hidrolizada, grasa de pollo, fibra de guisante, proteína de pescado deshidratada, huevos desecados, aceite de pescado, pulpa de remolacha desecada, semillas de lino, cloruro de potasio, inulina, fructo-oligosacáridos, extracto de levadura (fuente de manno-oligosacáridos), cáscaras y semillas de psyllium, cloruro de sodio, citrato de potasio, sulfato de calcio dihidratado, condroitín sulfato, glucosamina. Fuentes de hidratos de carbono: avena, espelta."
56+
catfood.weight = 0.4
57+
catfood.price = 6.99
58+
catfood.animal_type = "gato"
59+
catfood.age = "adulto"
60+
catfood.pathologies = "diabético"
61+
4562
catfood.age = "sd"
4663
catfood.pathologies = "asd"
64+
4765
db.session.add(catfood)
4866
db.session.commit()
4967

@@ -72,10 +90,10 @@ def insert_data_food():
7290
dogfood.description = "asd"
7391
dogfood.ingredients = "ads"
7492
dogfood.price = 1.
75-
dogfood.pathologies = "renal"
93+
dogfood.pathologies = "diabetes"
7694
dogfood.animal_type = "perro"
77-
dogfood.age = "senior"
78-
dogfood.size = "medium"
95+
dogfood.age = "cachorro"
96+
dogfood.size = "grande"
7997
dogfood.weight = 1.
8098
db.session.add(dogfood)
8199
db.session.commit()
@@ -116,12 +134,12 @@ def insert_data_accessories():
116134
@app.cli.command("insert_data_pet")
117135
def insert_data_pet():
118136
pet= Pet()
119-
pet.name = "asd"
137+
pet.name = ""
120138
pet.size=""
121139
pet.breed= "asd"
122140
pet.age= "cachorro"
123141
pet.animal_type = "gato"
124-
pet.pathologies="obesidad, diabetes"
142+
pet.pathologies="diabetes"
125143
pet.user_id = 1
126144
db.session.add(pet)
127145
db.session.commit()
@@ -137,13 +155,25 @@ def insert_data_pet():
137155
db.session.add(pet)
138156
db.session.commit()
139157

158+
pet= Pet()
159+
pet.name = "peluso"
160+
pet.size="grande"
161+
pet.breed= "asd"
162+
pet.age="cachorro"
163+
pet.animal_type = "perro"
164+
pet.pathologies="diabetes"
165+
pet.user_id = 1
166+
db.session.add(pet)
167+
db.session.commit()
168+
140169
pet= Pet()
141170
pet.name = "asd"
142171
pet.size="oxbow"
143172
pet.breed= "asd"
144173
pet.age= "2"
145174
pet.animal_type = "cobaya"
146175
pet.pathologies="escorbuto"
176+
pet.user_id = 1
147177
db.session.add(pet)
148178
db.session.commit()
149179

@@ -154,6 +184,7 @@ def insert_data_pet():
154184
pet.age= "60"
155185
pet.animal_type = "loro"
156186
pet.pathologies=""
187+
pet.user_id = 1
157188
db.session.add(pet)
158189
db.session.commit()
159190

src/api/models.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ class Pet(db.Model):
155155
breed = db.Column(db.String(100), nullable=True) # cambiar raza por tamaño
156156
age = db.Column(db.String, nullable=False)
157157
animal_type= db.Column(db.String, nullable=False)
158-
pathologies = db.Column(db.Text, nullable=False) # patología contemple peso
158+
pathologies = db.Column(db.Text, nullable=True) # patología contemple peso
159159
user_id = db.Column(db.ForeignKey("user.id"))
160160

161161
# is_hypoallergenic = db.Column(db.Boolean, default=False)

src/api/routes.py

+53-5
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,9 @@
55
from api.models import db, User, Food, Pet, Accessories
66
from api.utils import generate_sitemap, APIException
77
from flask_cors import CORS
8-
from sqlalchemy import select
8+
from sqlalchemy import select, and_, or_
99
import json
10+
from flask_jwt_extended import JWTManager, create_access_token, jwt_required, get_jwt_identity
1011

1112
api = Blueprint('api', __name__)
1213

@@ -89,10 +90,10 @@ def get_pet_suggestions(pet_id):
8990
# Solucion simple: limitar a 1 patologia cada animal por ahora
9091
#if para pet# anymal_type == perro, animal size #si no no hace falta size
9192
if pet["animal_type"] == "perro":
92-
food_suggestions = db.session.execute(select(Food).where(Food.animal_type==pet["animal_type"]),
93+
food_suggestions = db.session.execute(select(Food).where(and_(Food.animal_type==pet["animal_type"]),
9394
Food.size==pet["size"],
9495
Food.age==pet["age"],
95-
Food.pathologies==pet["pathologies"]).all()
96+
Food.pathologies==pet["pathologies"])).all()
9697
else:
9798
food_suggestions = db.session.execute(select(Food).where(Food.animal_type==pet["animal_type"]),
9899
Food.age==pet["age"],
@@ -101,29 +102,60 @@ def get_pet_suggestions(pet_id):
101102
return "no suggestions found", 404
102103
return [food[0].serialize() for food in food_suggestions], 200
103104

105+
106+
#obtener todos los alimentos según tipo de animal
107+
@api.route('/foods/cat', methods=['GET'])
108+
def get_all_cat_food():
109+
food_cat = db.session.query(Food).filter(Food.animal_type.ilike("%gato%")).all()
110+
111+
print("Datos obtenidos:", food_cat)
112+
113+
if not food_cat:
114+
return jsonify({"error": "No cat food found"}), 404
115+
116+
104117
# #obtener todos los alimentos según tipo de animal
105118
@api.route('/foods/cat', methods=['GET'])
106119
def get_all_cat_food():
107120
food_cat = db.session.query(Food).filter(Food.animal_type.ilike("%gato%")).all()
108121
print("Datos obtenidos:", food_cat)
109122
if not food_cat:
110123
return jsonify({"error": "No cat food found"}), 404
124+
111125
return jsonify([food.serialize() for food in food_cat]), 200
112126

113127
@api.route('/foods/dog', methods=['GET'])
114128
def get_all_dog_food():
115129
food_dog = db.session.query(Food).filter(Food.animal_type.ilike("%perro%")).all()
130+
131+
132+
print("Datos obtenidos:", food_dog)
133+
134+
if not food_dog:
135+
return jsonify({"error": "No dog food found"}), 404
136+
137+
116138
print("Datos obtenidos:", food_dog)
117139
if not food_dog:
118140
return jsonify({"error": "No dog food found"}), 404
141+
119142
return jsonify([food.serialize() for food in food_dog]), 200
120143

121144
@api.route('/foods/exotic', methods=['GET'])
122145
def get_all_exotic_food():
123146
food_exotic = db.session.query(Food).filter(Food.animal_type.ilike("%exótico%")).all()
147+
148+
149+
print("Datos obtenidos:", food_exotic)
150+
151+
if not food_exotic:
152+
return jsonify({"error": "No exotic food found"}), 404
153+
154+
124155
print("Datos obtenidos:", food_exotic)
125156
if not food_exotic:
126157
return jsonify({"error": "No exotic food found"}), 404
158+
127159
return jsonify([food.serialize() for food in food_exotic]), 200
128160

129161
# Obtener todos los accesorios
@@ -135,7 +167,7 @@ def get_accessories():
135167
return jsonify([accessory.serialize() for accessory in accessories]), 200
136168

137169

138-
# Obtener una accesotio por ID
170+
# Obtener una accesorio por ID
139171
@api.route('/accessories/<int:accessories_id>', methods=['GET'])
140172
def get_accessory(accessories_id):
141173
accessories = Accessories.query.get(accessories_id)
@@ -163,7 +195,7 @@ def create_food():
163195
db.session.commit()
164196
return jsonify(new_food.serialize()), 201
165197

166-
#crear nuevo usuario
198+
#registrar nuevo usuario
167199
@api.route('/users', methods=['POST'])
168200
def create_user():
169201
data = request.get_json()
@@ -173,10 +205,26 @@ def create_user():
173205
password=data["password"],
174206
is_active=data["is_active"]
175207
)
208+
if User.query.filter_by(email=data["email"]).first():
209+
return jsonify({"msg": "El usuario ya existe"}), 400
210+
176211
db.session.add(new_user)
177212
db.session.commit()
178213
return jsonify(new_user.serialize()), 201
179214

215+
# iniciar sesion
216+
@api.route('loging/user', methods=['POST'])
217+
def logging_user():
218+
data = request.get_json()
219+
user = User.query.filter_by(email=data["email"]).first()
220+
221+
222+
if User.query.filter_by(email=data["email"]).first() and User.query.filter_by(password=data["password"]).first():
223+
access_token=create_access_token(identity=user.email)
224+
return jsonify(access_token=access_token), 200
225+
return jsonify ({"nsg":"credenciales invalidas"}), 400
226+
227+
180228
#crear un nuevo accesorio
181229
@api.route('/accessories', methods=['POST'])
182230
def create_accessory():

src/app.py

+6
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@
1010
from api.routes import api
1111
from api.admin import setup_admin
1212
from api.commands import setup_commands
13+
from flask_jwt_extended import JWTManager
14+
from datetime import timedelta
1315

1416
# from models import Person
1517

@@ -31,6 +33,10 @@
3133
MIGRATE = Migrate(app, db, compare_type=True)
3234
db.init_app(app)
3335

36+
app.config["JWT_ACCESS_TOKEN_EXPIRE"] = timedelta(hours=1)
37+
jwt = JWTManager(app)
38+
39+
3440
# add the admin
3541
setup_admin(app)
3642

0 commit comments

Comments
 (0)