diff --git a/lib/models.py b/lib/models.py index 2681bee5a..4c4b00726 100644 --- a/lib/models.py +++ b/lib/models.py @@ -1,7 +1,8 @@ from sqlalchemy import ForeignKey, Column, Integer, String, MetaData -from sqlalchemy.orm import relationship, backref +from sqlalchemy.orm import relationship, backref,session from sqlalchemy.ext.declarative import declarative_base + convention = { "fk": "fk_%(table_name)s_%(column_0_name)s_%(referred_table_name)s", } @@ -19,6 +20,14 @@ class Company(Base): def __repr__(self): return f'' + def give_freebie(self, dev, item_name, value): + freebie = Freebie(dev=dev, company=self, item_name=item_name, value=value) + return freebie + + @classmethod + def oldest_company(cls): + return session.query(cls).order_by(cls.founding_year).first() + class Dev(Base): __tablename__ = 'devs' @@ -27,3 +36,28 @@ class Dev(Base): def __repr__(self): return f'' + + def give_away(self, dev, freebie): + if freebie.dev == self: + freebie.dev = dev + return True + return False + + def received_one(self, item_name): + return any(freebie.item_name == item_name for freebie in self.freebies) + +class Freebie(Base): + __tablename__ = 'freebies' + + id = Column(Integer(), primary_key=True) + dev_id = Column(Integer, ForeignKey('devs.id')) + company_id = Column(Integer, ForeignKey('companies.id')) + item_name = Column(String()) + value = Column(Integer()) + + dev = relationship("Dev", backref=backref("freebies")) + company = relationship("Company", backref=backref("freebies")) + + def print_details(self): + return f"{self.dev.name} owns a {self.item_name} from {self.company.name}" +