"""Model for template_details table in salessheets database.""" from oto import response from sqlalchemy import BigInteger from sqlalchemy import Boolean from sqlalchemy import Column from sqlalchemy import Integer from sqlalchemy import String from salessheets.connectors import mysql from salessheets.constants import error from salessheets.constants import field_const class TemplateDetails(mysql.BaseModel): """Class representing the salessheets default template.""" __tablename__ = 'template_details' template_id = Column('id', Integer, primary_key=True, autoincrement=True) name = Column(String(16)) display_name = Column(String(30)) store_id = Column(BigInteger) email = Column(String(128)) street = Column(String(128)) apartment = Column(String(30)) city = Column(String(128)) state = Column(String(30)) country = Column(String(30)) postal_code = Column(String(30)) telephone = Column(String(128)) is_default = Column(Boolean, default=False) def as_dict(self): """Return object as dict. Returns: dict: Dictionary representation of object """ return { 'template_id': self.template_id, 'template_name': self.display_name, 'is_default': bool(self.is_default), } @mysql.wrap_db_errors def get_all_templates( page_limit=field_const.DEFAULT_PAGE_LIMIT, page_offset=field_const.DEFAULT_PAGE_OFFSET): """Get all templates data from db. Args: page_limit (int): Count of records to fetch. page_offset (int): Count of records to skip. Returns: response.Response: List of templates data or error in Response object. """ with mysql.ss_db_session() as session: templates = session.query(TemplateDetails).order_by( TemplateDetails.template_id).offset(page_offset).limit( page_limit).all() if not templates: return response.create_not_found_response( error.TEMPLATE_DOES_NOT_EXIST) data = [template.as_dict() for template in templates] return response.Response(data) @mysql.wrap_db_errors def get_template_by_id(template_id): """Get template data from db by template_id. Args: template_id (int): id of template in db. Returns: response.Response: Data of template or error in Response object. """ with mysql.ss_db_session() as session: template = session.query(TemplateDetails).get(template_id) if not template: return response.create_not_found_response( error.TEMPLATE_DOES_NOT_EXIST) return response.Response(template.as_dict()) @mysql.wrap_db_errors def get_default_template(): """Get default template from database. Returns: response.Response: Data of template or error in Response object. """ with mysql.ss_db_session() as session: template = session.query(TemplateDetails).filter_by( is_default=True).first() if not template: return response.create_not_found_response( error.TEMPLATE_DOES_NOT_EXIST) return response.Response(template.as_dict())