diff --git a/lib/__pycache__/models.cpython-38.pyc b/lib/__pycache__/models.cpython-38.pyc new file mode 100644 index 000000000..75804d983 Binary files /dev/null and b/lib/__pycache__/models.cpython-38.pyc differ diff --git a/lib/debug.py b/lib/debug.py index 4f922eb69..1b4ff60ad 100644 --- a/lib/debug.py +++ b/lib/debug.py @@ -1,9 +1,36 @@ #!/usr/bin/env python3 from sqlalchemy import create_engine +from sqlalchemy.orm import sessionmaker +from models import Company, Dev, Freebie, Base -from models import Company, Dev +engine = create_engine('sqlite:///freebies.db') +Base.metadata.create_all(engine) +Session = sessionmaker(bind=engine) +session = Session() if __name__ == '__main__': - engine = create_engine('sqlite:///freebies.db') import ipdb; ipdb.set_trace() + + company1 = Company(name='Tech Corp', founding_year=2000) + company2 = Company(name='DevWorks', founding_year=2010) + + dev1 = Dev(name='Alice') + dev2 = Dev(name='Bob') + + session.add_all([company1, company2, dev1, dev2]) + session.commit() + + + company1.give_freebie(dev1, "T-shirt", 10) + company1.give_freebie(dev2, "Mug", 5) + company2.give_freebie(dev1, "Sticker", 2) + + + freebies = session.query(Freebie).all() + for freebie in freebies: + print(freebie.print_details()) + + + print(dev1.received_one("T-shirt")) + print(dev1.received_one("Hoodie")) diff --git a/lib/freebies.db b/lib/freebies.db index 12beb1c96..b3bb205a4 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..5ed8b8a3c 100644 --- a/lib/models.py +++ b/lib/models.py @@ -16,14 +16,65 @@ class Company(Base): name = Column(String()) founding_year = Column(Integer()) + freebies = relationship('Freebie', back_populates='company', overlaps="devs") + devs = relationship('Dev', secondary='freebies', back_populates='companies', overlaps="freebies") + def __repr__(self): return f'' + def give_freebie(self, session, dev, item_name, value): + """Give a freebie to a developer.""" + freebie = Freebie(dev_id=dev.id, company_id=self.id, item_name=item_name, value=value) + session.add(freebie) + session.commit() + + @classmethod + def oldest_company(cls, session): + """Return the oldest company based on the 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()) + + freebies = relationship('Freebie', back_populates='dev', overlaps="companies") + companies = relationship('Company', secondary='freebies', back_populates='devs', overlaps="freebies") def __repr__(self): return f'' + + def received_one(self, item_name): + """Check if a developer has received a freebie with the given item name.""" + return any(freebie.item_name == item_name for freebie in self.freebies) + + def give_away(self, dev, freebie, session): + """Give away a freebie to another developer.""" + if freebie.dev == self: + freebie.dev = dev + session.commit() + else: + raise ValueError("You cannot give away a freebie that doesn't belong to you.") + + +class Freebie(Base): + __tablename__ = 'freebies' + + id = Column(Integer(), primary_key=True) + item_name = Column(String()) + value = Column(Integer()) + + dev_id = Column(Integer, ForeignKey('devs.id')) + company_id = Column(Integer, ForeignKey('companies.id')) + + dev = relationship('Dev', back_populates='freebies') + company = relationship('Company', back_populates='freebies') + + def __repr__(self): + return f'' + + def print_details(self): + """Return a formatted string with details of the freebie.""" + return f'{self.dev.name} owns a {self.item_name} from {self.company.name}' diff --git a/lib/seed.py b/lib/seed.py index b16becbbb..6288e5667 100644 --- a/lib/seed.py +++ b/lib/seed.py @@ -1,3 +1,26 @@ #!/usr/bin/env python3 -# Script goes here! +from models import Company, Dev, Freebie, Base +from sqlalchemy import create_engine +from sqlalchemy.orm import sessionmaker + +engine = create_engine('sqlite:///freebies.db') +Base.metadata.create_all(engine) +Session = sessionmaker(bind=engine) +session = Session() + +company1 = Company(name='Tech Corp', founding_year=2000) +company2 = Company(name='DevWorks', founding_year=2010) +dev1 = Dev(name='Alice') +dev2 = Dev(name='Bob') + +session.add_all([company1, company2, dev1, dev2]) +session.commit() + +company1.give_freebie(session, dev1, "T-shirt", 10) +company1.give_freebie(session, dev2, "Mug", 5) +company2.give_freebie(session, dev1, "Sticker", 2) + +session.commit() + +print("Database seeded successfully!")