def comprar_card(usuario_id, atleta_json): try: if not atleta_json: raise AtletaNotFoundError() session = meta.get_session() session.begin() usuario = Usuario().get(usuario_id) # valida o patrimonio valor = float(atleta_json["valor"]) if usuario.patrimonio < valor or usuario.patrimonio - valor < 0: logging.debug("usuario.patrimonio < float(valor): %s < %s" % (usuario.patrimonio, valor)) raise SaldoInsuficienteError() # seta as informacoes card = Card() card.usuario_id = usuario.id card.atleta_id = atleta_json["atleta_id"] card.valor = valor # cria o card. session.add(card) # atualiza o patrimonio usuario.patrimonio = usuario.patrimonio - card.valor session.add(usuario) # faz commit session.commit() return card except IntegrityError, e: session.rollback() logging.error("card já comprado %s " % e) raise CardJaCompradoError()
def descartar_card(usuario_id, atleta_id): from supercraques.model.desafio import Desafio try: session = meta.get_session() session.begin() # recupera o usuario usuario = Usuario().get(usuario_id) card_delete = None cards = Card().get_cards(usuario.id) for card in cards: if atleta_id == card.atleta_id: card_delete = card break if card_delete: if Desafio().existe_desafio(usuario.id, card.id): raise SuperCraquesError("Existe um desafio para esse card") else: # deleta o card. session.delete(card) else: raise SuperCraquesError() # atualiza o patrimonio usuario.patrimonio = usuario.patrimonio + card.valor session.add(usuario) # faz commit session.commit() except SuperCraquesError, e: session.rollback() raise e