"""Store Pricing Tier. This model represents a Store Pricing Tier """ import datetime from oto import response from pricing.connectors import mysql from pricing.constants import error import sqlalchemy class StorePricingTier(mysql.BaseModel): """Store Pricing Tier model.""" __tablename__ = 'store_pricing_tier' store_pricing_tier_id = sqlalchemy.Column( sqlalchemy.BIGINT, primary_key=True) name = sqlalchemy.Column(sqlalchemy.VARCHAR(45)) store_pricing_scheme_id = sqlalchemy.Column(sqlalchemy.BIGINT) orchard_pricing_tier_id = sqlalchemy.Column(sqlalchemy.BIGINT) sort_order = sqlalchemy.Column(sqlalchemy.Integer) created_date = sqlalchemy.Column(sqlalchemy.DateTime) created_by = sqlalchemy.Column(sqlalchemy.VARCHAR(45)) updated_date = sqlalchemy.Column(sqlalchemy.DateTime) updated_by = sqlalchemy.Column(sqlalchemy.VARCHAR(45)) def to_dict(self): """Convert a Store Pricing Tier to dict.""" return dict( store_pricing_tier_id=self.store_pricing_tier_id, name=self.name, sort_order=self.sort_order, store_pricing_scheme_id=self.store_pricing_scheme_id, orchard_pricing_tier_id=self.orchard_pricing_tier_id) @mysql.autosession() def create_store_pricing_tier(store_pricing_scheme_id, data, session): """Create a new store pricing tier. Args: data (dict): the data from which to create the store pricing tier. session (Session): the mysql session. Returns: response.Response: containing the created store pricing tier dict. """ if not data: return response.create_error_response( 400, error.ERROR_MESSAGE_EMPTY_BODY) data['store_pricing_scheme_id'] = store_pricing_scheme_id data['created_date'] = datetime.datetime.now() store_pricing_tier = StorePricingTier(**data) session.add(store_pricing_tier) session.commit() return response.Response(store_pricing_tier.to_dict()) @mysql.autosession() def update_store_pricing_tier_by_id(store_pricing_tier_id, data, session): """Update a store pricing tier by its ID. Args: store_pricing_tier_id (int): the ID of the store pricing tier. data (dict): the data from which to update the store pricing tier. session (Session): the mysql session. Returns: response.Response: containing the updated store pricing tier dict. """ if not data: return response.create_error_response( 400, error.ERROR_MESSAGE_EMPTY_BODY) data['store_pricing_tier_id'] = store_pricing_tier_id data['updated_date'] = datetime.datetime.now() found_store_pricing_tier = session.query( StorePricingTier).get(store_pricing_tier_id) if not found_store_pricing_tier: return response.create_not_found_response() for key, value in data.items(): setattr(found_store_pricing_tier, key, value) session.commit() return response.Response(found_store_pricing_tier.to_dict()) @mysql.autosession() def delete(store_pricing_tier_id, session): """Delete a store pricing tier by its ID. Args: store_pricing_tier_id (int): the ID of the store pricing tier. session (Session): the mysql session. Returns: response.Response: containing the deleted store pricing tier dict. """ found_store_pricing_tier = session.query( StorePricingTier).get(store_pricing_tier_id) if not found_store_pricing_tier: return response.create_not_found_response() session.delete(found_store_pricing_tier) session.commit() return response.Response(found_store_pricing_tier.to_dict())