diff --git a/app/pets/routes.py b/app/pets/routes.py index f9cc8b1..2f8f6cb 100644 --- a/app/pets/routes.py +++ b/app/pets/routes.py @@ -1,6 +1,8 @@ -from flask import request, render_template +from flask import request, render_template, redirect, flash from app.pets import bp from app.services.pet_service import PetService +from app.utils.alert_type import AlertType +from app.utils.flash_message import FlashMessage from app.utils.helpers import login_required @bp.route('/') @@ -12,8 +14,12 @@ def index(): ) @bp.route('register', methods=["GET", "POST"]) +@login_required def register(): if request.method == 'POST': - PetService.register_pet(request) + register = PetService.register_pet(request) + if not register: + return redirect("/users/login") + flash(FlashMessage("Pet added!", AlertType.SUCCESS.value )) types = PetService.get_pets_kind() return render_template("pets/register.html", types=types) \ No newline at end of file diff --git a/app/services/pet_service.py b/app/services/pet_service.py index a5302b8..bbf1f55 100644 --- a/app/services/pet_service.py +++ b/app/services/pet_service.py @@ -1,4 +1,7 @@ -from flask import flash, Request +import cloudinary +import cloudinary.uploader +import os +from flask import flash, Request, session from app.extensions import db from app.models.pet import Pet from app.models.pet_kind import PetKind @@ -11,19 +14,48 @@ class PetService: @staticmethod def register_pet(request: Request): - """Validations""" + user_id = session.get('id') + if user_id is None: + session.clear() + return False + + img = request.files['img'] + img_url = None + if(request.files['img']): + try: + cloudinary.config(cloud_name = os.environ.get('CLOUD_NAME'), api_key=os.getenv('API_KEY'), + api_secret=os.getenv('API_SECRET')) + upload_result = cloudinary.uploader.upload(img) + img_url = upload_result['secure_url'] + except: + print("err!") + try: name = PetValidators.is_valid_name(request.form.get('name')) age = PetValidators.is_valid_age(request.form.get('age')) sex = PetValidators.is_valid_sex(request.form.get('sex')) - heigth = PetValidators.is_valid_height(request.form.get('height')) + height = PetValidators.is_valid_height(request.form.get('height')) weight = PetValidators.is_valid_weight(request.form.get('weight')) - kind = PetValidators.is_valid_type(request.form.get('type')) + kind_id = PetValidators.is_valid_type(request.form.get('type')) location = PetValidators.is_valid_location(request.form.get('location')) - """uploading image to cloudinary""" - """saving the data in the db""" + + pet = Pet( + name=name, + kind_id=kind_id, + age=age, + img_src= img_url if img_url is not None else '/static/img/pet-placeholder.webp', + weight=weight, + location=location, + sex=sex, + height=height, + registrar_id=user_id + ) + db.session.add(pet) + db.session.commit() + db.session.flush() except PetRegisterError as e: flash(FlashMessage(e.message, AlertType.DANGER.value )) + return True @staticmethod def get_pets(request: Request,results_per_page=8): @@ -48,6 +80,7 @@ class PetService: age_to = int(age_to) if age_to >= 1 and age_to < 7: query = query.filter(Pet.age <= age_to) + query = query.order_by(Pet.registration_date.desc()) try: return db.paginate( @@ -56,7 +89,7 @@ class PetService: per_page=results_per_page, ) except: - return db.paginate( + return db.paginate( select=query, page=1, per_page=results_per_page, diff --git a/app/templates/pets/index.html b/app/templates/pets/index.html index defaa4c..ac5a7a7 100644 --- a/app/templates/pets/index.html +++ b/app/templates/pets/index.html @@ -75,7 +75,7 @@