class StorageHelper: def __init__(self, message_helper): self.storage_service = StorageService() self.message_helper = message_helper def add_new_transaction(self, transactions: List[StandardTransaction]): """ Проверяем есть ли новые транзации, и возвращаем только новые :param transaction: :return: """ # Запрос к СУБД на предмет новых транзакций session = self.storage_service.create_session() for item in transactions: db_item = session.query(StandardTransaction).filter_by( orderID=item.orderID).first() if not db_item: # Добавить в хранилище session.add(item) self.message_helper.send_notify("New transaction: \n" + item.to_telegram_str()) elif db_item.ordStatus == "Filled": # Пропускаем транзацкию если она завершена continue elif db_item.ordStatus == "Canceled": # Пропускаем транзацкию если она завершена continue else: if item.ordStatus != db_item.ordStatus: session.query(StandardTransaction).filter_by(orderID=item.orderID).\ update({"ordStatus": item.ordStatus, "read_status": 0}) self.message_helper.send_notify("New status: \n" + item.to_telegram_str()) if item.ordStatus == "Filled": # Обновляем время завершения транзацкии что бы отчет таймера выполнить self.time_filled_client_update(session, item.orderID) session.commit() session.close() def read_transactions(self) -> List[StandardTransaction]: session = self.storage_service.create_session() unread_transaction = session.query(StandardTransaction).filter_by( read_status=0).all() for item in unread_transaction: session.query(StandardTransaction).filter_by(orderID=item.orderID). \ update({"read_status": 1}) read_transaction = copy.deepcopy(unread_transaction) session.commit() session.close() return read_transaction def add_order(self, order: ClientTransaction): session = self.storage_service.create_session() session.add(order) session.commit() session.close() def update_client_transaction(self, transactions: List[StandardTransaction]): # Запрос к СУБД на предмет новых транзакций session = self.storage_service.create_session() # storage_transactions = session.query(Transaction).filter(Transaction.orderID.in_(array_orders)).all() for item in transactions: db_item = session.query(ClientTransaction).filter_by( orderID=item.orderID).first() if not db_item: pass else: if item.ordStatus != db_item.ordStatus: session.query(ClientTransaction).filter_by(orderID=item.orderID). \ update({"ordStatus": item.ordStatus}) self.message_helper.send_notify("New status: \n" + item.to_telegram_str()) session.commit() session.close() def get_client_order_by_reference(self, orderID_reference): result = [] session = self.storage_service.create_session() transactions = session.query(ClientTransaction).filter_by( orderID_reference=orderID_reference).all() for item in transactions: result.append(item.orderID) return result def is_time_up(self, orderID): session = self.storage_service.create_session() transaction = session.query(ClientTransaction).filter_by( orderID=orderID).first() if not transaction: return False if transaction.time_up == 1: return False else: return True def get_client_order(self, orderID) -> ClientTransaction: session = self.storage_service.create_session() transaction = session.query(ClientTransaction).filter_by( orderID=orderID).first() session.expunge_all() return transaction def time_up_completed(self, orderID): session = self.storage_service.create_session() session.query(ClientTransaction).filter_by(orderID=orderID). \ update({"time_up": 1}) session.commit() session.close() def time_filled_client_update(self, session, orderID_reference): time_filled_reference = datetime.datetime.utcnow().strftime( "%Y-%m-%dT%H:%M:%S.%fZ") session.query(ClientTransaction).filter_by(orderID_reference=orderID_reference). \ update({"time_filled_reference": time_filled_reference})
class StorageHelper: def __init__(self): self.storage_service = StorageService() def user_add(self, user: User): session = self.storage_service.create_session() db_item = session.query(User).filter_by(telegram_id=user.telegram_id).first() if not db_item: # Добавить в хранилище session.add(user) session.commit() session.close() def get_active_users(self)->List[User]: session = self.storage_service.create_session() db_items = session.query(User).filter_by(status=True).all() session.expunge_all() session.close() return db_items def get_stat_users(self)->List[User]: session = self.storage_service.create_session() db_items = session.query(User).options(joinedload(User.parsers)).all() session.expunge_all() session.close() return db_items def user_change_status(self, telegram_id): session = self.storage_service.create_session() db_item = session.query(User).filter_by(telegram_id=telegram_id).first() if db_item: # Добавить в хранилище db_item.status = not db_item.status session.commit() session.close() def link_add(self, url): session = self.storage_service.create_session() db_item = session.query(LinkParser).filter_by(url=url).first() if not db_item: # Добавить в хранилище session.add(LinkParser(url=url)) session.commit() session.close() def get_link_parser(self)->List[LinkParser]: session = self.storage_service.create_session() db_items = session.query(LinkParser).options(joinedload(LinkParser.users)).all() session.expunge_all() session.close() return db_items def add_parser_to_user(self, telegram_id, parser_id): session = self.storage_service.create_session() db_user = session.query(User).get(telegram_id) db_parser = session.query(LinkParser).get(parser_id) if db_user: # Добавить в хранилище db_user.parsers.append(db_parser) session.commit() session.close() def del_parser_to_user(self, telegram_id, parser_id): session = self.storage_service.create_session() db_user = session.query(User).get(telegram_id) db_parser = session.query(LinkParser).get(parser_id) if db_user: # Добавить в хранилище db_user.parsers.remove(db_parser) session.commit() session.close() def get_active_parser(self): session = self.storage_service.create_session() db_items = session.query(LinkParser).options(joinedload(LinkParser.users)).all() active_parser = [] for parser in db_items: active_users = [i for i in parser.users if (i.status and not i.user_block)] if active_users: active_parser.append(parser) session.expunge_all() session.close() return active_parser def add_products(self, products: List[Product]): if not products: return session = self.storage_service.create_session() for product in products: db_item = session.query(Product).filter_by(url=product.url).first() if not db_item: session.add(product) session.commit() session.close() def read_product(self) -> List[Product]: session = self.storage_service.create_session() unread_transaction = session.query(Product).filter_by(is_send=0).all() for item in unread_transaction: session.query(Product).filter_by(url=item.url). \ update({"is_send": 1}) read_product = copy.deepcopy(unread_transaction) session.commit() session.close() return read_product def link_del(self, parser_id): session = self.storage_service.create_session() db_item = session.query(LinkParser).get(parser_id) if db_item: # удалим в хранилище session.delete(db_item) session.commit() session.close()