# Standard library imports from datetime import datetime from sqlalchemy import Enum from sqlalchemy.ext.hybrid import hybrid_property # Import db from accounts.models import db from accounts.models.dog.breed_size import BreedSize from accounts.models.status import Status class Dog(db.Model): __tablename__ = 'dogs' id = db.Column(db.Integer, primary_key=True, autoincrement=True) owner = db.relationship('User', back_populates='dogs') owner_id = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=False) name = db.Column(db.String, nullable=False) breed_size = db.Column(Enum(BreedSize), default=BreedSize.MEDIUM) birth_date = db.Column(db.DateTime, default=datetime(1970, 1, 1)) visits = db.relationship('Visit', back_populates='dogs') created_at = db.Column(db.DateTime, default=datetime.utcnow) updated_at = db.Column(db.DateTime, onupdate=datetime.utcnow) def __str__(self): return self.name def __repr__(self): return self.to_dict() @hybrid_property def status(self): return self.owner.status def get_age(self): current_date = datetime.now() age = (current_date.year - self.birth_date.year - ((current_date.month, current_date.day) < (self.birth_date.month, self.birth_date.day))) return age def to_dict(self): return { 'id': self.id, 'owner': self.owner, 'owner_id': self.owner_id, 'name': self.name, 'breed_size': self.breed_size, 'birth_date': self.birth_date, 'age': self.get_age(), 'visits': self.visits, 'status': self.status, 'created_at': self.created_at, 'updated_at': self.updated_at }