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.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)

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.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(

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="fliping-card img-fluid mx-auto">
<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 class="fliping-card__side fliping-card__side--back
{%if pet.sex == 'M' %}

View File

@@ -42,7 +42,7 @@ class DBUtils():
name=f"Pet {str(i)}",
kind_id=kind_id,
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,
location="Shelbyville",
sex= "M" if randrange(3) > 1.5 else "F",