feat(pet): integrates cloudinary, finishes register

This commit is contained in:
2024-12-09 01:58:19 -03:00
parent 28544a4bf8
commit 61fe4728a5
4 changed files with 50 additions and 11 deletions

View File

@@ -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.pets import bp
from app.services.pet_service import PetService 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 from app.utils.helpers import login_required
@bp.route('/') @bp.route('/')
@@ -12,8 +14,12 @@ def index():
) )
@bp.route('register', methods=["GET", "POST"]) @bp.route('register', methods=["GET", "POST"])
@login_required
def register(): def register():
if request.method == 'POST': 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() types = PetService.get_pets_kind()
return render_template("pets/register.html", types=types) return render_template("pets/register.html", types=types)

View File

@@ -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.extensions import db
from app.models.pet import Pet from app.models.pet import Pet
from app.models.pet_kind import PetKind from app.models.pet_kind import PetKind
@@ -11,19 +14,48 @@ class PetService:
@staticmethod @staticmethod
def register_pet(request: Request): 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: try:
name = PetValidators.is_valid_name(request.form.get('name')) name = PetValidators.is_valid_name(request.form.get('name'))
age = PetValidators.is_valid_age(request.form.get('age')) age = PetValidators.is_valid_age(request.form.get('age'))
sex = PetValidators.is_valid_sex(request.form.get('sex')) 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')) 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')) 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: except PetRegisterError as e:
flash(FlashMessage(e.message, AlertType.DANGER.value )) flash(FlashMessage(e.message, AlertType.DANGER.value ))
return True
@staticmethod @staticmethod
def get_pets(request: Request,results_per_page=8): def get_pets(request: Request,results_per_page=8):
@@ -48,6 +80,7 @@ class PetService:
age_to = int(age_to) age_to = int(age_to)
if age_to >= 1 and age_to < 7: if age_to >= 1 and age_to < 7:
query = query.filter(Pet.age <= age_to) query = query.filter(Pet.age <= age_to)
query = query.order_by(Pet.registration_date.desc())
try: try:
return db.paginate( return db.paginate(

View File

@@ -75,7 +75,7 @@
<div class="col-6 col-sm-4 col-md-4 col-lg-3 mt-3 mt-md-5"> <div class="col-6 col-sm-4 col-md-4 col-lg-3 mt-3 mt-md-5">
<div class="fliping-card img-fluid mx-auto"> <div class="fliping-card img-fluid mx-auto">
<div class="fliping-card__side fliping-card__side--front"> <div class="fliping-card__side fliping-card__side--front">
<img alt="pet" width="200" height="200" src="{{ url_for('static', filename=pet.img_src) }}" class="img-fluid"> <img alt="pet" width="200" height="200" src="{{ pet.img_src }}" class="img-fluid">
</div> </div>
<div class="fliping-card__side fliping-card__side--back <div class="fliping-card__side fliping-card__side--back
{%if pet.sex == 'M' %} {%if pet.sex == 'M' %}

View File

@@ -42,7 +42,7 @@ class DBUtils():
name=f"Pet {str(i)}", name=f"Pet {str(i)}",
kind_id=kind_id, kind_id=kind_id,
age=randrange(0,8), age=randrange(0,8),
img_src="img/placeholder-dog.jpg" if kind_id == 1 else "img/placeholder-cat.jpg", img_src="/static/img/placeholder-dog.jpg" if kind_id == 1 else "/static/img/placeholder-cat.jpg",
weight=1, weight=1,
location="Shelbyville", location="Shelbyville",
sex= "M" if randrange(3) > 1.5 else "F", sex= "M" if randrange(3) > 1.5 else "F",