diff --git a/freebies.db b/freebies.db new file mode 100644 index 000000000..559c395ee Binary files /dev/null and b/freebies.db differ diff --git a/lib/debug.py b/lib/debug.py index 4f922eb69..7beab9ba5 100644 --- a/lib/debug.py +++ b/lib/debug.py @@ -1,9 +1,21 @@ #!/usr/bin/env python3 from sqlalchemy import create_engine +from sqlalchemy.orm import sessionmaker -from models import Company, Dev +from models import Base, Company, Dev, Freebie if __name__ == '__main__': engine = create_engine('sqlite:///freebies.db') + Base.metadata.create_all(engine) + Session = sessionmaker(bind=engine) + session = Session() + + print("Ready for debugging!") + print("You have access to: session, Company, Dev, Freebie") + + import ipdb; ipdb.set_trace() + + session.close() +1 \ No newline at end of file diff --git a/lib/freebies.db b/lib/freebies.db index 12beb1c96..612e089ab 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..f540b0d36 100644 --- a/lib/models.py +++ b/lib/models.py @@ -16,8 +16,19 @@ class Company(Base): name = Column(String()) founding_year = Column(Integer()) + freebies = relationship('Freebie', back_populates='company') + def __repr__(self): return f'' + + @property + def devs(self): + return list({freebie.dev for freebie in self.freebies}) + + + def give_freebie(self, dev, item_name, value): + freebie = Freebie(item_name=item_name, value=value, dev=dev, company=self) + return freebie class Dev(Base): __tablename__ = 'devs' @@ -25,5 +36,40 @@ class Dev(Base): id = Column(Integer(), primary_key=True) name= Column(String()) + freebies = relationship('Freebie', back_populates='dev') + def __repr__(self): return f'' + + @property + def companies(self): + return list({freebie.company for freebie in self.freebies}) + + def received_one(self, item_name): + return any(freebie.item_name == item_name for freebie in self.freebies) + + def give_away(self, other_dev, freebie): + if freebie in self.freebies: + freebie.dev = other_dev + return True + return False + +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 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..02f87d722 100644 --- a/lib/seed.py +++ b/lib/seed.py @@ -1,3 +1,41 @@ #!/usr/bin/env python3 -# Script goes here! +from sqlalchemy import create_engine +from sqlalchemy.orm import sessionmaker + +from models import Base, Company, Dev + +if __name__ == '__main__': + engine = create_engine('sqlite:///freebies.db') + Base.metadata.create_all(engine) + Session = sessionmaker(bind=engine) + session = Session() + + #sample company here + apple = Company(name='Apple', founding_year=1971) + google = Company(name='Google', founding_year=1975) + microsoft = Company(name='Microsoft', founding_year=1975) + + #sample devs here + esther = Dev(name='Esther') + bob = Dev(name='Bob') + reign = Dev(name='Reign') + + session.add_all([apple, google, microsoft, esther, bob, reign]) + session.commit() + + #sample freebies here + sticker = apple.give_freebie(esther, 'sticker', 10) + mug = google.give_freebie(bob, 'mug', 5) + t_shirt = microsoft.give_freebie(reign, 't-shirt', 3) + + session.add_all([sticker, mug, t_shirt]) + session.commit() + + print('Database seeded successfully!') + session.close() + + + + +