from .interface import AnalyticsModuleInterface from .params import Param, ParamSchema class AttributeMin(AnalyticsModuleInterface): description = """ """ inputs = [ ParamSchema, Param("field_name"), Param("attribute_id", configurable=False), Param("collection_id", required=False), ] outputs = [Param("value", int, idx=0)] @staticmethod def get_query( # type: ignore schema: str, collection_id: str = None, SORT_BY_VALUE: str = None, LIMIT: int = None, brackets: list = None, **kwargs, ) -> str: """Generate SQL query based on the fields""" collection_fan = "" value_part = "value::numeric" if collection_id is not None: collection_fan = ( f"INNER JOIN {schema}.collection_fan cf ON fa.fan_id = cf.fan_id " ) if isinstance(collection_id, list): collection_fan += f"AND cf.collection_id IN ({', '.join(str(int(i)) for i in collection_id)}) " else: collection_fan += "AND cf.collection_id = %(collection_id)s " result_query = ( f"SELECT min(COALESCE({value_part}, 0)) AS value " f"FROM {schema}.fan_attribute fa " f"{collection_fan}" f"WHERE fa.attribute_id = %(attribute_id)s;" ) return result_query