feat(pets): implements adoption

This commit is contained in:
2024-12-09 23:23:36 -03:00
parent 053eefe939
commit eff1c8b1b6
9 changed files with 82 additions and 11 deletions

View File

@@ -2,9 +2,13 @@ import cloudinary
import cloudinary.uploader
import os
from flask import flash, Request, session
from sqlalchemy import Row, ScalarResult
from app.extensions import db
from app.models.adoptions import Adoptions
from app.models.adoption_status import AdoptionStatus
from app.models.pet import Pet
from app.models.pet_kind import PetKind
from app.utils.adoption_status import AdoptionStatusEnum
from app.utils.alert_type import AlertType
from app.utils.errors.pets.pet_register_errors import PetRegisterError
from app.utils.flash_message import FlashMessage
@@ -12,6 +16,35 @@ from app.utils.helpers import pet_sex_id_to_str
from app.utils.validators.pet_validators import PetValidators
class PetService:
@staticmethod
def adopt_pet(request: Request):
pet_id = request.args.get('id')
user_id = session.get('id')
if user_id is None:
session.clear()
return False
pet = PetValidators.is_valid_pet_id(pet_id)
if pet is not None:
if pet[0].registrar_id != user_id:
if db.session.execute(db.select(Adoptions).filter_by(pet_id=pet_id)).one_or_none() == None:
adoption_statuses: ScalarResult[AdoptionStatus] = db.session.execute(db.select(AdoptionStatus)).scalars();
pending_status_id = None
for adoption_status in adoption_statuses:
if adoption_status.name == AdoptionStatusEnum.PENDING.value:
pending_status_id = adoption_status.id
if pending_status_id is not None:
adoption = Adoptions(
adopter_id=user_id,
pet_id=pet_id,
status_id=pending_status_id
)
db.session.add(adoption)
db.session.commit()
db.session.flush()
return True
@staticmethod
def register_pet(request: Request):
user_id = session.get('id')