Example #1
0
 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!")
Example #2
0
 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!")
Example #3
0
 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!")
Example #4
0
 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
Example #5
0
    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!")
Example #6
0
    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()
Example #7
0
    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
Example #8
0
 def save(self):
     session = meta.get_session()
     if not self.id: 
         session.add(self)
     session.flush()
Example #9
0
 def delete(self):
     session = meta.get_session()
     session.delete(self)
     session.flush()
Example #10
0
 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()
Example #11
0
 def fetch_by(cls, **kw):
     session = meta.get_session()
     return session.query(cls).filter_by(**kw)
Example #12
0
 def get(cls, id):
     session = meta.get_session()
     return session.query(cls).get(id)
Example #13
0
 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
Example #14
0
 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()]
Example #15
0
 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()]
Example #16
0
 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()]