def create(self, request, user_id):
        """
        Buy a reward
        """
        attrs = self.flatten_dict(request.data)
        # print attrs

        userrewardId = attrs["userreward_id"]
        try:
            userreward = UserReward.objects.get(id=userrewardId)
            if userreward.user.id == int(user_id):
                raise ValueError, "reward belongs to this user already"
        except UserReward.DoesNotExist:
            raise ValueError, "invalid userreward"

        buyer, _, _ = self.idsValidation(user_id, None, None)
        seller = userreward.user
        sellerId = seller.id

        reward = userreward.reward

        try:
            buyerPoint = UserPoint.objects.get(user__id=user_id)
            if buyerPoint.points < reward.equiv_points:
                return ("Buyer does not have enough points", 500)
        except UserPoint.DoesNotExist:
            return ("Buyer does not have enough points", 500)

        # insert reward activity
        rewardActivity = RewardActivity()
        rewardActivity.time = datetime.now()
        rewardActivity.reward = reward
        rewardActivity.activity_type = 2
        rewardActivity.description = attrs.get("description")
        rewardActivity.points_value = reward.equiv_points
        rewardActivity.from_user = seller
        rewardActivity.to_user = buyer

        # update UserReward record
        userreward.user = buyer
        userreward.forsale = False

        # update UserPoint records
        buyerPoint.points -= reward.equiv_points
        try:
            sellerPoint = UserPoint.objects.get(user__id=sellerId)
            sellerPoint.points += reward.equiv_points
        except UserPoint.DoesNotExist:
            sellerPoint = UserPoint()
            sellerPoint.user = seller
            sellerPoint.points = reward.equiv_points

        # commit to DB
        rewardActivity.save()
        userreward.save()
        sellerPoint.save()
        buyerPoint.save()

        return {"id": rewardActivity.id}
 def insertOrUpdate(self, userId, points):
     """
     Insert if userpoint not exists before; otherwise update it
     """
     try:
         userpoints = UserPoint.objects.get(user__id=userId)
         # update
         userpoints.points = userpoints.points + points
         userpoints.save()
     except UserPoint.DoesNotExist:
         user = self.userById(userId)
         if user is None:
             raise LookupError, "No User with this user_id exists: %d" % userId
         else:
             # insert
             userpoints = UserPoint()
             userpoints.points = points
             userpoints.user = user
             userpoints.save()
     except UserPoint.MultipleObjectsReturned:
         raise LookupError, "More than 1 UserPoint records exist in DB for user_id=%d" % userId