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