From c8e7923e58fdb7855766dc47cb8ee5cf13dd68fa Mon Sep 17 00:00:00 2001 From: Emmanuel Ngetich Date: Mon, 26 May 2025 10:25:52 -0700 Subject: [PATCH] =?UTF-8?q?=E2=9C=85=20All=20models=20and=20methods=20test?= =?UTF-8?q?ed=20successfully=20=E2=80=94=20freebie=20tracker=20stable?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- freebies.db | Bin 0 -> 16384 bytes lib/__init__.py | 0 lib/__pycache__/models.cpython-312.pyc | Bin 0 -> 4143 bytes lib/debug.py | 23 ++++++++++++--- lib/models.py | 35 +++++++++++++++++++++++ lib/seed.py | 38 +++++++++++++++++++++++++ 6 files changed, 92 insertions(+), 4 deletions(-) create mode 100644 freebies.db create mode 100644 lib/__init__.py create mode 100644 lib/__pycache__/models.cpython-312.pyc diff --git a/freebies.db b/freebies.db new file mode 100644 index 0000000000000000000000000000000000000000..9c74b0ff8f75ac41e27f44f8ccf5459f7f18c083 GIT binary patch literal 16384 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' + + def give_freebie(self, dev, item_name, value): + from sqlalchemy.orm import object_session + session = object_session(self) + freebie = Freebie(item_name=item_name, value=value, company=self, dev=dev) + session.add(freebie) + session.commit() class Dev(Base): __tablename__ = 'devs' @@ -27,3 +34,31 @@ class Dev(Base): def __repr__(self): return f'' + + def received_one(self, item_name): + return any(freebie.item_name == item_name for freebie in self.freebies) + + def give_away(self, dev, freebie): + from sqlalchemy.orm import object_session + if freebie in self.freebies: + freebie.dev = dev + session = object_session(freebie) + session.commit() + +class Freebie(Base): + __tablename__ = 'freebies' + + id = Column(Integer(), primary_key=True) + item_name = Column(String()) + value = Column(Integer()) + company_id = Column(Integer(), ForeignKey('companies.id')) + dev_id = Column(Integer(), ForeignKey('devs.id')) + + company = relationship('Company', backref=backref('freebies', lazy=True)) + dev = relationship('Dev', backref=backref('freebies', lazy=True)) + + 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..a3bc61a74 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, Freebie + + + +# Setup database +engine = create_engine('sqlite:///freebies.db') +Base.metadata.create_all(engine) +Session = sessionmaker(bind=engine) +session = Session() + +# Clear any existing data (optional during development) +session.query(Freebie).delete() +session.query(Dev).delete() +session.query(Company).delete() + +# Create companies +c1 = Company(name="OpenAI", founding_year=2015) +c2 = Company(name="Google", founding_year=1998) +c3 = Company(name="Apple", founding_year=1976) + +# Create developers +d1 = Dev(name="Alice") +d2 = Dev(name="Bob") +d3 = Dev(name="Charlie") + +# Create freebies +f1 = Freebie(item_name="T-shirt", value=20, company=c1, dev=d1) +f2 = Freebie(item_name="Sticker", value=5, company=c2, dev=d2) +f3 = Freebie(item_name="Water Bottle", value=15, company=c1, dev=d3) +f4 = Freebie(item_name="Notebook", value=10, company=c3, dev=d1) + +# Add and commit +session.add_all([c1, c2, c3, d1, d2, d3, f1, f2, f3, f4]) +session.commit() + +print("🌱 Seeded database successfully!")