def criar_desafio(card_id, usuario_desafiado_id): try: session = meta.get_session() session.begin() card = Card().get(card_id) if Desafio.existe_desafio(card.usuario_id, card.id): raise DesafioJaExisteError() desafio = Desafio() desafio.usuario_desafiou_id = card.usuario_id desafio.card_desafiou_id = card.id desafio.usuario_desafiado_id = usuario_desafiado_id desafio.status = Desafio.STATUS_PENDENTE desafio.data_criacao = datetime.now() desafio.data_update = desafio.data_criacao # cria o desafio session.add(desafio) # faz commit session.commit() return desafio except IntegrityError, e: session.rollback() logging.error("desafio já existe %s " % e) raise SuperCraquesError("Ops! Ocorreu um erro na integridade!")
def criar_usuario(user_facebook): try: session = meta.get_session() session.begin() #seta as informacoes do usuario do facebook usuario = Usuario() usuario.id = user_facebook.get("id") usuario.nome = user_facebook.get("name") usuario.primeiro_nome = user_facebook.get("first_name") usuario.ultimo_nome = user_facebook.get("last_name") usuario.link = user_facebook.get("link") usuario.localizacao = user_facebook.get("location").get("name") if user_facebook.get("location") else None usuario.sexo = user_facebook.get("gender") usuario.email = user_facebook.get("email") usuario.patrimonio = 100 # Cria o usuario. session.add(usuario) session.commit() return usuario except IntegrityError, e: session.rollback() logging.error("cadastrando usuario, integrity error %s " % e) raise SuperCraquesError("Ops! Já existe um usuario com este id!")
def aceitar_desafio(desafio_id, usuario_desafiado_id, card_desafiado_id): try: session = meta.get_session() session.begin() desafio = Desafio().get_by_id(desafio_id) if desafio.usuario_desafiado_id != usuario_desafiado_id: raise SuperCraquesError("usuario que aceitou é diferente do que esta no desafio") if desafio.status != Desafio.STATUS_PENDENTE: raise SuperCraquesError("Desafio já aceito!") desafio.card_desafiado_id = card_desafiado_id desafio.status = Desafio.STATUS_ACEITE desafio.data_update = datetime.now() # atualiza o desafio session.add(desafio) # faz commit session.commit() logging.error("Desafio aceito!") return desafio except IntegrityError, e: session.rollback() logging.error("desafio já existe %s " % e) raise SuperCraquesError("Ops! Ocorreu um erro na integridade!")
def existe_desafio(usuario_desafiou_id, card_desafiou_id): session = meta.get_session() query = " select desafio_id from desafio" query = query + " where usuario_desafiou_id=%s and card_desafiou_id=%s and status in (%s)" % (usuario_desafiou_id, card_desafiou_id, Desafio.IN_STATUS) result = session.execute(query) if result.fetchone(): return True else: return False
def abrir_cards(usuario_id): desafios = Desafio().get_desafios_aceitos(usuario_id) try: session = meta.get_session() session.begin() for desafio in desafios: if desafio.card_desafiou.valor >= desafio.card_desafiado.valor: desafio.usuario_vencedor_id = desafio.usuario_desafiou_id desafio.valor_ganho = desafio.card_desafiado.valor else: desafio.usuario_vencedor_id = desafio.usuario_desafiado_id desafio.valor_ganho = desafio.card_desafiou.valor #atualiza o status e data de update desafio.status = Desafio.STATUS_FINALIZADO desafio.data_update = datetime.now() #atualiza o patrimonio if desafio.usuario_vencedor_id == desafio.usuario_desafiou.id: desafio.usuario_desafiou.patrimonio = desafio.usuario_desafiou.patrimonio + desafio.valor_ganho desafio.usuario_desafiado.patrimonio = desafio.usuario_desafiado.patrimonio - desafio.valor_ganho else: desafio.usuario_desafiado.patrimonio = desafio.usuario_desafiado.patrimonio + desafio.valor_ganho desafio.usuario_desafiou.patrimonio = desafio.usuario_desafiou.patrimonio - desafio.valor_ganho # #perde/ganha o card # if desafio.usuario_vencedor_id == desafio.usuario_desafiou.id: # desafio.card_desafiou. # else: # pass # session.add(desafio.usuario_desafiou) # session.add(desafio.usuario_desafiado) # atualiza o desafio session.add(desafio) # faz commit session.commit() except Exception, e: session.rollback() logging.error("Erro ao tentar criar desafio! %s " % e) raise SuperCraquesError("Ops! Ocorreu um erro na transação!")
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
def save(self): session = meta.get_session() if not self.id: session.add(self) session.flush()
def delete(self): session = meta.get_session() session.delete(self) session.flush()
def all(cls, limit=None): session = meta.get_session() if limit: return session.query(cls).all()[limit[0]:limit[1]] return session.query(cls).all()
def fetch_by(cls, **kw): session = meta.get_session() return session.query(cls).filter_by(**kw)
def get(cls, id): session = meta.get_session() return session.query(cls).get(id)
def delete_card(usuario_id, atleta_id): session = meta.get_session() query = " delete from card" query = query + " where usuario_id=%s and atleta_id" % (usuario_id, atleta_id) result = session.execute(query) return result
def ids(usuario_id): session = meta.get_session() query = " select card_id from card" query = query + " where usuario_id=%s" % usuario_id result = session.execute(query) return [row["card_id"] for row in result.fetchall()]
def get_desafios_aceitos(usuario_id): session = meta.get_session() query = " select desafio_id from desafio" query = query + " where usuario_desafiado_id=%s or usuario_desafiou_id=%s and status='%s'" % (usuario_id,usuario_id, Desafio.STATUS_ACEITE) result = session.execute(query) return [Desafio().get(r[0]) for r in result.fetchall()]
def get_desafios_todos(usuario_id): session = meta.get_session() query = " select desafio_id from desafio" query = query + " where usuario_desafiado_id=%s or usuario_desafiou_id=%s order by data_criacao DESC" % (usuario_id, usuario_id) result = session.execute(query) return [Desafio().get(r[0]) for r in result.fetchall()]