diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 000000000..5c80254db --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,6 @@ +{ + "[python]": { + "editor.defaultFormatter": "ms-python.autopep8" + }, + "python.formatting.provider": "none" +} diff --git a/lib/__pycache__/models.cpython-38.pyc b/lib/__pycache__/models.cpython-38.pyc new file mode 100644 index 000000000..9da34376f Binary files /dev/null and b/lib/__pycache__/models.cpython-38.pyc differ diff --git a/lib/models.py b/lib/models.py index 2681bee5a..6cd24ca10 100644 --- a/lib/models.py +++ b/lib/models.py @@ -1,4 +1,4 @@ -from sqlalchemy import ForeignKey, Column, Integer, String, MetaData +from sqlalchemy import ForeignKey, Column, Integer, String, MetaData, Table from sqlalchemy.orm import relationship, backref from sqlalchemy.ext.declarative import declarative_base @@ -9,6 +9,14 @@ Base = declarative_base(metadata=metadata) +dev_company_association = Table( + 'dev_company_association', + Base.metadata, + Column('dev_id', Integer, ForeignKey('dev.id')), + Column('company_id', Integer, ForeignKey('companies.id')) +) + + class Company(Base): __tablename__ = 'companies' @@ -19,11 +27,47 @@ class Company(Base): def __repr__(self): return f'' + class Dev(Base): __tablename__ = 'devs' id = Column(Integer(), primary_key=True) - name= Column(String()) + name = Column(String()) def __repr__(self): return f'' + + @property + def freebies(self): + return self.freebies + + @property + def companies(self): + return [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, dev, freebie): + if freebie.dev == self: + freebie.dev = dev + + +class Freebie(Base): + __tablename__ = 'freebies' + id = Column(Integer, primary_key=True) + item_name = Column(String, nullable=False) + value = Column(Integer()) + dev_id = Column(Integer, ForeignKey('devs.id')) + Company_id = Column(Integer, ForeignKey('companies.id')) + + dev = relationship('Dev', backref=backref( + 'freebies', cascade='all,delete-orphan')) + company = relationship('Company', backref=backref( + 'freebies', cascade='all, delete-orphan')) + + 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..c3fa222a0 100644 --- a/lib/seed.py +++ b/lib/seed.py @@ -1,3 +1,37 @@ #!/usr/bin/env python3 # Script goes here! +from sqlalchemy import create_engine +from sqlalchemy.orm import sessionmaker +from models import Freebie, Company, Dev, Base + +# Create an engine and bind it to the session +engine = create_engine('sqlite:///freebies.db') +Session = sessionmaker(bind=engine) +session = Session() + +# Create the tables +Base.metadata.create_all(engine) + +# Seed data +dev1 = Dev(name='Dan') +dev2 = Dev(name='Ezii') +dev3 = Dev(name='kaka') + +company1 = Company(name='Company A', founding_year=2001) +company2 = Company(name='Company B', founding_year=2020) +company3 = Company(name='Company C', founding_year=2021) + +freebie1 = Freebie(item_name='Item 1', value=10, dev=dev1, company=company1) +freebie2 = Freebie(item_name='Item 2', value=20, dev=dev2, company=company1) +freebie3 = Freebie(item_name='Item 3', value=15, dev=dev3, company=company2) + +# Add the objects to the session +session.add_all([dev1, dev2, dev3, company1, company2, + company3, freebie1, freebie2, freebie3]) + +# Commit the session to persist the data in the database +session.commit() + +# Close the session +session.close()