diff --git a/lib/models.py b/lib/models.py index 2681bee5a..1458364e1 100644 --- a/lib/models.py +++ b/lib/models.py @@ -2,9 +2,7 @@ from sqlalchemy.orm import relationship, backref from sqlalchemy.ext.declarative import declarative_base -convention = { - "fk": "fk_%(table_name)s_%(column_0_name)s_%(referred_table_name)s", -} +convention = {"fk": "fk_%(table_name)s_%(column_0_name)s_%(referred_table_name)s"} metadata = MetaData(naming_convention=convention) Base = declarative_base(metadata=metadata) @@ -16,14 +14,59 @@ class Company(Base): name = Column(String()) founding_year = Column(Integer()) + freebies = relationship("Freebie", backref=backref("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): + return Freebie(item_name=item_name, value=value, dev=dev, company=self) + + @classmethod + def oldest_company(cls): + return sorted(cls.query.all(), key=lambda c: c.founding_year)[0] + + class Dev(Base): __tablename__ = 'devs' id = Column(Integer(), primary_key=True) - name= Column(String()) + name = Column(String()) + + freebies = relationship("Freebie", backref=backref("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(f.item_name == item_name for f in self.freebies) + + def give_away(self, dev, freebie): + if freebie.dev == self: + freebie.dev = 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")) + + def __repr__(self): + return f'' + + def print_details(self): + return f"{self.dev.name} owns a {self.item_name} from {self.company.name}." \ No newline at end of file diff --git a/lib/seed.py b/lib/seed.py index b16becbbb..a696296d6 100644 --- a/lib/seed.py +++ b/lib/seed.py @@ -1,3 +1,27 @@ -#!/usr/bin/env python3 +from models import Base, Company, Dev, Freebie +from sqlalchemy import create_engine +from sqlalchemy.orm import sessionmaker -# Script goes here! +engine = create_engine("sqlite:///freebies.db") +Session = sessionmaker(bind=engine) +session = Session() + +Base.metadata.drop_all(engine) +Base.metadata.create_all(engine) + +c1 = Company(name="Google", founding_year=1998) +c2 = Company(name="Microsoft", founding_year=1975) +d1 = Dev(name="Alice") +d2 = Dev(name="Bob") + +session.add_all([c1, c2, d1, d2]) +session.commit() + +f1 = c1.give_freebie(d1, "T-Shirt", 20) +f2 = c1.give_freebie(d2, "Sticker", 5) +f3 = c2.give_freebie(d1, "Bottle", 15) + +session.add_all([f1, f2, f3]) +session.commit() + +session.close() \ No newline at end of file