def get_skill_search( conn: Connection, skillType: Optional[Iterable[int]], num: Optional[Iterable[int]], priority: Optional[Iterable[int]], strengthStatus: Optional[Iterable[int]], lvl1coolDown: Optional[Iterable[int]], numFunctions: Optional[Iterable[int]], ) -> list[MstSkill]: where_clause = [mstSkillLv.c.lv == 1] if skillType: where_clause.append(mstSkill.c.type.in_(skillType)) if num: where_clause.append(mstSvtSkill.c.num.in_(num)) if priority: where_clause.append(mstSvtSkill.c.priority.in_(priority)) if strengthStatus: where_clause.append(mstSvtSkill.c.strengthStatus.in_(strengthStatus)) if lvl1coolDown: where_clause.append(mstSkillLv.c.chargeTurn.in_(lvl1coolDown)) if numFunctions: where_clause.append( func.array_length(mstSkillLv.c.funcId, 1).in_(numFunctions)) skill_search_stmt = (select(mstSkill).distinct().select_from( mstSkill.outerjoin(mstSvtSkill, mstSvtSkill.c.skillId == mstSkill.c.id).outerjoin( mstSkillLv, mstSkillLv.c.skillId == mstSkill.c.id)).where( and_(*where_clause))) return [ MstSkill.from_orm(skill) for skill in conn.execute(skill_search_stmt).fetchall() ]
def get_td_search( conn: Connection, individuality: Optional[Iterable[int]], card: Optional[Iterable[int]], hits: Optional[Iterable[int]], strengthStatus: Optional[Iterable[int]], numFunctions: Optional[Iterable[int]], minNpNpGain: Optional[int], maxNpNpGain: Optional[int], ) -> list[MstTreasureDevice]: where_clause = [mstTreasureDeviceLv.c.lv == 1] if individuality: where_clause.append( mstTreasureDevice.c.individuality.contains(individuality)) if card: where_clause.append(mstSvtTreasureDevice.c.cardId.in_(card)) if hits: where_clause.append( func.array_length(mstSvtTreasureDevice.c.damage, 1).in_(hits)) if strengthStatus: where_clause.append( mstSvtTreasureDevice.c.strengthStatus.in_(strengthStatus)) if numFunctions: where_clause.append( func.array_length(mstTreasureDeviceLv.c.funcId, 1).in_(numFunctions)) if minNpNpGain: where_clause.append(mstTreasureDeviceLv.c.tdPoint >= minNpNpGain) if maxNpNpGain: where_clause.append(mstTreasureDeviceLv.c.tdPoint <= maxNpNpGain) td_search_stmt = (select(mstTreasureDevice).distinct().select_from( mstTreasureDevice.outerjoin( mstSvtTreasureDevice, mstSvtTreasureDevice.c.treasureDeviceId == mstTreasureDevice.c.id, ).outerjoin( mstTreasureDeviceLv, mstTreasureDeviceLv.c.treaureDeviceId == mstTreasureDevice.c.id, )).where(and_(*where_clause))) return [ MstTreasureDevice.from_orm(td) for td in conn.execute(td_search_stmt).fetchall() ]
def _set_orderby_desc(query, orderby, descending): """Set order by to query.""" if orderby == 'fav_user_ids': n_favs = func.coalesce(func.array_length(Task.fav_user_ids, 1), 0).label('n_favs') query = query.add_column(n_favs) if descending: query = query.order_by(desc("n_favs")) else: query = query.order_by("n_favs") else: if descending: query = query.order_by(getattr(Task, orderby).desc()) else: query = query.order_by(getattr(Task, orderby).asc()) query = query.order_by(Task.id.asc()) return query
def _set_orderby_desc(query, orderby, descending): """Set order by to query.""" if orderby == 'fav_user_ids': n_favs = func.coalesce(func.array_length(Task.fav_user_ids, 1), 0).label('n_favs') query = query.add_column(n_favs) if descending: query = query.order_by(desc("n_favs")) else: query = query.order_by("n_favs") else: if descending: query = query.order_by(getattr(Task, orderby).desc()) else: query = query.order_by(getattr(Task, orderby).asc()) #query = query.order_by(Task.id.asc()) return query
mstSkillLv = Table( "mstSkillLv", metadata, Column("funcId", ARRAY(Integer)), Column("svals", ARRAY(String)), Column("script", JSONB), Column("skillId", Integer, index=True), Column("lv", Integer), Column("chargeTurn", Integer, index=True), Column("skillDetailId", Integer), Column("priority", Integer), Column("expandedFuncId", JSONB), ) Index("ix_mstSkillLv_funcId_length", func.array_length(mstSkillLv.c.funcId, 1)) mstTreasureDevice = Table( "mstTreasureDevice", metadata, Column("individuality", ARRAY(Integer)), Column("script", JSONB), Column("id", Integer, primary_key=True), Column("seqId", Integer), Column("name", String), Column("ruby", String), Column("rank", String), Column("maxLv", Integer), Column("typeText", String), Column("attackAttri", Integer), Column("effectFlag", Integer),