"""Pricing Family Model. This model represents an Orchard Pricing Family, e.g. 'Film'. """ import datetime from oto import response from pricing.connectors import mysql from pricing.constants import error import sqlalchemy class PricingFamily(mysql.BaseModel): """Pricing Family model.""" __tablename__ = 'pricing_family' pricing_family_id = sqlalchemy.Column( sqlalchemy.BIGINT, primary_key=True, autoincrement=True) name = sqlalchemy.Column(sqlalchemy.VARCHAR(45)) product_type_id = sqlalchemy.Column(sqlalchemy.Integer) scheme_level = sqlalchemy.Column(sqlalchemy.VARCHAR(45)) 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): """Return the object as dictionary.""" return dict( pricing_family_id=self.pricing_family_id, name=self.name) @mysql.autosession() def get_pricing_families(session): """Return all the pricing families. Args: session (Session): the mysql session. """ try: results = session.query(PricingFamily).all() if results: return response.Response( {'items': [row.to_dict() for row in results]}) return response.create_not_found_response() except Exception as e: return response.create_error_response( 500, f"Database error: {str(e)}") @mysql.autosession() def create_pricing_family(data, session): """Create a new Pricing Family. Args: data (dict): the data from which to create the pricing family. session (Session): the mysql session. Returns: response.Response: containing the created pricing family dict. """ if not data: return response.create_error_response( 400, error.ERROR_MESSAGE_EMPTY_BODY) data['created_date'] = datetime.datetime.now() pricing_family = PricingFamily(**data) session.add(pricing_family) session.commit() return response.Response(pricing_family.to_dict())