8
8
from sqlalchemy import select , and_ , or_
9
9
import json
10
10
from flask_jwt_extended import JWTManager , create_access_token , jwt_required , get_jwt_identity
11
+ from flask_bcrypt import Bcrypt
11
12
12
13
api = Blueprint ('api' , __name__ )
14
+ bcrypt = Bcrypt ()
15
+
13
16
14
17
# Allow CORS requests to this API
15
18
CORS (api )
@@ -81,6 +84,8 @@ def get_pet(pet_id):
81
84
return jsonify ({"error" : "pet not found" }), 404
82
85
return jsonify (pet .serialize ()), 200
83
86
87
+
88
+
84
89
#obtener sugerencias de comida según mascota
85
90
@api .route ('/foods/suggestions/<int:pet_id>' , methods = ['GET' ])
86
91
def get_pet_suggestions (pet_id ):
@@ -103,6 +108,33 @@ def get_pet_suggestions(pet_id):
103
108
return [food [0 ].serialize () for food in food_suggestions ], 200
104
109
105
110
111
+ # #obtener sugerencias de comida según mascota
112
+ # @api.route('/foods/suggestions/<int:pet_id>', methods=['GET'])
113
+ # def get_pet_suggestions(pet_id):
114
+ # pet = Pet.query.get(pet_id)
115
+ # if not pet:
116
+ # return jsonify({"error": "pet not found"}), 404
117
+
118
+ # pet_data = pet.serialize()
119
+ # filters = [Food.animal_type == pet_data["animal_type"], Food.age == pet_data["age"]]
120
+
121
+ # if pet_data["animal_type"] == "perro":
122
+ # filters.append(Food.size == pet_data["size"])
123
+
124
+ # # Si la mascota tiene patologías, agregarlas al filtro
125
+ # if pet_data["pathologies"]:
126
+ # pathologies_list = pet_data["pathologies"].split(",")
127
+ # filters.append(Food.pathologies.in_(pathologies_list))
128
+ # else:
129
+ # filters.append(or_(Food.pathologies != None, Food.pathologies == None))
130
+ # food_suggestions = db.session.execute(select(Food).where(and_(*filters))).all()
131
+
132
+ # if not food_suggestions:
133
+ # return jsonify({"error": "no suggestions found"}), 404
134
+
135
+ # return jsonify([food[0].serialize() for food in food_suggestions]), 200
136
+
137
+
106
138
#obtener todos los alimentos según tipo de animal
107
139
@api .route ('/foods/cat' , methods = ['GET' ])
108
140
def get_all_cat_food ():
@@ -194,13 +226,16 @@ def create_food():
194
226
195
227
196
228
#registrar nuevo usuario(signup)
229
+
197
230
@api .route ('/signup' , methods = ['POST' ])
198
231
def create_user ():
199
232
data = request .get_json ()
233
+ hashed_password = bcrypt .generate_password_hash (data ["password" ]).decode ('utf-8' )
234
+
200
235
new_user = User (
201
236
name = data ["name" ],
202
237
email = data ["email" ],
203
- password = data [ "password" ]
238
+ password = hashed_password
204
239
)
205
240
if User .query .filter_by (email = data ["email" ]).first ():
206
241
return jsonify ({"msg" : "El usuario ya existe" }), 400
@@ -232,16 +267,19 @@ def login_user():
232
267
233
268
email = body ["email" ]
234
269
password = body ["password" ]
235
-
236
- user = User ().query .filter_by (email = email , password = password ).first ()
237
- token = create_access_token (identity = user .email )
238
- user_data = {
239
- "id" : user .id ,
240
- "email" : user .email ,
241
- "name" : user .name
242
- }
243
-
244
- return jsonify ({"msg" : "inicio de sesion exitoso" , "token" : token , "user" : user_data }), 200
270
+ user = User .query .filter_by (email = email ).first ()
271
+ print (user )
272
+ #if bcrypt.check_password_hash(user.password, body["password"]):
273
+ if user != None :
274
+ token = create_access_token (identity = user .email )
275
+ user_data = {
276
+ "id" : user .id ,
277
+ "email" : user .email ,
278
+ "name" : user .name
279
+ }
280
+
281
+ return jsonify ({"msg" : "inicio de sesion exitoso" , "token" : token , "user" : user_data }), 200
282
+ return jsonify ({"msg" : "credenciales no validas" }), 400
245
283
246
284
#Vista privada del usuario CON el token
247
285
@api .route ('/user' , methods = ['GET' ])
@@ -268,6 +306,7 @@ def get_user_info():
268
306
@api .route ('/accessories' , methods = ['POST' ])
269
307
def create_accessory ():
270
308
data = request .get_json ()
309
+
271
310
new_accessory = Accessories (
272
311
name = data ["name" ],
273
312
brand = data ["brand" ],
@@ -283,22 +322,27 @@ def create_accessory():
283
322
284
323
#crear una nueva mascota
285
324
@api .route ('/pets' , methods = ['POST' ])
325
+ @jwt_required ()
286
326
def create_pet ():
287
327
data = request .get_json ()
288
- new_accessory = Pet (
328
+ current_user_email = get_jwt_identity ()
329
+ user = User ().query .filter_by (email = current_user_email ).first ()
330
+
331
+ if not user :
332
+ return jsonify ({"msg" : "usuario no encontrado" }), 400
333
+
334
+ new_pet = Pet (
289
335
name = data ["name" ],
290
336
size = data ["size" ],
291
337
breed = data ["breed" ],
292
338
age = data ["age" ],
293
339
animal_type = data ["animal_type" ],
294
340
pathologies = data ["pathologies" ],
295
- user_id = data ["user_id" ],
296
-
297
-
298
- )
299
- db .session .add (new_accessory )
341
+ user_id = user .id
342
+ )
343
+ db .session .add (new_pet )
300
344
db .session .commit ()
301
- return jsonify (new_accessory .serialize ()), 201
345
+ return jsonify (new_pet .serialize ()), 201
302
346
303
347
# @api.route('/foods/<int:food_id>', methods=['PUT'])
304
348
# def update_food(food_id):
0 commit comments