from sqlalchemy import bindparam, text from delivery_metadata.api.app import app from delivery_metadata.constants import DistributionFeatureId, DistributionTypeId from delivery_metadata.models import Model class DistributionFeatures(Model): distribution_feature_ids: set[DistributionFeatureId] distribution_type_id: DistributionTypeId async def get_distribution_features(store_id: int) -> list[DistributionFeatures]: # update this to use order type (mobile) for getting TONE features distribution_type_ids = [DistributionTypeId.FULL_TRACK.value] async with app.state.art_relations_connector.db_session() as session: distribution_features_result = ( ( await session.execute( text( """ SELECT cmdt.distribution_features_ids AS distribution_feature_ids, cmdt.distribution_type_id FROM customer_master_master_distribution_type cmdt WHERE cmdt.customer_master_master_id = :store_id AND cmdt.distribution_type_id IN :distribution_type_ids; """ ).bindparams(bindparam("distribution_type_ids", expanding=True)), { "store_id": store_id, "distribution_type_ids": distribution_type_ids, }, ) ) .mappings() .all() ) return [ DistributionFeatures( distribution_feature_ids={ DistributionFeatureId(int(distribution_feature_id)) for distribution_feature_id in distribution_features.distribution_feature_ids.split( "," ) }, distribution_type_id=distribution_features.distribution_type_id, ) for distribution_features in distribution_features_result ]