from datetime import datetime from sqlalchemy import Enum # Import db from accounts.models import db from accounts.models.status import Status class User(db.Model): __tablename__ = 'users' id = db.Column(db.Integer, primary_key=True, autoincrement=True) name = db.Column(db.String, nullable=False) username = db.Column(db.String, unique=True, nullable=False) email = db.Column(db.String, nullable=False) address = db.Column(db.String, nullable=False) password = db.Column(db.String, nullable=False) dogs = db.relationship('Dog', back_populates='owner') visits = db.relationship('Visit', back_populates='owner') status = db.Column(Enum(Status), default=Status.ACTIVE) 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() # Get all dogs currently set def get_dogs(self): return [dog for dog in self.dogs] # Retrieve all booked visits def get_visits(self): return [visit for visit in self.visits] # Retrieve past booked visits def get_visit_overview(self): current_time = datetime.now() return [visit for visit in self.visits if visit.date_time < current_time] def to_dict(self): return { 'name': self.name, 'username': self.username, 'email': self.email, 'address': self.address, 'password': self.password, 'dogs': self.get_dogs(), 'visits': self.get_visits(), 'status': self.status, 'created_at': self.created_at, 'updated_at': self.updated_at }