diff --git a/lib/freebies.db b/lib/freebies.db index 12beb1c96..ba4969e00 100644 Binary files a/lib/freebies.db and b/lib/freebies.db differ diff --git a/lib/migrations/versions/19183079f74b_create_freebie_model.py b/lib/migrations/versions/19183079f74b_create_freebie_model.py new file mode 100644 index 000000000..af7429a4b --- /dev/null +++ b/lib/migrations/versions/19183079f74b_create_freebie_model.py @@ -0,0 +1,37 @@ +"""Create Freebie Model + +Revision ID: 19183079f74b +Revises: 5f72c58bf48c +Create Date: 2024-09-11 05:36:27.154002 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = '19183079f74b' +down_revision = '5f72c58bf48c' +branch_labels = None +depends_on = None + + +def upgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + op.create_table('freebies', + sa.Column('id', sa.Integer(), nullable=False), + sa.Column('item_name', sa.String(), nullable=True), + sa.Column('values', sa.Integer(), nullable=True), + sa.Column('dev_id', sa.Integer(), nullable=True), + sa.Column('company_id', sa.Integer(), nullable=True), + sa.ForeignKeyConstraint(['company_id'], ['companies.id'], name=op.f('fk_freebies_company_id_companies')), + sa.ForeignKeyConstraint(['dev_id'], ['devs.id'], name=op.f('fk_freebies_dev_id_devs')), + sa.PrimaryKeyConstraint('id') + ) + # ### end Alembic commands ### + + +def downgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + op.drop_table('freebies') + # ### end Alembic commands ### diff --git a/lib/migrations/versions/4ce56f263101_adds___repr__to_freebie.py b/lib/migrations/versions/4ce56f263101_adds___repr__to_freebie.py new file mode 100644 index 000000000..b736bdd54 --- /dev/null +++ b/lib/migrations/versions/4ce56f263101_adds___repr__to_freebie.py @@ -0,0 +1,28 @@ +"""adds __repr__to freebie + +Revision ID: 4ce56f263101 +Revises: 19183079f74b +Create Date: 2024-09-11 05:42:30.560340 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = '4ce56f263101' +down_revision = '19183079f74b' +branch_labels = None +depends_on = None + + +def upgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def downgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### diff --git a/lib/migrations/versions/9924474f0e62_finishes_all_models.py b/lib/migrations/versions/9924474f0e62_finishes_all_models.py new file mode 100644 index 000000000..e531f3f0f --- /dev/null +++ b/lib/migrations/versions/9924474f0e62_finishes_all_models.py @@ -0,0 +1,28 @@ +"""Finishes All Models + +Revision ID: 9924474f0e62 +Revises: fd6bd8697a37 +Create Date: 2024-09-11 06:10:33.639482 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = '9924474f0e62' +down_revision = 'fd6bd8697a37' +branch_labels = None +depends_on = None + + +def upgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def downgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### diff --git a/lib/migrations/versions/fd6bd8697a37_finishes_freebie_model.py b/lib/migrations/versions/fd6bd8697a37_finishes_freebie_model.py new file mode 100644 index 000000000..a41fed122 --- /dev/null +++ b/lib/migrations/versions/fd6bd8697a37_finishes_freebie_model.py @@ -0,0 +1,28 @@ +"""Finishes Freebie Model + +Revision ID: fd6bd8697a37 +Revises: 4ce56f263101 +Create Date: 2024-09-11 06:01:51.637275 + +""" +from alembic import op +import sqlalchemy as sa + + +# revision identifiers, used by Alembic. +revision = 'fd6bd8697a37' +down_revision = '4ce56f263101' +branch_labels = None +depends_on = None + + +def upgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### + + +def downgrade() -> None: + # ### commands auto generated by Alembic - please adjust! ### + pass + # ### end Alembic commands ### diff --git a/lib/models.py b/lib/models.py index 2681bee5a..11b07d29c 100644 --- a/lib/models.py +++ b/lib/models.py @@ -2,6 +2,8 @@ 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", } @@ -15,15 +17,66 @@ class Company(Base): id = Column(Integer(), primary_key=True) name = Column(String()) founding_year = Column(Integer()) + + freebies = relationship('Freebie', backref=backref('company')) + devs = relationship('Dev', secondary='freebies', back_populates='companies') + def __repr__(self): return f'' + + def give_freebie(self, company,dev, item_name, value): + adding_freebie = Freebie( + item_name=item_name, + values=value, + dev_id = dev.id, + company_id = company.id + ) + + session.add(adding_freebie) + session.commit() + @classmethod + def oldest_company(cls): + return session.query(cls).order_by(cls.founding_year).first() + class Dev(Base): __tablename__ = 'devs' id = Column(Integer(), primary_key=True) name= Column(String()) + + freebies = relationship('Freebie', backref=backref('dev')) + companies= relationship('Company', secondary='freebies', back_populates='devs') 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): + if freebie.dev_id == self.id: + freebie.dev_id = dev.id + session.commit() + +class Freebie(Base): + __tablename__ = 'freebies' + + id = Column(Integer, primary_key=True) + item_name = Column(String()) + values = Column(Integer()) + dev_id = Column(Integer(), ForeignKey('devs.id')) + company_id = Column(Integer(), ForeignKey('companies.id')) + + dev = relationship('Dev', backref=backref('freebies')) + company = relationship('Company', backref=backref('freebies')) + + def __repr__(self): + return f'Freebie(id={self.id}, ' + \ + f'item name={self.item_name}, ' + \ + f'values={self.values}, ' + \ + f'dev_id={self.dev_id}, ' + \ + f'company_id={self.company_id})' + + def print_details(self): + return f'{self.dev.name} owns a {self.item_name} from {self.company.name}' \ No newline at end of file