diff --git a/lib/__pycache__/models.cpython-310.pyc b/lib/__pycache__/models.cpython-310.pyc new file mode 100644 index 000000000..45fef0cd2 Binary files /dev/null and b/lib/__pycache__/models.cpython-310.pyc differ diff --git a/lib/debug.py b/lib/debug.py index 4f922eb69..c5feaf39d 100644 --- a/lib/debug.py +++ b/lib/debug.py @@ -1,9 +1,39 @@ #!/usr/bin/env python3 from sqlalchemy import create_engine - -from models import Company, Dev +from sqlalchemy.orm import sessionmaker +from models import Company, Dev, Freebie if __name__ == '__main__': engine = create_engine('sqlite:///freebies.db') - import ipdb; ipdb.set_trace() + Session = sessionmaker(bind=engine) + session = Session() + + # Creating sample data + company1 = Company(name="Company A", founding_year=1990) + company2 = Company(name="Company B", founding_year=2000) + dev1 = Dev(name="Dev X") + dev2 = Dev(name="Dev Y") + + # Add companies and devs to the session + session.add_all([company1, company2, dev1, dev2]) + session.commit() + + # Test the give_freebie method + freebie1 = company1.give_freebie(dev1, "T-shirt", 10) + freebie2 = company2.give_freebie(dev2, "Sticker", 5) + + # Test the print_details method + print(freebie1.print_details()) # Should print: Dev X owns a T-shirt from Company A + + # Test the oldest_company method + oldest = Company.oldest_company(session) + print(f"The oldest company is: {oldest.name}") # Should print: The oldest company is: Company A + + # Test the received_one method + print(dev1.received_one("T-shirt")) # Should print: True + print(dev2.received_one("T-shirt")) # Should print: False + + # Test the give_away method + dev1.give_away(dev2, freebie1) + print(freebie1.dev.name) # Should print: Dev Y diff --git a/lib/freebies.db b/lib/freebies.db index 12beb1c96..86c1d7be2 100644 Binary files a/lib/freebies.db and b/lib/freebies.db differ diff --git a/lib/models.py b/lib/models.py index 2681bee5a..998be6036 100644 --- a/lib/models.py +++ b/lib/models.py @@ -15,15 +15,61 @@ class Company(Base): id = Column(Integer(), primary_key=True) name = Column(String()) founding_year = Column(Integer()) - + + # Define the relationship between Company and Freebie + freebies = relationship("Freebie", back_populates="company") + def __repr__(self): return f'' + def give_freebie(self, dev, item_name, value): + # Create a new Freebie associated with this company and the given dev + freebie = Freebie(item_name=item_name, value=value, dev=dev, company=self) + return freebie + + @classmethod + def oldest_company(cls, session): + # Return the Company instance with the earliest founding year + return session.query(cls).order_by(cls.founding_year).first() + class Dev(Base): __tablename__ = 'devs' id = Column(Integer(), primary_key=True) - name= Column(String()) - + name = Column(String()) + + # Define the relationship between Dev and Freebie + freebies = relationship("Freebie", back_populates="dev") + def __repr__(self): return f'' + + def received_one(self, item_name): + # Check if any of the freebies associated with the dev has the given item_name + return any(freebie.item_name == item_name for freebie in self.freebies) + + def give_away(self, other_dev, freebie): + # Change the freebie's dev to be the given dev if it belongs to the current dev + if freebie.dev == self: + freebie.dev = other_dev + +class Freebie(Base): + __tablename__ = 'freebies' + + id = Column(Integer(), primary_key=True) + item_name = Column(String()) + value = Column(Integer()) + + # Define foreign key relationships to Dev and Company + dev_id = Column(Integer(), ForeignKey('devs.id')) + company_id = Column(Integer(), ForeignKey('companies.id')) + + # Define the relationships between Freebie and Dev/Company + dev = relationship("Dev", back_populates="freebies") + company = relationship("Company", back_populates="freebies") + + def __repr__(self): + return f'' + + def print_details(self): + return f'{self.dev.name} owns a {self.item_name} from {self.company.name}'