From 4f2d315476e67e0a53fa006875c36c2ef96052a9 Mon Sep 17 00:00:00 2001 From: tenge646 <144627741+tenge646@users.noreply.github.com> Date: Fri, 8 Dec 2023 10:12:58 +0300 Subject: [PATCH 1/2] completed assignment --- lib/models.py | 44 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 42 insertions(+), 2 deletions(-) diff --git a/lib/models.py b/lib/models.py index 2681bee5a..a63519ad3 100644 --- a/lib/models.py +++ b/lib/models.py @@ -1,5 +1,6 @@ from sqlalchemy import ForeignKey, Column, Integer, String, MetaData from sqlalchemy.orm import relationship, backref +from sqlalchemy.orm import relationship from sqlalchemy.ext.declarative import declarative_base convention = { @@ -8,16 +9,18 @@ metadata = MetaData(naming_convention=convention) Base = declarative_base(metadata=metadata) +Base = declarative_base() class Company(Base): __tablename__ = 'companies' - - id = Column(Integer(), primary_key=True) +@@ -16,14 +11,49 @@ class Company(Base): name = Column(String()) founding_year = Column(Integer()) def __repr__(self): return f'' + freebies = relationship('Freebie', back_populates='company') + devs = relationship('Dev', secondary='freebies', back_populates='companies') class Dev(Base): __tablename__ = 'devs' @@ -25,5 +28,42 @@ class Dev(Base): id = Column(Integer(), primary_key=True) name= Column(String()) + freebies = relationship('Freebie', back_populates='dev') + companies = relationship('Company', secondary='freebies', back_populates='devs') + +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')) + dev = relationship('Dev', back_populates='freebies') + + company_id = Column(Integer(), ForeignKey('companies.id')) + company = relationship('Company', back_populates='freebies') + + def print_details(self): + return f"{self.dev.name} owns a {self.item_name} from {self.company.name}" + + @classmethod + def give_away(cls, dev, freebie): + if freebie.dev == dev: + freebie.dev = None + + @classmethod + def received_one(cls, item_name): + return cls.query.filter_by(item_name=item_name).first() is not None + + @classmethod + def create_freebie(cls, dev, company, item_name, value): + freebie = cls(dev=dev, company=company, item_name=item_name, value=value) + # session.add(freebie) + + def __repr__(self): return f'' + @classmethod + def oldest_company(cls): + return Company.query.order_by(Company.founding_year).first() \ No newline at end of file From 294ec624b77b1192bad0023d30663cee7b9c5dea Mon Sep 17 00:00:00 2001 From: tenge646 <144627741+tenge646@users.noreply.github.com> Date: Fri, 8 Dec 2023 10:13:24 +0300 Subject: [PATCH 2/2] completed assignment --- lib/models.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/models.py b/lib/models.py index a63519ad3..65fa979b7 100644 --- a/lib/models.py +++ b/lib/models.py @@ -13,7 +13,7 @@ class Company(Base): __tablename__ = 'companies' -@@ -16,14 +11,49 @@ class Company(Base): +class Company(Base): name = Column(String()) founding_year = Column(Integer())